【目标检测Anchor-Free】CVPR 2019 Object as Points(CenterNet)

前言

前天发了一个推文【目标检测Anchor-Free】CVPR 2019 CenterNet,讲解的是CenterNet: Keypoint Triplets for Object Detection这篇论文,今天要讲的这篇论文全名是Object as Points。这篇论文提出的网络也被叫作CenterNet,和前面介绍的CenterNet重名了,注意加以区别。论文原文见附录。

摘要:目标检测往往是在图像上将目标以矩形框的形式标出。大多数先进的目标检测算法都是基于Anchor框来穷举可能出现目标的位置,然后针对该位置进行目标的分类和回归,这种做法浪费时间,低效,并且需要额外的后处理(NMS)。这篇论文使用不同的方法,构建模型时将目标作为一个点,即目标BBox的中心点。并且检测器使用关键点估计来找到中心点,并回归其它的目标属性,例如尺寸,3D位置,方向,甚至姿态。这个模型被论文叫做CenterNet,这个模型是端到端可微的,更简单,更快速,更准确。下面是其性能:1:Resnet-18 with up-convolutional layers : 28.1% coco and 142 FPS 。2:DLA-34 : 37.4% COCOAP and 52 FPS 。3:Hourglass-104 : 45.1% COCOAP and 1.4 FPS。

下面的Figure2展示了使用CenterNet目标检测器检测目标的一个可视化效果。

在这里插入图片描述

贡献

CenterNet的创新点如下:

  • 用heatmap预测的目标中心点代替Anchor机制来预测目标,使用更大分辨率的输出特征图(相对于原图缩放了4倍),因此无需用到多层特征,实现了真正的Anchor-Free。CenterNet和Anchor-Based检测器的区别如Figure3所示。

在这里插入图片描述

  • 网络可拓展性非常强,论文中介绍了实现3D目标检测和人体姿态估计任务。具体来说对于3D目标检测,直接回归得到目标的深度信息,3D目标框的尺寸,目标朝向;对于人体姿态估计来说,将关键点位置作为中心的偏移量,直接在中心点回归出这些偏移量的值。例如对于姿态估计任务需要回归的信息如Figure4所示。

在这里插入图片描述

  • 由于模型设计简单,因此在运行速度和精度的平衡上取得了很好的结果。

在这里插入图片描述

网络设计

网络结构

CenterNet的网络结构如Figure6所示。对于2D目标检测任务来说,CenterNet输入 512 × 512 512\times 512 512×512分辨率的图像,预测 2 2 2个目标中心点坐标和 2 2 2个中心点的偏置。以及 80 80 80个类别信息。其中Figure6(a)表示Hourglass-104,Figure6(b)表示带有反卷积做上采样的ResNet-18,Figure6(c)表示经典的DLA-34网络,而Figure6(d)表示改进的DLA-34网络。
在这里插入图片描述
注意这几个结构都是Backbone网络,最后只需要在输出特征图上接卷积层映射结果即可。比如在目标检测任务中,用官方的源码(使用Pytorch)来表示一下最后三层,其中hm为heatmap、wh为对应中心点的width和height、reg为偏置量:

(hm): Sequential(
(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 80, kernel_size=(1, 1), stride=(1, 1))
)
(wh): Sequential(
(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 2, kernel_size=(1, 1), stride=(1, 1))
)
(reg): Sequential(
(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 2, kernel_size=(1, 1), stride=(1, 1))
)

前置内容

I ∈ R H × W × 3 I\in R^{H\times W\times 3} IRH×W×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^[01]RW×RH×C,其中 R R R是输出步长(即尺度缩放比例), C C C是关键点参数(即输出特征通道数);关键点类型有 C = 17 C=17 C=17的人体关键点,用于姿态估计。 C = 80 C=80 C=80的目标类别,用于目标检测。我们默认 R = 4 R=4 R=4 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表示背景。我们采用了几个不同的全卷积编码-解码网络来预测图像 I I I得到的 Y ^ \hat{Y} Y^。我们在训练关键点预测网络时参考了CornerNet,对于ground truth的关键点 c c c,其位置为 p ∈ R 2 p\in R^2 pR2,计算得到低分辨率(经过下采样)上对应的关键点为:
在这里插入图片描述
我们将GT坐标通过高斯核
在这里插入图片描述
分散到热力图 Y ∈ [ 0 , 1 ] W R × H R × C Y\in [0,1]^{\frac{W}{R} \times \frac{H}{R}\times C} Y[01]RW×RH×C上,其中 σ p \sigma_p σp是目标尺度-自适应的标准方差。如果某一个类的两个高斯分布发生了重叠,直接取元素间最大的就可以。训练目标函数如下,像素级逻辑回归的Focal Loss:

