Objects as Points

2019-04-25  本文已影响0人  斯文攸归

——UT Austin,UC Berkeley

——https://github.com/xingyizhou/CenterNet

摘要

目前大多数高性能的检测器都是枚举几乎所有可能的物体位置,并对其进行分类。显然这是低效且浪费时间空间的,同时还需要后处理过程。本文将目标建模为单个的点——检测边框的中心点。检测器采用关键点估计的方法来找到中心点,然后将其回归为物体的其他属性:尺寸大小、3D位置、方向甚至姿态。这种基于中心点的方法称为CenterNet,在COCO数据集上实现了在速度为142 FPS时AP=28.1%  ,在速度为52FPS时AP=37.4% ,在多尺度测试速度为1.4FPS时AP=45.1%。

Speed-accuracy trade-off on COCO validation

检测流程是简单地将图片送入全卷积网络得到特征图,特征图中的峰(高亮区域)对应于目标的中心,每个峰中的图像特征用于预测检测框的高和宽,网络前向不需要任何后处理过程。

本文的方法还能扩展用于其他任务:3D对象检测、多人人体姿态估计等。对于3D 边框估计,将中心点回归到对象的绝对深度、3D边框维度以及目标方向。对于人体姿态估计,考虑中心点偏移位置的组合。

Related work

3D目标检测:

Deep3DBox:用RCNN检测2D目标,然后将每个目标送入3D估计网络;

3D RCNN:在Faster RCNN中加入注意力模块,然后接3D建模;

Deep Manta:使用coarse-to-fine的Faster RCNN框架。

本文的方法与局域锚点的单阶段检测器类似,但不同之处在于:

锚点仅仅在位置上,不设置锚点框;

每个目标仅仅有一个正的锚点,因此不会用到NMS,提取关键点特征图上局部峰值点;

CenterNet 相比较传统目标检测而言(缩放16倍尺度),使用更大分辨率的输出特征图(缩放了4倍),无需特征金字塔;

检测的思路是:

对于宽高分别为H,W的图片I\in R^{W\times H\times 3 },要得到关键点热力图\hat{Y} \in {[0,1]}^{\frac{W}{R} \times \frac{H}{R} \times C} ,R 是输出的stride,C是关键点的数量。在人体姿态估计中,人体组成部分C=17;在目标检测中,类别数量C=80R=4\hat{Y} _{x,y,c} 为0表示背景,为1表示检测到的关键点。采用几种不同的全卷积encoder-decoder网络:Stacked hourglass network;up convolutional residual networks(ResNet);deep layer aggregation(DLA)。

对于类别c的关键点标注p\in R^2,计算其低分辨率表示\tilde{p} =\lfloor \frac{p}{R} \rfloor ,将所有标注关键点映射到特征图Y\in {[0,1]}^{\frac{W}{R} \times \frac{H}{R} \times C} ,采用高斯核Y_{x,y,c}=exp(-\frac{(x -\tilde{p} _{x}  )^2+(y -\tilde{p} _{y} )^2}{2\sigma _{p}^2 } )\sigma _{p}是物体尺寸自适应标准差,如果同一类的两个高斯核重合,则按元素取较大的。训练损失:

像素逻辑回归+Focal Loss

\alpha=2, \beta=4 是Focal Loss的超参,N是图片中的关键点数量。

为了克服输出stride带来的偏移误差,另外为每个中心点预测一个局部偏移\hat{O} \in R^{\frac{W}{R} \times \frac{H}{R} \times 2},所有类别共享同一个偏移预测,偏移损失为:

偏移预测损失

Objects as Points

(x_{1}^{(k)}, y_{1}^{(k)},x_{2}^{(k)},y_{2}^{(k)})代表类别c_{k} 的对象k,其中心点p_{k} =(\frac{x_{1}^{(k)}+y_{1}^{(k)}}{2} ,\frac{x_{2}^{(k)}+y_{2}^{(k)}}{2} ),使用关键估计\hat{Y} 来预测所有中心点,另外,对于每个对象k,回归到对象大小s_{k} =(x_{2}^{(k)}-x_{1}^{(k)} ,y_{2}^{(k)}-y_{1}^{(k)})。为了限制计算负载,对于所有类别,使用同一个尺寸的预测\hat{S} \in R^{\frac{W}{R} \times \frac{H}{R}\times 2 } ,在中心点使用L1 Loss:

L1 Loss

对于图片尺寸不进行正则化,直接使用原始像素坐标。整体训练损失为:

Training Loss

\lambda _{size} =0.1,\lambda _{off} =1。我们使用一个单独的网络预测关键点\hat{Y} ,偏移\hat{O} ,尺寸\hat{S} 。网络在每一个位置预测C+4个输出。所有输出共享全卷积的骨架网络。

From points to bounding boxes

在前向的时候,首先在特征图中独立地提取每个类别的中心点高亮图。检测所有响应值大于等于其8个近邻响应值的高亮区域,并且保持其中的前100个,令\hat{P} _{c} 表示类别cn个中心点\hat{P}=[(\hat{x} _{i},\hat{y} _{i} )]_{i=1}^n ,所有中心点表示为整数点坐标。采用中心点的值\hat{Y} _{x,y,c} 作为检测置信度的度量,同时在每个位置产生边框:

Bounding Box

其中

Offset Prediction(偏移预测) Size Prediction(尺寸预测)

3D detection

3D检测估计一个三维的检测框,对于每个中心点余姚三个额外的属性:深度、3D维度和方向。因此对其中每个部分增加一个单独的部分检测头。计算深度的额外输出通道(L1 Loss):\hat{D} \in {[0,1]}^{\frac{W}{R} \times \frac{H}{R} }

一个对象的3D维度是三个标量,回归结果\hat{\Gamma } \in {[0,1]}^{\frac{W}{R} \times \frac{H}{R} \times 3} (L1 Loss)。

方向为8维向量,每个bin中有4维向量,其中两个用于分类,剩下两个用于回归角度。

Human pose estimation

人体姿态估计旨在为每个人体估计k个组合位置(COCOk=17),将姿态看成是中心点的2k维属性,将每个关键点建模为到中心点的偏移\hat{J} =R^{\frac{W}{R}\times  \frac{H}{R} \times 2}(L1 Loss),为了精修关键点,估计k个人体部位特征图\hat{\Phi } \in R^{\frac{W}{R} \times \frac{H}{R} \times k} (Focal Loss)。将初始预测映射到特征图上检测到的最近的关键点。偏移作为分组标志,将各个检测到的关键点分配给最近的人体。令(\hat{x}, \hat{y} )代表检测到的中心点,首先回归至所有人体部位l_{j} =(\hat{x} ,\hat{y} )+\hat{J} _{\hat{x} \hat{y} j}  (j=1,2,...,k),同时在对应于部位j的特征图上提取所有置信度大于0.1的关键点位置L_{j} =\tilde{x} _{ji}^{n_{j} }(i=1,...,n_{j} ),然后将所有回归的人体位置分配到与其最近的关键点。

Implementation details

主干网络对比:

N.A.:没有技巧;F:翻转测试;MS:多尺度测试

目标检测对比:

目标检测对比
上一篇下一篇

猜你喜欢

热点阅读