paper:Objects as Points
Source code:https://github.com/xingyizhou/CenterNet
思想:
目标检测将对象识别为图像中与轴对齐的框。大多数成功的物体检测器都列举了几乎详尽的潜在物体位置列表,并对每个位置进行分类,这是比较浪费时间的一种做法,而且需要额外的后处理方法。
在CenterNet中,作者将对象建模为单个点,即其边界框的中心点。我们的检测器使用关键点估计来找到中心点,并回归到所有其他对象属性,如大小、三维位置、方向,甚至姿势。与相应的基于anchor的检测器相比,具有端到端的可区分性、更简单、更快速和更精确。
1. Introduction
当前的目标检测是通过用一个边界框来紧密包围对象从而表示它,然后将对象检测简化为大量潜在对象边界框的图像分类。对于每个边界框,分类器确定图像内容是特定对象还是背景。
对于one-step网络来说,通过滑动窗口生成一些列密集的anchor,然后直接对这些anchor进行分类预测,近年来的改进方向包括anchor的比例形状(yolo系列),不同尺度进行特征融合(FPN系列)以及不同样本见的损失权重改进(RetinaNet)。而对于two-step网络来说,会对anchor先进行一个nms挑选,所以其训练比较麻烦不能实现端对端预测。
CenterNet中,会用一个中心点去代表检测对象。然后对象的其他属性(对象大小、尺寸、三维范围、方向和姿态等等)则直接从中心位置的图像特征进行回归。也就是将目标检测问题简化成一个关键点检测问题。
主要的流程如下:
将图像简单的喂入一个卷积神经网络得到一个heatmap,heatmap的峰值(peaks)对应与物体的中心,每个峰值处的图像特征预测对象边界框的高度和宽度。当进行检测时,只需要简单的进行前向传播实现,不需要NMS等后处理方法,所以可以实现端对端检测。
1. CenterNet与其他基于anchor算法的区别:
CenterNet与基于anchor的One-step算法密切相关,因为一个中心点可以看作是一个形状不可知的anchor,但存在一些区别:
1)CenterNet通过根据位置(peaks)分配anchor,而不是在特征图上进行密集覆盖,不需要手动的设置前景或背景的阈值。
2)CenterNet中的每一个对象只有一个正样本的anchor,所以不需要非极大值抑制处理,也就是不需要后处理方法,只需要提取关键点heatmap中的局部峰值。
3)与传统的对象检测器相比,CenterNet使用了更大的输出分辨率,这消除了对多个anchor的需要
2. CenterNet与其他关键点检测算法的区别:
CenterNet不是关键点检测的首次使用。CornerNet使用对象的左上角与右下角作为两个关键点,而 ExtremeNet使用对象的四个角点与中心点五个点作为关键点。这两种方法都建立在与CenterNet相同的鲁棒关键点估计网络上。
但是这两种关键点检测算法,在关键点检测之后需要一个组合分组阶段(以CornerNet为例,由于分了两组heatmap分别检测左上角与右下角,需要一个额外的embedding计算这两组之间的距离,距离相识则被匹配为一组),这大大降低了每个算法的速度。
而在CenterNet中,只需为每个对象提取一个中心点,而不需要分组或后处理。
2. Preliminary
2.1 keypoint detection loss
关键点预测损失公式为:
α和β是focal loss超参数,这里沿用CornerNet中的设置,α = 2 , β = 4 。N则为图片中总的keypoint数量。
2.2 offset loss
偏移损失公式如下:
2.3 size loss
2.4 overall loss
网络预测每个地点总共有C + 4个输出。所有输出共享一个公共的全卷积骨干网络。对于每个模态,最后的特征图分别通过一个3x3卷积,ReLU激活函数与一个1x1卷积,分别得到三个预测结果(heatmap,size,offset)。按我的理解,也就是接了三个head。
(对于目标检测主要看第一行,通过三个head分别获取heatmap,offset,size)
在backbone之后接了三个分支网络,分别用于预测heatmap(c个通道),size(2个通道),offset(2通道)。所有最后每个位置共有C+4个通道。如下图所示:
heatmap分支即keypoint prediction分支,heatmap有c个channel,对应c个类。最后挑选每个channel中peaks作为该类的center points。
size分支用于预测宽和高,offset分支用于弥补卷积操作的下采样导致离散误差,做回归用,这两个分支与类无关,所有类共享。
(图片参考:https://blog.csdn.net/yanghao201607030101/article/details/110202400)
3. Objects as Points
在推断的时候,首先独立地提取每个类别的heatmap中的峰值。如果一个点的值大于或等于其八邻域(周围最近的8个点)中的所有值则视为peak,最后保留值最大的100个peaks。
所有输出直接从关键点估计产生,无需基于IoU的非最大值抑制(NMS)或其他后处理。峰值关键点提取是一种充分的NMS替代方案,可以使用3 × 3最大池操作在器件上高效实现。
4. Result
paper使用了四种不同的backbone进行实验:ResNet-18, ResNet-101, DLA-34 , 与 Hourglass-104 。其中对ResNets和DLA-34进行了更改,而 Hourglass-104 没有更改。结构如下:
四种backbone的实验结果:
与其他SOTA算法的对比: