object as point阅读笔记
这篇文章做了啥
作者的主要动机是,绝大多数的object detectors都几近枚举大量的潜在的物体locations并且对他们进行分类。这种方式是非常浪费的,不足够的,以及需要额外的后处理。在这篇文章中,我们采用了一种不一样的方法。作者将物体建模为一个点,这个点是其bbx的中心点。作者是使用关键点估计的方法来找到这个中心点,并且回归其他的物体特性,比如size或者是3D location,方向甚至是pose。
作者提出来的这种方法,centernet是一个end2end的,可微分的,简单且快速,甚至比基于bbx的detectors还要快。centernet达到了最佳的speed-accuracy trade-off 在coco数据集上,
比如AP达到28.1%,则帧率为142FPS,37.4%的AP,帧率能在52, 以及更高的45.1的AP,1.4FPS的帧率。
作者使用同样的方法来在KITTI数据集中估计3D bbx,或者是COCO 的keypoint检测数据集上,同样的能比其他更复杂的keypoint检测算法达到更高的精度。
方法初步
假设输入的图片为(I in R^{W imes H imes 3}), 作者的目标是产生一个关键点heatmap (hat{Y} in[0,1]^{frac{W}{R} imes frac{H}{R} imes C}), 其中(R)是stride,C表示有多少个keypoint type,如果是人体姿态估计的话,则(C=17),如果是物体检测的话,则(C=80)。作者默认(R=4)。如果一个prediction (hat{Y}_{x, y, c}=1), 则对应为检测到的关键点,如果(hat{Y}_{x, y, c}=0),则为背景。我们使用一系列的不同的全卷积的encoder-decoder的网络结构来从一个image (I)里面来预测 (hat{Y}),网络结构主要包括stacked hourglass network, 上卷积的残差网络,以及DLA模块。
作者follow Law和Deng的方法来训练keypoint prediction network。对于一个ground truth的keypoint (p in mathcal{R}^{2}),作者先做一个低分辨率的近似,来得到等效的点( ilde{p}=leftlfloorfrac{p}{R} ight floor), 然后,作者将所有的gt的点都放到一个heatmap (Y in[0,1]^{frac{W}{R} imes frac{H}{R} imes C}) , 其中
而,(sigma_p)为随着物体尺寸而改变的物体的方差,如果同一类的两个高斯重叠的话,作者取element-wise maximum。训练的目标使用penalty-reduced pixel-wise logistic regression with focal loss:
其中(alpha)和(eta)分别是focal loss的超参数。(N)表示图片中有多少keypoints.
为了能够恢复通过output stride引入的量化误差,作者对每一个中心点都额外的预测了一个local offset
所有的classes c都共享一个相同的offset prediction,offset使用L1 loss进行训练
这个监督只在locations ( ilde{p})上进行约束,其他的location都会被忽略。
Objects as Points
让(left(x_{1}^{(k)}, y_{1}^{(k)}, x_{2}^{(k)}, y_{2}^{(k)} ight))为物体(k),类别(c_k)的的bbx。作者使用他们的keypoint estimator (hat{Y}), 来预测所有的中心点,除此之外还会预测物体(k)的尺寸(s_{k}=left(x_{2}^{(k)}-x_{1}^{(k)}, y_{2}^{(k)}-y_{1}^{(k)} ight))。为了减少计算压力,作者对所有的物体种类都使用单个size predictor (hat{S} in mathcal{R}^{frac{W}{R} imes frac{H}{R} imes 2}). 同时作者使用了L1 loss,定义如下
总共的训练的loss定义如下
作者选取(lambda_{size} = 0.1) 和 (lambda_{off}=1)。
作者只选取一个网络来预测关键点 (hat{Y}, ext { offset } hat{O}, ext { and size } hat{S})。所以通道一共是(C+4)个,每个位置的输出都是(C+4)个预测结果。
在验证阶段,我们首先提取heatmap的peaks。然后检测所有的,pixel value大于其周围8个值的那些value,然后保存100个peak。假设(hat{mathcal{P}}_{c})是对C类,n个检测到的中心点的集合,可以表述为(hat{mathcal{P}}=left{left(hat{x}_{i}, hat{y}_{i} ight) ight}_{i=1}^{n})。作者使用key point values (hat{Y}_{x_{i} y_{i} c})作为检测的confidence的度量.对于预测的bbx,可以表示为
上述公式包含位置的偏差,以及预测得到的长宽。从关键点估计的所有的输出都能够被直接处理,而不需要IoU-based的NMS或者是其他的后处理。Peak keypoint extraction其实可以看做是NMS的一种替代方案,这种方案可以直接通过(3*3)的max pooling来实现。
人体姿态估计
人体姿态估计涉及到对每一个人实体,估计(k)个2D的人体关节点。对于coco而言,(k=17)。作者将pose视作中心点的(k*2)维度特性。作者直接使用l1 loss回归joint offsets (in pixels) (hat{J} in mathcal{R}^{frac{W}{R} imes frac{H}{R} imes k imes 2})。
作者忽视看不见的节点。为了更进一步refine这种keypoints, 作者进一步估计(k)个human关节的heatmap (hat{Phi} in mathcal{R}^{frac{W}{R} imes frac{H}{R} imes k}),使用的方法是标准的bottom-up的multi-human pose estimation方法。
这里有一个疑问是:作者说的是使用multi-human pose estimation,并且引用了一些文献,我的问题是,这些文献是根据已经检测到的关键点来进行后期的姿态估计吗?
作者还说,作者测center offset是用作一个group的cue。通过把每一个keypoint分配给最近的person instance。特别地,假设((hat{x}, hat{y}))为检测到的中心点,我们首先regress 所有的joint locations
然后作对于所有的joint type (j) 从对应的heatmap $hat{Phi} ldots j $ 提取了所有的关键点的位置(L_{j}=left{ ilde{l}_{j i} ight}_{i=1}^{n_{j}}). 然后作者对每一个regressed的location (l_j) 福一个它最近的detedted keypoint (arg min _{l in L_{j}}left(l-l_{j} ight)^{2})。