在这里插入图片描述
其中 α \alpha α β \beta β是Focal Loss的超参数,实验中分别设为2和4, N N N是图像 I I I中的关键点个数,除以 N N N主要为了将所有Focal Loss归一化。

由于图像下采样的时候,GT的关键点会因数据是离散的而产生偏差,我们对每个中心点附加预测了个局部偏移 O ^ ∈ R W R × H R × 2 \hat{O}\in R^{\frac{W}{R}\times \frac{H}{R}\times 2} O^RRW×RH×2,所有类别共享一个偏移预测,这个偏移用L1损失来训练。

在这里插入图片描述

关键点估计用于目标检测

( 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)的bbox,其中心位置为 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))。为了减少j计算负担,我们为每个目标种类使用单一的尺度预测 S ^ ∈ R W R × H R × 2 \hat{S}\in R^{\frac{W}{R}\times \frac{H}{R}\times 2} S^RRW×RH×2,我们在中心点添加了L1损失。

在这里插入图片描述

我们不进行尺度归一化,直接使用原始的像素坐标来优化损失函数,为了调节该Loss的影响,将其乘了个系数,整个训练的损失函数为:

在这里插入图片描述

实验中,取 λ s i z e = 1 \lambda_{size}=1 λsize=1 λ o f f = 1 \lambda_{off}=1 λoff=1,整个网络会在每个位置输出 C + 4 C+4 C+4个值(即关键点类别 C C C, 偏移量的 x , y x,y x,y,尺寸的 w , h w,h w,h),所有输出共享一个全卷积的Backbone。

从点到边界框

在推理的时候,我们分别提取热力图上每个类别的峰值点。如何得到这些峰值点呢?做法是将热力图上的所有响应点与其连接的 8 8 8个临近点进行比较,如果该点响应值大于或等于其 8 8 8个临近点值则保留,最后我们保留所有满足之前要求的前 100 100 100个峰值点。令 P c ^ \hat{P_c} Pc^是检测到的 c c c类别的 n n n个中心点的集合,每个关键点以整型坐标 ( x i , y i ) (x_i,y_i) (xi,yi)的形式给出。 Y x i y i c ^ \hat{Y_{x_iy_ic}} Yxiyic^作为预测的得到的置信度,产生如下的bbox:

在这里插入图片描述其中 ( δ 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}}} (δxi^,δyi^)=Oxi^,yi^^是偏移预测结果, ( w i ^ , h i ^ ) = S x i ^ , y i ^ ^ (\hat{w_i},\hat{h_i})=\hat{S_{\hat{x_i},\hat{y_i}}} (wi^,hi^)=Sxi^,yi^^是尺度预测结果,所有的输出都直接从关键点估计得到,无需基于IOU的NMS或者其他后处理。

3D目标检测

3D目标检测是对每个目标进行3D bbox估计,每个中心点都需要三个附加信息:depth,3D dimension, orientation。我们为每个信息分别添加head。对于每个中心点,深度值depth是一个维度的。然后depth很难直接回归,因此论文参考【D. Eigen, C. Puhrsch, and R. Fergus. Depth map prediction from a single image using a multi-scale deep network. In NIPS, 2014.】对输出做了变换,即 d = 1 σ ( d ^ ) − 1 d=\frac{1}{\sigma(\hat{d})}-1 d=σ(d^)11,其中 σ \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分开的两个卷积层,我们用L1损失来训练深度估计器。

目标检测的3D维度是3个标量值,我们直接回归出它们(长宽高)的绝对值,单位为米,用的是一个独立的head和L1损失:
在这里插入图片描述

目标方向默认是单标量的值,然而这也很难回归。论文参考【A. Mousavian, D. Anguelov, J. Flynn, and J. Kosecka.
3d bounding box estimation using deep learning and geometry. In CVPR, 2017.】用两个bins来呈现方向,并在bins中做回归。特别地,方向用 8 8 8个标量值来编码的形式,每个bin有4个值。对于一个bin,两个值用作softmax分类,其余两个值回归在每个bin中的角度。

姿态估计

