目标检测:Object as points论文个人见解

Object as Points 论文阅读


摘要

大多数成功的目标检测器生成一大堆潜在可能的目标框然后对每一个进行回归和分类,过于麻烦。我们在这里提出了一个不一样的方法,我们把物体建模为一个单一的点——bbox的中心点。我们的检测器使用关键点的预测来找到中心点,并且回归其他一切的属性,诸如size、3D location、orientation、pose等。我们的基于点的网络——center net,是一个端到端的可微的、更加方便快捷的并且比其他一些相关的基于bbox的检测器更有效。Center Net在MS COCO可以达到28.1% AP,并且还有着142的FPS,其他各项性能也均很优异。

1.介绍

目标检测驱动了许多其他的任务比如实例分割、人体姿态估计、跟踪等。它有着从上到下的应用:监视、自动驾驶、视觉的一些任务回答。当前的物体检测器通过一个axis-aligned bbox来表示物体。然后他们把物体检测的任务转换为对一大堆潜在可能框的分类任务。对于每一个bbox,分类器来决定它的内容是个具体的物体还是背景。One-stage 的检测器将anchors滑过一系列可能的框,然后直接进行分类,并不对特定内容在进行指定。Two-stage 的检测器对每一个可能的检测框都重新计算图像特征,然后分类这些特征。名为NMS(非极大值抑制)的后处理通过IoU计算移除一些没用的框或者是重合度太高的框。这种后处理很少可微很难训练,因此当打算当下的检测器不是端到端可训练的。无论如何,过去五年里这些想法还是获得了很好的结果。不过基于滑动窗口的方法还是有点浪费,因为他们需要估计所有可能的物体和维度等。

在这篇论文里,我们提供一种更加简单和有效的选择。我们用一个物体的中心点来代表整个物体。
在这里插入图片描述

其他的属性诸如物体大小、维度、3D内容等全都直接从中心点的图像特征直接而回归得到。这样物体检测就变成了一个标准的关键点检测任务。我们只需要简单地把输入图像送进一个全卷积网络来产生一个热力图。热力图中的峰值连接到物体的中心。峰值处的图像特征预测物体的bbox宽度和高度。模型使用标准的有监督学习来进行训练。过程就是一个单一的网络的前向传播,没有NMS来做后处理。

我们的模型很有普适性,可以加一点点改动而拓展到其他的许多任务。我们提供了在3D 物体检测的一些实验以及人体姿态估计的一些实验,就只是通过中心点的一些额外的输出实现。对于人体姿态估计,我们把2D的关节位置当做是从中心点往外的偏移并且直接在中心点位置进行回归。

由于我们方法很简单,所以他运行的贼快。(本段剩下的测试结果不再赘述)

2.相关工作

Object detection by region classification

一个很成功的深度物体检测器是RCNN,后来Faster RCNN。不过这些方法都依赖于很慢的region proposal methods.

Obejct detection with implicit anchors

Faster RCNN在检测网络中生成region proposal。它围绕一个低分辨率的网格生成固定的bbox并且分类成是否是背景。一个anchor只有与gt bbox的IoU大于0.7时就被标签为前景,小于0.3就被打标为背景,其他的直接忽略。每一个生成的region proposal 会再一次被分类。
把proposal的分类器转换成一个多分类的分类器就形成了ons-stage检测器的基石。有各种不同的trick提升这类检测器的性能,比如说anchor shape,不同的特征图分辨率等, loss的权重分配等。
我们的做法和anchor-based的方法十分接近。一个中心点可以被看成是一个anhcor。
在这里插入图片描述
但是,还是有一些不同的。首先,我们仅仅使用位置来决定锚框而不是IoU。我们没有人为的一个前景和背景的阈值。第二,我们对于每个物体只有一个正样本,于是就不需要NMS。我们只是在热力图中寻找局部的峰值。第三,CenterNet在输出时使用高分辨率图,这减少了对不同anchor的使用。

通过关键点预测的物体检测

我们不是首个使用关键点预测的思想来做物体检测的。CornerNet检测两个bbox的边缘作为关键点,ExtremeNetjiance top-, left-, bottom-, right- most以及所有物体的中心点。这两种方法建立在和我们的网络类似的思想上。但是,他们需要一个结合成组的stage,降低了速度。我们的CenterNet,只是对每个物体提取一个单一的点,不需要分组或者后处理。

Monocular 3D object detection

3D的bbox物体检测对自动驾驶有很大作用。Deep3Dbox使用一个slow-RCNN风格的框架,通过先检测2D物体然后把每个物体送进一个3D的检测网络中。3D RCNN加上了一个额外的头部网络到Faster RCNN中。Deep Manta使用一个粗略到精细的在许多任务上训练过的Faster RCNN。 我们的方法和one-stage 版本你的Deep3Dbox或者3DRCN类似。像这样的,Center Net比其他方法更加简单并且高效。

