CenterNet Objects as Points 论文学习

news2024/11/25 14:19:45

论文链接:Objects as Points

1. 解决了什么问题?

目标检测的任务是从图像中检出目标的矩形框。现有的检测方法大多会穷举所有潜在的目标位置,然后做分类。这非常浪费资源、低效率,并且依赖后处理。单阶段方法会在图像上放置大量的 anchors,然后直接分类。双阶段方法则会对候选边框的特征进行二次计算,做分类。然后这些方法计算 IoU,通过 NMS 后处理去除冗余的预测框。这类后处理操作是不可微的,训练起来比较困难,因此大多数的检测器的训练并不是端到端的。下图展示了 anchor-based 检测器和 CenterNet 在正负样本分配的差异。

2. 提出了什么方法?

本文将目标检测建模为关键点预测问题,通过关键点预测得到中心点位置,然后回归出所有的属性,如尺寸、3D 坐标、朝向角,甚至姿态。对于 3D 框预测,CenterNet 回归目标的绝对深度、3D 框的维度和朝向角。
在这里插入图片描述

2.1 Preliminaries

I ∈ R W × H × 3 I\in \mathbb{R}^{W\times H\times 3} IRW×H×3表示输入图像,宽度为 W W W,高度为 H H H。目的是输出一张关键点热力图 Y ^ ∈ [ 0 , 1 ] W R × H R × C \hat{Y}\in [0,1]^{\frac{W}{R}\times \frac{H}{R}\times C} Y^[0,1]RW×RH×C,其中 R R R是输出步长, C C C是类别数。对于目标检测任务, C = 80 C=80 C=80;本文中,默认步长 R = 4 R=4 R=4。输出步长以系数 R R R对预测结果做下采样。 Y ^ x , y , c = 1 \hat{Y}_{x,y,c}=1 Y^x,y,c=1表示一个检测到的关键点,而 Y ^ x , y , c = 0 \hat{Y}_{x,y,c}=0 Y^x,y,c=0表示背景类。使用一个全卷积的 encoder-decoder 从输入图像 I I I预测 Y ^ \hat{Y} Y^:stacked hourglass 网络、ResNet 和 DLA。

对于类别 c c c的 ground-truth 关键点 p ∈ R 2 p\in \mathbb{R}^2 pR2,计算得到它对应的低分辨率 p ~ = ⌊ p R ⌋ \tilde{p}=\lfloor \frac{p}{R} \rfloor p~=Rp。然后使用高斯核 Y x y c = exp ⁡ ( − ( x − p ~ x ) 2 + ( y − p ~ y ) 2 2 σ p 2 ) Y_{xyc}=\exp(-\frac{(x-\tilde{p}_x)^2+(y-\tilde{p}_y)^2}{2\sigma_p^2}) Yxyc=exp(2σp2(xp~x)2+(yp~y)2),将所有的 ground-truth 关键点拍到一个热力图 Y ∈ [ 0 , 1 ] W R × H R × C Y\in [0,1]^{\frac{W}{R}\times \frac{H}{R}\times C} Y[0,1]RW×RH×C上, σ p \sigma_p σp是一个对目标大小自适应的标准差。如果同类别的两个高斯区域有重叠,就逐像素地取二者的较大值。这部分的损失函数参考了 focal loss:

L k = − 1 N ∑ x y c { ( 1 − Y ^ x y c ) α ⋅ log ⁡ ( Y ^ x y c ) , if Y x y c = 1 ( 1 − Y x y c ) β ⋅ ( Y ^ x y c ) α ⋅ log ⁡ ( 1 − Y ^ x y c ) , otherwise L_k=\frac{-1}{N}\sum_{xyc}\left\{ \begin{array}{l} (1-\hat{Y}_{xyc})^\alpha\cdot\log(\hat{Y}_{xyc}),&\text{if} \quad Y_{xyc}= 1 \\ (1-Y_{xyc})^\beta\cdot(\hat{Y}_{xyc})^\alpha\cdot \log(1-\hat{Y}_{xyc}),&\text{otherwise} \end{array} \right. Lk=N1xyc{(1Y^xyc)αlog(Y^xyc),(1Yxyc)β(Y^xyc)αlog(1Y^xyc),ifYxyc=1otherwise

本文默认 α = 2 , β = 4 \alpha=2,\beta=4 α=2,β=4是 focal loss 的超参数, N N N是图像 I I I中关键点的个数。
为了弥补输出步长造成的离散误差,对于每个中心点,额外地学习一个局部偏移量 O ^ ∈ R W R × H R × 2 \hat{O}\in\mathbb{R}^{\frac{W}{R}\times \frac{H}{R}\times 2} O^RRW×RH×2。对于所有的类别,该偏移量的学习是一样的。用 L1 损失训练该偏移量的学习:
L o f f = 1 N ∑ p ∣ O ^ p ~ − ( p R − p ~ ) ∣ L_{off}=\frac{1}{N}\sum_p \left| \hat{O}_{\tilde{p}}-(\frac{p}{R}-\tilde{p})\right| Loff=N1p O^p~(Rpp~)
该监督只作用于关键点 p ~ \tilde{p} p~,其它位置忽略不计。

2.2 Objects as Points

( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) (x_1^{(k)},y_1^{(k)},x_2^{(k)},y_2^{(k)}) (x1(k),y1(k),x2(k),y2(k))表示目标 k k k的边框,类别是 c k c_k ck。它的中心点位于 p k = ( x 1 ( k ) + x 2 ( k ) 2 , y 1 ( k ) + y 2 ( k ) 2 ) p_k=(\frac{x_1^{(k)}+x_2^{(k)}}{2},\frac{y_1^{(k)}+y_2^{(k)}}{2}) pk=(2x1(k)+x2(k),2y1(k)+y2(k))。使用关键点预测器 Y ^ \hat{Y} Y^来预测所有的中心点。然后对于每个目标 k k k,回归目标的大小 s k = ( x 2 ( k ) − x 1 ( k ) , y 2 ( k ) − y 1 ( k ) ) s_k=(x_2^{(k)}-x_1^{(k)}, y_2^{(k)}-y_1^{(k)}) sk=(x2(k)x1(k),y2(k)y1(k))。为了节省计算量,对所有的类别使用相同的尺寸预测器 S ^ ∈ R W R × H R × 2 \hat{S}\in\mathbb{R}^{\frac{W}{R}\times \frac{H}{R}\times 2} S^RRW×RH×2。用 L1 损失来学习尺寸预测:
L s i z e = 1 N ∑ k = 1 N ∣ S ^ p k − s k ∣ L_{size}=\frac{1}{N}\sum_{k=1}^N \left| \hat{S}_{p_k} -s_k \right| Lsize=N1k=1N S^pksk
不对尺寸做归一化操作,直接用原始的像素坐标值。整体的训练损失是:
L d e t = L k + λ s i z e L s i z e + λ o f f L o f f L_{det}=L_k+\lambda_{size}L_{size}+\lambda_{off}L_{off} Ldet=Lk+λsizeLsize+λoffLoff

在所有的实验中, λ s i z e = 0.1 \lambda_{size}=0.1 λsize=0.1 λ o f f = 1 \lambda_{off}=1 λoff=1。作者使用单个网络来训练关键点预测 Y ^ \hat{Y} Y^、偏移量 O ^ \hat{O} O^和尺寸 S ^ \hat{S} S^。网络在每个位置预测 C + 4 C+4 C+4个输出。所有的输出共享一个全卷积主干。对于每个任务模态,将主干特征分别输入一个由 3 × 3 3\times 3 3×3卷积、ReLU 和 1 × 1 1\times 1 1×1卷积组成的 head。下图展示了该网络的输出:
在这里插入图片描述

From points to bounding boxes

推理时,首先提取每个类别热力图的极大点。如果某个点的值大于等于其相邻的 8 8 8个点的值,则保留作为极大点,我们一共保留 100 100 100个极大点。用 P ^ c \hat{\mathcal{P}}_c P^c表示由 n n n个检测到的中心点组成的集合,对于类别 c c c P ^ = { ( x ^ i , y ^ i ) } i = 1 n \hat{\mathcal{P}}=\left\{(\hat{x}_i,\hat{y}_i)\right\}_{i=1}^n P^={(x^i,y^i)}i=1n。每个关键点的坐标由整数坐标表示 ( x i , y i ) (x_i,y_i) (xi,yi)。使用关键点的值 Y ^ x i y i c \hat{Y}_{x_iy_i c} Y^xiyic表示检测的置信度,输出每个位置的边框:

( x ^ i + δ x ^ i − w ^ i / 2 , y ^ i + δ y ^ i − h ^ i / 2 , x ^ i + δ x ^ i + w ^ i / 2 , y ^ i + δ y ^ i + h ^ i / 2 ) (\hat{x}_i + \delta\hat{x}_i - \hat{w}_i/2,\quad\hat{y}_i + \delta\hat{y}_i - \hat{h}_i/2,\quad\hat{x}_i + \delta\hat{x}_i +\hat{w}_i/2,\quad\hat{y}_i + \delta\hat{y}_i +\hat{h}_i/2) (x^i+δx^iw^i/2,y^i+δy^ih^i/2,x^i+δx^i+w^i/2,y^i+δy^i+h^i/2)

其中 ( δ x ^ i , δ y ^ i ) = O ^ x ^ i , y ^ i (\delta\hat{x}_i,\delta\hat{y}_i)=\hat{O}_{\hat{x}_i,\hat{y}_i} (δx^i,δy^i)=O^x^i,y^i是预测的偏移量, ( w ^ i , h ^ i ) = S ^ x ^ i , y ^ i (\hat{w}_i,\hat{h}_i)=\hat{S}_{\hat{x}_i,\hat{y}_i} (w^i,h^i)=S^x^i,y^i是预测的尺寸。所有的输出直接来自于关键点预测,无需 NMS 或其它后处理。提取极大点可以替代 NMS,在边缘设备上用 3 × 3 3\times 3 3×3最大池化操作实现。

2.3 3D 检测

3D 检测预测每个目标的三维框,需要为每个中心点提供三个额外的属性:深度、3D 维度和朝向角。CenterNet 为每个属性都增加一个 head。在每个中心点,深度 d d d是个标量,但是深度值很难直接回归得到。作者使用 d = 1 / σ ( d ^ ) − 1 d=1/\sigma(\hat{d})-1 d=1/σ(d^)1计算深度, σ \sigma σ是 sigmoid 函数。将深度作为关键点预测器的一个额外通道 D ^ ∈ [ 0 , 1 ] W R × H R \hat{D}\in [0,1]^{\frac{W}{R}\times \frac{H}{R}} D^[0,1]RW×RH计算。它用两个卷积层和 ReLU 实现,然后计算输出值 sigmoid 的倒数。使用 L1 损失训练深度预测器。

目标的 3D 维度是 3 3 3个标量。我们通过一个单独的 head Γ ^ ∈ R W R × H R × 3 \hat{\Gamma}\in\mathbb{R}^{\frac{W}{R}\times \frac{H}{R}\times 3} Γ^RRW×RH×3直接回归它们的绝对值,单位为米。使用 L1 损失训练。

朝向角也默认为一个单独的标量。但它很难直接回归。于是将朝向角表示为两个 bins,在每个 bin 内再回归具体的值。朝向角编码为 8 8 8个标量,每个 bin 用 4 4 4个标量表示。对于每个 bin,前两个标量用于 softmax 分类,后两个标量回归 bin 里面的角度。
网络输出深度特征图 D ^ ∈ R W R × H R \hat{D}\in\mathbb{R}^{\frac{W}{R}\times \frac{H}{R}} D^RRW×RH、3D 维度 Γ ^ ∈ R W R × H R × 3 \hat{\Gamma}\in\mathbb{R}^{\frac{W}{R}\times \frac{H}{R}\times 3} Γ^RRW×RH×3和朝向角编码 A ^ ∈ R W R × H R × 8 \hat{A}\in\mathbb{R}^{\frac{W}{R}\times \frac{H}{R}\times 8} A^RRW×RH×8。对于每个目标实例 k k k,从这三个特征图中提取 ground-truth 中心点附近的值, d ^ k ∈ R , γ ^ k ∈ R 3 , α ^ k ∈ R 8 \hat{d}_k\in\mathbb{R},\hat{\gamma}_k\in\mathbb{R}^3,\hat{\alpha}_k\in\mathbb{R}^8 d^kR,γ^kR3,α^kR8。将输出转换为绝对深度值后,用 L1 损失训练:

L d e p t h = 1 N ∑ k = 1 N ∣ 1 σ ( d k ^ ) − 1 − d k ∣ L_{depth}=\frac{1}{N}\sum_{k=1}^N \left|\frac{1}{\sigma(\hat{d_k})}-1-d_k\right| Ldepth=N1k=1N σ(dk^)11dk
其中 d k d_k dk是目标的绝对深度,单位是米。类似地,3D 维度也是用 L1 损失监督:
L d i m = 1 N ∑ k = 1 N ∣ γ ^ k − γ k ∣ L_{dim}=\frac{1}{N}\sum_{k=1}^N \left|\hat{\gamma}_k-\gamma_k\right| Ldim=N1k=1Nγ^kγk

γ k \gamma_k γk是目标的高度、宽度和长度,单位是米。

朝向角 θ \theta θ是个标量。作者将 8 8 8个标量分为 2 2 2个组,每个组代表一个角度 bin。一个 bin 的角度范围是 B 1 = [ − 7 π 6 , π 6 ] B_1=[-\frac{7\pi}{6}, \frac{\pi}{6}] B1=[67π,6π],另一个是 B 2 = [ − π 6 , 7 π 6 ] B_2=[-\frac{\pi}{6}, \frac{7\pi}{6}] B2=[6π,67π]。因此,每个 bin 就有 4 4 4个标量。在每个 bin 内, 2 2 2个标量 b i ∈ R 2 b_i\in\mathbb{R}^2 biR2用于 softmax 分类(如果朝向角落入 bin i i i)。其余的 2 2 2个标量 a i ∈ R 2 a_i\in\mathbb{R}^2 aiR2分别是 bin 内偏移量(到 bin 中心 m i m_i mi)的 sin ⁡ \sin sin值和 cos ⁡ \cos cos值。 α ^ = [ b ^ 1 , a ^ 1 , b ^ 2 , a ^ 2 ] \hat{\alpha}=[\hat{b}_1,\hat{a}_1,\hat{b}_2,\hat{a}_2] α^=[b^1,a^1,b^2,a^2]。用 softmax 训练分类,用 L1 损失训练角度值:

L o r i = 1 N ∑ k = 1 N ∑ i = 1 2 ( softmax ( b ^ i , c i ) + c i ∣ a ^ i − a i ∣ ) L_{ori}=\frac{1}{N}\sum_{k=1}^N\sum_{i=1}^2 (\text{softmax}(\hat{b}_i,c_i)+c_i\left|\hat{a}_i-a_i\right|) Lori=N1k=1Ni=12(softmax(b^i,ci)+cia^iai)

其中 c i = I ( θ ∈ B i ) , a i = [ sin ⁡ ( θ − m i ) , cos ⁡ ( θ − m i ) ] c_i=\mathbb{I}(\theta\in B_i),\quad a_i=[\sin(\theta-m_i),\cos(\theta-m_i)] ci=I(θBi),ai=[sin(θmi),cos(θmi)] I \mathbb{I} I是指标函数。用 8 8 8个标量来解码出预测朝向角 θ \theta θ

θ ^ = arctan ⁡ 2 ( a ^ j 1 , a ^ j 2 ) + m j \hat\theta=\arctan2(\hat{a}_{j1},\hat{a}_{j2})+m_j θ^=arctan2(a^j1,a^j2)+mj

其中 j j j是分类得分较高的 bin 的索引。

实验设定

作者在 KITTI 数据集上做 3D 框预测的实验。KITTI 包含 7841 7841 7841个训练图像,评价指标是 I o U = 0.5 IoU=0.5 IoU=0.5 A P 11 AP_{11} AP11。作者评价了 2D 框的 AP、朝向角 AOP 和 BEV AP。在训练和测试时的图像分辨率都是 1280 × 384 1280\times 384 1280×384。一共训练用了 70 70 70个 epochs,学习率在第 45 45 45 60 60 60个 epoch 时做衰减。主干网络为 DLA-34,深度、朝向角和维度损失的权重都是 1 1 1

2.4 实现细节

使用了 4 4 4种网络结构:ResNet-18、ResNet-101、DLA-34、Hourglass-104。作者用可变形卷积对 ResNet 和 DLA-34 做了修改。

Hourglass 使用 stacked Hourglass 网络对输入做 4 × 4\times 4×降采样,后面是 2 2 2个连续的 hourglass 模块。每个 hourglass 模块都包括对称的 5 5 5层 down-conv 和 up-conv 网络。这个网络很大,但能输出最佳的关键点预测。

ResNet 用 3 3 3个 up-conv 网络改进了标准的 ResNet,得到更高分辨率的输出(输出步长为 4 4 4)。首先将三个上采样层的通道改为 256 , 128 , 64 256,128,64 256,128,64,以节省计算量。然后在每个 up-conv 前增加一个 3 × 3 3\times 3 3×3可变形卷积。Up-conv 核用双线性插值初始化。
DLA 是一个带跳层连接的图像分类网络。针对密集预测任务,它使用 DLA 的全卷积上采样版本,通过迭代的深度聚合操作增加特征图分辨率。用可变形卷积增强跳层连接。在每个上采样层中,用 3 × 3 3\times 3 3×3可变形卷积替换原始卷积。

在每个输出 head,增加一个 256 256 256通道的 3 × 3 3\times 3 3×3卷积层。最后用 1 × 1 1\times 1 1×1卷积输出最终结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

049、事务设计之分布式基本原理

隔离级别 iso定义的隔离级别 可串行化 可重复读 读已提交 读未提交 隔离级别区分的现象 脏读: 一个事务读取另一个未提交的事务所做更改 不可重复度 :同一事务中,前后执行相同的语句,出来的记录不一样 幻读: 同一事务…

ImVoxelNet 论文学习

论文链接:ImVoxelNet: Image to Voxels Projection for Monocular and Multi-View General-Purpose 3D Object Detection 1. 解决了什么问题? RGB 图像成本低、数据源丰富,可以提供场景和物体的视觉信息,但不包括场景几何结构的…

guitar pro2023最新专业的吉他制谱、扒谱软件

guitar pro8是一款打谱编曲软件。我们是会在guitar pro8里面去得到更多自由的打谱设置操作。软件中的改变都很强大好用,是会等等更轻松的编曲制作和设置等等。这里面的所有使用都是很精彩的,是能够去随意的使用更多不同的音符节拍的设置。想要自己进行打…

全志F1C200S嵌入式驱动开发(spi-nand驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和v3s一样,f1c200s也支持tf卡、spi-nor、spi-nand启动。前面也说过,tf卡由于机械结构的原因,更适合拿来学习,spi-nor和spi-nand比较适合用来进行工业部署和消费娱乐领域。只是s…

使用3DS Max 创建未来派螺栓枪模型

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 步骤 1 创建一个框并将其转换为可编辑多边形(右键单击>转换为:>转换为可编辑多边形),然后使用连接添加一系列边循环,如下图所示。 步骤 2 …

vue往window里存数据

1、存 window._getAction () > {return actions}2、取 const parentAction window._getAction()

使用openvpn docker及frp docker工具构建虚拟专业网络(V-P-N)

使用openvpn docker及frp docker工具构建虚拟专业网络(V-P-N) 借助Docker和OpenVPN技术,您可以在短时间内设置并运行VPN服务器,并保证您的服务器安全。 运行环境 Ubuntu 16.04 TLS Docker version 19.03.8, build afacb8b7f0 OpenVPN Android Client …

Mysql教程(三):Mysql图形化工具DataGrip的基本使用

Mysql教程(三):Mysql图形化工具DataGrip的基本使用 引言:为什么选择DataGrip 智能查询控制台 可以让您在不同的模式中执行查询,并提供本地历史记录,从而记录您的所有活动,避免工作丢失。高效的…

matplotlib 3D

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np# 创建一个三维坐标轴 fig plt.figure() ax fig.add_subplot(221, projection3d) xx fig.add_subplot(222) yy fig.add_subplot(223) xy fig.add_subplot(224)# 生成示例数据…

(vite/webpack 通用)vue 白屏 Uncaught Syntaxerror: Unexpected token ‘?‘

如果可以实现记得点赞分享,谢谢老铁~ 一、问题的描述 突然收到业务方发来的反馈: 浏览器一片空白,开控制台输出:Uncaught Syntaxerror: Unexpected token ? 这个是语法错误。 二、 如果是用vite来构建&#xff1a…

react项目打包部署到服务器上+宝塔面板的操作

首先进行配置react项目,在webpack.json中 加上homepage:.或‘./’ 首先需要项目打包 npm run build 我们会得到一个build 运行build中的index文件如果是空白的话我们需要更改上面的操作重新打包 .或./ 打包完我们需要进入腾讯云或阿里云的安全组中进行配置端口 …

数字图像学笔记 —— 19.肤色检测

文章目录 什么是肤色检测需要使用OpenCV函数颜色空间转换颜色范围位运算 什么是肤色检测 在没有AI之前,肤色检测是计算机视觉的一项常见任务。其根本思路是划定一个颜色区域,只要属于该颜色区域的像素就认为属于肤色。但是这种方法的精确度不高&#xf…

nodejs调取exe执行文件连接websocket

最近有个需求,就是需要前端调取一个封装成exe文件的websoket服务。 很显然,在浏览器的框架下,根本不可能完成这个事情。以为浏览器的沙盒机制和安全策略,是不允许读取本地文件的。 所以,我们需要nodejs的帮助。 那么…

企业应如何做好软件供应链安全管理?

随着软件供应链攻击日益普遍,Gartner 将其列为2022 年的第二大威胁。Gartner 预测,到 2025 年,全球 45% 的组织将遭受一次或多次软件供应链攻击,是2021年的3倍。这些攻击一旦成功,将给企业带来毁灭性打击,因…

mmdet3d预处理(下)| train pipeline

mmdet3d预处理(下)—— train pipeline 文章目录 mmdet3d预处理(下)—— train pipeline基类 BaseTransformLoadPointsFromFileLoadAnnotations3D标签信息:源码 ObjectSample源码 ObjectNoise输入参数源码RandomFlip3D…

【FFNN负荷预测】基于人工神经网络的空压机负荷预测(Matlab代码实现)

📋📋📋本文目录如下:🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 算例1 2.2 算例2 2.3 算例3 🎉3 参考文献 🌈4 Matlab代码、数据、文章 &#x1f4a…

Ubuntu下搭建Vue开发环境,开发第一个程序并部署

Vue.js目前是前端技术比较火热的开发框架,是一个基于JavaScript的前端开发框架,它可以轻松地构建大型的单页面应用程序。因为项目需要在此记录一下Ubuntu下如何搭建Vue开发环境。 目录 1.nodejs npm安装 2.安装CNMP(非必要) …

Argo CD 入门扫盲使用

目录 一、什么是 argo cd 二、为什么使用 argo cd 三、argo cd 架构图 四、Argo CD 使用 1、安装 Argo CD 2、安装 Argo CD CLI 3、发布 Argo CD 服务 4、获取 Argo CD 密码 5、准备 Git 仓库 6、创建 Argo CD App 7、版本升级 8、版本回滚 一、什么是 argo cd A…

S_Tide使用总结(1)函数及数据

1、使用增强调和分析(EHA)计算实测潮位的调和常数,不考虑交点改正。 % s_tide.m - computes the tidal analysis of the real tidal % time series using Enhanced Harmonic Analysis (EHA) without nodal correcti…

Web 3.0时代,重塑教育与学习方式的可能性

随着科技的快速发展和互联网的普及,教育领域也面临着巨大的机遇和挑战。Web 3.0时代的到来为教育与学习方式带来了全新的可能性。在这个数字化时代,我们可以探索和利用Web 3.0技术,重塑教育的方式,提供更个性化、互动性和灵活性的…