人体姿态估计旨在估计图像中每个人的 k k k个2D关键点位置(如在COCO上, k k k 17 17 17,即每个人有 17 17 17个关键点)。因此,中心点回归分支的维度是 k × 2 k\times 2 k×2的,然后我们直接回归出关节点的偏移(像素单位) J ^ ∈ R W R × H R × k × 2 \hat{J}\in R^{\frac{W}{R} \times \frac{H}{R} \times k\times 2} J^RRW×RH×k×2,用到了L1 loss;我们通过给Loss添加Mask方式来无视那些不可见的关键点(关节点)。此处参照了Slow-RCNN。为了精细化关键点,我们进一步估计 k k k个人体关键点热力图 Φ ^ ∈ R W R H R × k \hat{\Phi}\in R^{\frac{W}{R}\frac{H}{R}\times k} Φ^RRWRH×k,使用的是标准的bottom-up 多人体姿态估计,我们训练人的关节点热力图时使用Focal Loss和像素偏移量,这块的思路和中心点的训练类似。我们找到热力图上训练得到的最近的初始预测值,然后将中心偏移作为一个分组的线索,来为每个关键点(关节点)分配其最近的人。具体来说,令 ( x ^ . y ^ ) (\hat{x}.\hat{y}) (x^.y^)表示检测到的中心点,第一次回归得到的关节点为:

在这里插入图片描述
我们提取到的所有的关键点为(关节点,此处是类似中心点检测用热力图回归得到的,对于热力图上值小于0.1的直接略去):

在这里插入图片描述
然后将每个回归(第一次回归,通过偏移方式)位置 l j l_j lj与最近的检测关键点(关节点)进行分配:

在这里插入图片描述
注意,只对检测到的目标框中的关节点进行关联。

实现细节

论文实验了4个结构:ResNet-18, ResNet-101, DLA-34, Hourglass-104。并且使用用deformable卷积层来更改ResNets和DLA-34,按照原样使用Hourglass 网络。得到的结果如下:

在这里插入图片描述

  • Hourglass 堆叠的Hourglass网络通过两个连续的hourglass模块对输入进行了4倍的下采样,每个hourglass 模块是个对称的5层 下和上卷积网络,且带有skip连接。该网络较大,但通常会生成最好的关键点估计。

  • ResNet-18 Xiao et al. [55]等人对标准的ResNet做了3个up-convolutional来获得更高的分辨率输出(最终stride为4)。为了节省计算量,论文改变这3个up-convolutional的输出通道数分别为256,128,64。up-convolutional核初始为双线性插值。

  • DLA 即Deep Layer Aggregation (DLA),是带多级跳跃连接的图像分类网络,论文采用全卷积上采样版的DLA,用deformable卷积来跳跃连接低层和输出层;将原来上采样层的卷积都替换成3x3的deformable卷积。在每个输出head前加了一个 3 × 3 × 256 3\times 3\times 256 3×3×256的卷积,然后做1x1卷积得到期望输出。

  • 训练 训练输入图像尺寸:512x512; 输出分辨率:128x128 (即4倍stride);采用的数据增强方式:随机flip, 随机scaling (比例在0.6到1.3),裁剪,颜色jittering;采用Adam优化器;在3D估计分支任务中未采用数据增强(scaling和crop会影响尺寸);其它细节见原文。

实验结果

可以看到CenterNet的精度吊打了YOLOv3,并且完全的Anchor-Free使得我们看到了目标检测更好的思路,这篇论文我觉得应该是2019年目标检测领域最有价值的论文之一了。

在这里插入图片描述
在这里插入图片描述

贴一个预测可视化效果图看看。

在这里插入图片描述
在这里插入图片描述

结论

这篇论文可以让我们理解什么是真正的Anchor-Free,并且另外一个重要点的是这种方法将检测,姿态估计,甚至分割都可以统一起来,做法十分优雅。不过CenterNet仍有缺点,例如在图像中,同一个类别中的某些物体的GT中心点,在下采样时会挤到一块,也就是两个物体在GT中的中心点重叠了,CenterNet对于这种情况也是无能为力的,可能结果就是只能检测一个目标了,不过这种密集检测的问题本就是这个领域仍未解决的难题,只能期待大牛后续工作了。对我们工程派来说,没有NMS后处理以及这种统一多个任务的思想实在是一剂强心针,这个方向的学术研究和工程部署应该会逐渐成熟的。

附录

  • 论文原文:https://arxiv.org/pdf/1904.07850.pdf
  • 代码:https://github.com/xingyizhou/CenterNet
  • 参考:https://blog.csdn.net/c20081052/article/details/89358658

同期文章


欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值