3.预备知识

让I为一个WH3的输入图片。我们的目标是生成一个关键点的热力图 Y ^ \hat{Y} Y^,其维度为W/R * H/R * C,其中R是输出步长,C是关键点的类型总数。在人体姿态估计中,C=17,代表了人体关节点;在目标检测中C=80(应该是以coco说的)。我们在文章中使用默认的R=4。 输出的步长对输出的预测以R的倍数进行了降采样。如果一个预测值
Y ^ x , y , c \hat{Y}_{x,y,c} Y^x,y,c=1,那么它就关联到一个特定的检测出来的点,如果这个值为0就代表是背景。我们使用了不同的全卷积的编码-译码网络来对输入图片I预测 Y ^ \hat{Y} Y^:一个堆叠的沙漏型网络,ResNet,DLA

我们训练网络如下。对于每一个ground truth的点p属于类别c,我们首先要计算低分辨率下的等效点 p ~ \tilde{p} p~=[p/R]。然后我们将这些点通过高斯核
在这里插入图片描述
分散到热力图Y中,Y是和 Y ^ \hat{Y} Y^一样维度的热力图。其中 σ p \sigma_p σp是一个目标尺度-自适应的方差。如果两个同类别的方差重合了,那么我们取元素级较大的一个值。训练目标函数如下,像素级逻辑回归的focal loss:
在这里插入图片描述
其中 α \alpha α β \beta β是focal loss的超参数,实验中分别取2和4,N则是图片I中的关键点个数。N是用来标准化所有的focal loss的实例到1的。

为了克服由于数据离散而输出步长下采样导致的偏差,我们还为每个中心点预测一个局部的offset O ^ \hat{O} O^,其维度为W/R * H/R * 2。所有的分类c共享一个公共的offset预测。offset通过L1 loss来进行训练。
在这里插入图片描述
这种监督值在关键点的位置 p ~ \tilde{p} p~生效,其他地方忽略。

下一部分讨论如何把这种关键点预测其拓展到一个一般的目标检测器。

4. 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) (x1k,y1k,x2k,y2k)是一个分类为 c k c_k ck物体k的坐标。他的中心点在 p k = p_k= pk= ( ( x 1 k + x 2 k ) / 2 , ( y 1 k + y 2 k ) / 2 ) ((x_1^k +x_2^k)/2,(y_1^k+y_2^k)/2) ((x1k+x2k)/2,(y1k+y2k)/2),我们使用预测 Y ^ \hat{Y} Y^来预测所有的中心点。除此之外我们还对每一个物体k回归物体的size s k s_k sk= ( x 2 k − x 1 k , y 2 k − y 1 k ) (x_2^k - x_1^k,y_2^k-y_1^k) (x2kx1k,y2ky1k)。为了减小计算量,我们使用对所有的类别使用一个单一尺寸的预测 S ^ \hat{S} S^(维度为W/R * H/R * 2)。使用L1 loss计算:
在这里插入图片描述
我们并不要标准化scale并且直接使用原始的像素坐标。我们使用权重来获得将loss相加:
在这里插入图片描述
论文中设置 λ s i z e \lambda_{size} λsize为0.1 λ o f f \lambda_{off} λoff为1.我们使用一个单一的网络来预测关键点 Y ~ \tilde{Y} Y~,offset O ~ \tilde{O} O~,以及size S ~ \tilde{S} S~。网络对于每一个位置预测
共C+4个输出。所有的输出共享一个共同的全卷积的backbone。对每一个方式,bachbone的特征图会被送进33的卷积、ReLU、11的卷积。示意图如下:
在这里插入图片描述
网络输出的总览图如下:
在这里插入图片描述

从点到bounding boxes

在测试的时候,我们首先对每一个类别的热力图中的峰值进行提取。我们检测这样一些点:这类点的值要大于或者等于周围8个点的值,并且取100个这样的点。提取的方式是类似于3*3的maxpool,效果类似于NMS。具体这部分本人借用另一篇博文的内容:
论文精读——CenterNet :Objects as Points
在这里插入图片描述

4.1 3D detection

