【目标检测(一)】RCNN详解——深度学习目标检测的开山之作
【目标检测(二)】SPP Net——让卷积计算共享
【目标检测(三)】Fast RCNN——让RCNN模型能端到端训练
【目标检测(四)】Faster RCNN——RPN网络替代selective search
【目标检测(五)】YOLOv1——开启one-stage目标检测的篇章
【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger
【目标检测(七)】YOLOv3——准确率的全面提升
【目标检测(八)】一文吃透目标检测回归框损失函数——IoU、GIoU、DIoU、CIoU原理及Python代码
【目标检测(九)】FPN详解——通过特征金字塔网络进行多尺度特征融合
【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰
【目标检测(十一)】CenterNet——Anchor Free, NMS Free
【目标检测(十二)】FCOS——用实例分割的思想做Anchor Free的目标检测
1. Motivation
纵观目标检测的发展历史,不论是两阶段的Faster RCNN还是单阶段的YOLO算法,都引入了anchor,anchor的存在使得算法不需要train from scrach,这能帮助检测器取得更好的效果。但是随着Anchor Box的数量逐渐增多,它成为了制约目标检测性能的一个重要瓶颈。CornerNet就弃用了Anchor,被视为目标检测的开山之作(虽然YOLOv1也是Anchor Free的)。CornerNet通过网络输出两个heatmap和一个embedding vector来对目标框的左上角和右下角顶点进行预测。
CornerNet有两个缺点:一个是往往边界框的角点往往落在语义信息之外,目标狂的顶点往往落在物体语义信息之外;另一个是它们需要一个整合分组(左上角和右下角顶点配对)的阶段,这大大降低了算法的性能和效率。所以CenterNet应运而生,我们常说的CenterNet指的是《Object as Points》而不是论文中名字带有CenterNet的那一篇文章。CenterNet,顾名思义非常直观,将目标检测问题专户为目标框中心点的检测问题,它是在CornerNet的基础上改进的Anchor Free类算法,区别在于CornerNet是找目标的角点,而CenterNet是找目标的中心点,并且CenterNet也弃用了CornerNet的定点配对方法,提升了模型的准确率和推理性能。与单阶段目标检测算法yolov3相比,该算法在保证速度的前提下,精度提升了4个百分点。与其他的单阶段或者双阶段目标检测算法相比,该算法具有以下优势:
- 省去了anchor机制,提升了检测算法的速度。
- 直接在heatmap上面执行了maxpooling操作,在理论上去掉了耗时的NMS后处理操作。
- 使用关键点估计来作目标检测,具有很好的通用性,能够用在关键点检测、3D目标检测上。
2. CenterNet原理
2.1 Pipeline
- 图片缩放到
512*512
尺寸(场边缩放到512,短边padding),随后将缩放后的图片输入网络。 - 图片经过backbone(以ResNet50为例)提取特征得到feature1的尺寸为
2048*16*16
。 - feature1经过转置卷积模块,经过3次上采样得到feature2的尺寸为
80*128*128
(这里表示有80个类别),预测长宽的特征图尺寸为2*128*128
,预测中心点偏移量特征图的尺寸为2*128*128
(2表示x和y两个维度)。
Notes: 转置卷积模块,包括3个反卷积组,每个组都包括1个3*3
卷积和1个反卷积,每次反卷积都会将特征图尺寸放大一倍。有很多代码中会将反卷积前的3*3
卷积替换为DCNv2(Deformable ConvetNets V2)来提高模型的拟合能力。
2.2 模型输出特征图
backbone经过Neck后最后会输出3个分支,分别是Heatmap, Center Offset和Box Size,如下:
- Heatmap:
C * H * W
,目标中心的热度图预测。 - Center Offset:
2 * H * W
,预测中心点的偏差值。 - Box Size:
2 * H * W
,每个目标中心对应bbox的宽和高。 论文中以下图来进行示意:
- Heatmap特征图含义:是CenterNet最核心的输出,共有C个Channel(类别数,不包括背景),特征图上每个通道上的element对应该类别物体的中心点位置,值表示属于该类别的概率值。
- Offset特征图含义:由于像素点和特征图的坐标点一定是整数,在特征图映射到原图过程中会产生整数量化效果,即clip掉小数部分造成误差,对小目标的影响效果尤为明显,ROI Pooling就存在这样的问题,所以才有了后来的ROI Align和Precise ROI Pooling的改进。CenterNet专门设置了offset分支来预测中心点坐标的偏差值,channel为2对应着宽和高。
- Box Size特征图含义:每个特征图的element对应预测框的宽和高值。
2.3 主干网络结构
backbone其实是可以任意设定的,resnet18、resnet50、resnet101等都是可以的,这些backbone是经过了5次下采样,所以特征图尺寸变成了1/32。CenterNet在backbone后面接上3层转置卷积,每一层上采样2倍,这样特征图尺寸又上升到原图尺寸的1/4。网络图片输入尺寸是512*512
,那么输出的特征图尺寸为128*128
。
2.4 Heatmap生成
如果只把物体的真实中心点的heatmap值设置为1,其他位置的heatmap都是0,一定会造成正负样本严重不均衡,导致无法获得好的学习效果。论文沿用CornerNet的方法,在中心点附近生成一个高斯核,在高斯核内根据距离的远近对heatmap的label进行惩罚,离中心点越远惩罚越大,label越接近0,离中心点越近惩罚越小,label越接近1。heatmap进行物体中心点预测和分类信息的预测,每一个类别都有一张heatmap(对应一个通道),每一张heatmap上,若某个坐标处有物体目标的中心点,即在该坐标处产生一个keypoint(用高斯圆表示),如下图所示:
产生heatmap的步骤解释如下:
- 将目标的bbox缩放到
128*128
的尺度上,然后求box的中心点坐标并取整,设为point。 - 根据目标box大小计算高斯圆的半径,设为r。求三种情况的半径的最小值,这里参考这篇博客的手稿来进行理解:www.cnblogs.com/silence-cho…
- 在heatmap图上,以point为圆心,半径为r填充高斯函数计算值。(point点处为最大值,沿着半径向外按高斯函数递减)使用一个高斯分布,标准差为半径的1/3,映射heatmap上的点(i, j):
注:如果两个高斯核在特征图上重合,论文采取element-wise maximum的方法。
2.5 Loss设计
- Heatmap Loss:首先再次明确一下特征图上的真实Label是什么:
上面已经提到,对于热图上位置xyc来说,求出GT框中心点对应到特征图上的点坐标(除以stride后向下取整),然后进行Loss计算:
公式中N表示样本中心点数量,考虑到正负样本的不均衡性,论文改造了focal loss中的损失函数作为CenterNet中的热图的损失函数,来解决正负样本不均衡、难以样本不均衡的问题。
- Offset Loss: 主要拟合heatmap中心点的离散取整量化带来的误差,真实值是GT Box中心点进行缩放之后坐标的小数部分,损失函数的计算方式如下:
注:这里只计算物体中心点的损失,其他点忽略不计。
- Size Loss: 衡量预测框长宽的误差,使用L1 Loss:
- 总误差:Heatmap Loss + Offset Loss + Size Loss
其中。
2.6 No NMS设计
- 论文中说明可以使用一个
3*3
的max pooling来代替NMS后处理,就可以去掉NMS了。CenterNet没有anchor这个概念,只负责预测物体的中心点,没有大量的anchor先验框,NMS的需求也就没那么大了。 - 论文中做了使用NMS和不使用NMS的消融实验,使用NMS有微弱的提升效果:
- 论文中在理论上提出了消除NMS的可能性,个人认为在工业实际应用中最好还是加上NMS后处理保险一些,提高准确率。
3. CenterNet效果及优劣势分析
3.1 主要效果
CenterNet在实时推理速度下的准确率提升效果还是比较显著的,由于没有了复杂的anchor机制,整个算法的速度也是非常快的。
3.2 优劣势分析
优点:
- 相比CornerNet,中心点Heatmap极大的简化了算法的复杂程度,不涉及判断那两个角点属于一组的问题。
- 模型结构简单,易于实现和理解。
- 具有很好的通用性,不仅可以用于目标检测,还可以用于3D检测和人体姿态识别等。
- 模型速度快,嵌入小的主干网络后能部署于端侧设备。
缺点:
- 对于稠密的物体,如果经过下采样后中心点重叠或者中心点高斯核重合度很高,CenterNet可能会无能为力,可能会将两个物体当作一个物体来训练。