3D检测对每个物体构造一个3维的dbbox,并且对每个中心点需要额外的三个属性:深度,3D维度,和方向。我们对这三项每一个分别增加了一个head模块。深度d是每一个中心点一个额外的标量。但是深度其实并不好直接回归得到。我们对d做了变换:
在这里插入图片描述 σ \sigma σ是sigmoid函数。我们把计算深度当做是另外一个额外的输出通道D,其取值为[0,1],维度是W/R * H/R.它又是用了两层卷积中间加一个ReLU的操作。我们在sigmoid转换后在原本的深度空间内使用L1 loss进行训练。
3D维度是三个标量。我们直接而回归他们的绝对的值(单位:m),使用一个独立的head(如下)并且使用L1 loss
在这里插入图片描述
方向默认也是一个标量。但是这东西也不会回归。我们用两个bins来呈现方向,且i做n-bin回归。特别地,方向用8个标量值来编码的形式,每个bin有4个值。对于一个bin,两个值用作softmax分类,其余两个值回归到在每个bin中的角度。(这点本人还没有太懂)

4.2 人体姿态估计

人体姿态估计的目标是对图中每个人预测k个2D的人类关节点(k=17 in coco)。我们考虑中心点有k个2d的属性,把他们参数化为相对于中心点的offset(在像素单位)。在这里插入图片描述
计算loss使用 L1 loss。我们借用mask来忽视那些不可见的点。

为了优化关键点,我们进一步预测k个关节的热力图:
在这里插入图片描述
使用标准的bottom-up的多人人体姿态估计方法。我们训练关节点使用focal loss和局部的像素offset,这和单纯的中心点训练差不多。

然后我们找到热力图上训练得到的最近的初始预测值,然后将中心偏移作为一个grouping的线索,来为每个关键点(关节点)分配其最近的人。具体的,让 ( x ^ , y ^ ) (\hat{x},\hat{y}) (x^,y^)为一个检测出来的中心点,我们手写回归所有的关键点位置 l j = ( x ^ , y ^ ) + J ^ x ^ y ^ j l_j =(\hat{x},\hat{y})+\hat{J}_{\hat{x}\hat{y}j} lj=(x^,y^)+J^x^y^j(j=1,2,3…k)我们同样从热力图 Φ . . j \Phi_{..j} Φ..j对每一个类型为j的关节提取所有的置信度大于0.1的关键点位置 L j = L_j = Lj= l ~ j i i = 1 n j {{\tilde{l}_{ji}}_{i=1}^{n_j}} l~jii=1nj
然后将每个回归(第一次回归,通过偏移方式)位置 l j l_j lj 与最近的检测关键点(关节点)进行分配
在这里插入图片描述
考虑到只对检测到的目标框中的关节点进行关联。

5. 实现细节

下图为文中提到的Hourglass和DLA结构:
在这里插入图片描述

  • Hourglass
    堆叠的沙漏结构将输入进行4倍降采样,紧接着是两个顺序的沙漏结构。每一个沙漏结构是一个对称的5层降采样,5层上采样的网络,直接还会有skip connections。这个网络挺大的,但是一般都会有最好的关键点预测的表现。

  • ResNet
    使用一种标准的残差网络,有三个上采样的网络来获得高分辨率输出(output stride = 4)。我们首先分别改变三个上采样层的通道为256,128,64来减少计算量。上采样用双线性插值。

  • DLA
    这是一种图片的分类网络,带有按照的等级的skip connections。我们使用DLA的全卷积上采样版本来获得更加密集的预测。我们从低层到输出利用可形变卷积来增加skip connections。 特别的,我们在每个上采样层将原有的卷积替换为33的可形变卷积。
    我们在每个输出的head前增加了一个3
    3,256通道的卷积层。一个最终的1*1卷积最终生成我们想要的输出

  • 训练
    我们以输入图片为512512来进行训练,这样对应所有的模型生成的输出为128128。我们使用随机翻转,随机尺寸(between0.6 to 1.3),随机分割,以及色彩的变化来做数据增强。我们使用Adam来做优化。我们在训练3D预测的分支时不使用增强,因为裁剪、resize改变3D结构。对于残差网络和DLA-34,我们使用128的batchsize训练(8gpus),学习率5e-4,140epochs,在90和120epoch进学习率降低十倍操作。对于Hourglass-104,我们与ExtremeNet做的一样,batchsize29,学习率2.5e-4,50epoch,在40epoch降低十倍学习率。检测的时候,我们调整了ExtremeNet中的沙漏结构来减少计算。降采样层的参数由ImageNet的pretrain得到上采样随机初始化。残差和DLA-34训练了2.5天(8 TITAN-V GPUS),Hourglass-104训练了5天。

  • 测试
    我们使用三种测试的数据增强:不增强、翻转、翻转+多尺度(0.5,0.75,1,1.25,1.5),对于翻转,我们在解码bbox前对网络输出进行了平均。对于多尺度,使用NMS来合并结果。这些操作证明挺不错的。

实验的一些结果不再解读

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值