目标检测anchor-free框架:CenterNet :Objects as Points
Posted 超级无敌陈大佬的跟班
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目标检测anchor-free框架:CenterNet :Objects as Points相关的知识,希望对你有一定的参考价值。
论文地址:https://arxiv.org/pdf/1904.07850.pdf
发布时间:2019.4.16
摘要
大多数anchor-base的目标检测器都先穷举出目标位置,然后对该位置进行分类,这种方式浪费时间,低效,还需要额外的后处理(NMS)。本文中,CenterNet构建模型时将目标作为一个点——即目标BBox的中心点。检测器采用关键点估计来找到中心点,并回归到其他目标属性,例如尺寸,3D位置,方向,甚至姿态。本文基于中心点的方法称为:CenterNet,相比较于基于BBox的检测器,CenterNet模型是端到端可微的,更简单更快更精确。实现了速度和精确的权衡,性能指标如下:MS COCO dataset:with 28:1% AP at 142 FPS; 37:4% AP at 52 FPS; and 45:1% AP with multi-scale testing at 1.4 FPS。
现有的一阶和二阶目标检测算法:
- One stage detectors:在图像上滑动穷举可能bbox(即锚点),然后直接对框进行分类。
- Two-stage detectors:对每个潜在框重新计算图像特征,然后将那些特征进行分类。
- 后处理,即 NMS(非极大值抑制):通过计算Bbox间的IOU来删除同个目标的重复检测框。这种后处理很难区分和训练,因此现有大多检测器都不是端到端可训练的。
基于目标中心点预测
作者通过目标中心点来呈现目标(见图2),然后在中心点位置回归出目标的一些属性,例如:size, dimension, 3D extent, orientation, pose。 而目标检测问题变成了一个标准的关键点估计问题。我们仅仅将图像传入全卷积网络,得到一个热力图,热力图峰值点即中心点,每个特征图的峰值点位置预测了目标的宽高信息。
1. CenterNet网络结构
除了检测任务外,CenterNet还可以用于肢体识别或者3D目标检测等(本文不涉及),因此CenterNet论文中提出了三种backbone的网络结构,分别是Resnet-18, DLA-34和Hourglass-104(DLA-34网络即Deep Layer Aggregation, Hourglass网络主要用于人体姿态估计),三种backbone准确度和速度如下:
实际工作中我主要用CenterNet进行目标检测,常用Resnet50作为backbone,这里主要介绍resnet50_center_net,其网络结构如下:
可以发现CenterNet网络比较简单,主要包含以下几个部分:
- 首先resnet50主干网络提取图片特征;
- 然后是反卷积模块Deconv(三个反卷积)对特征图进行上采样
- 最后三个分支卷积网络用来预测heatmap, 目标的宽高和目标的中心点坐标。
值得注意的是反卷积模块,其包括三个反卷积组,每个组都包括一个3*3的卷积和一个反卷积,每次反卷积都会将特征图尺寸放大一倍,有很多代码中会将反卷积前的3x3的卷积替换为DCNv2(Deformable ConvetNets V2)来提高模型拟合能力。
2. heatmap(热力图)理解和生成
2.1 heatmap生成
CenterNet将目标当成一个点来检测,即用目标box的中心点来表示这个目标,预测目标的中心点偏移量(offset),宽高(size)来得到物体实际box,而heatmap则是表示分类信息。每一个类别都有一张heatmap,每一张heatmap上,若某个坐标处有物体目标的中心点,即在该坐标处产生一个keypoint(用高斯圆表示),如下图所示:
产生heatmap的步骤解释如下:
如下图左边是缩放后送入网络的图片,尺寸为512x512,右边是生成的heatmap图,尺寸为128x128(网络最后预测的heatmap尺度为128x128。其步骤如下:
-
1.将目标的box缩放到128x128的尺度上,然后求box的中心点坐标并取整,设为point
-
2.根据目标box大小计算高斯圆的半径,设为R;
-
3.在heatmap图上,以point为圆心,半径为R填充高斯函数计算值。(point点处为最大值,沿着半径向外按高斯函数递减)
(注意:由于两个目标都是猫,属于同一类别,所以在同一张heatmap上。若还有一只狗,则狗的keypoint在另外一张heatmap上)
2.2 heatmap高斯函数半径的确定
heatmap上的关键点之所以采用二维高斯核来表示,是由于对于在目标中心点附近的一些点,期预测出来的box和gt_box的IOU可能会大于0.7,不能直接对这些预测值进行惩罚,需要温和一点,所以采用高斯核。借用下大佬们的解释,如下图所示:
关于高斯圆的半径确定,主要还是依赖于目标box的宽高,其计算方法为下图所示。 实际情况中会取IOU=0.7,即下图中的overlap=0.7作为临界值,然后分别计算出三种情况的半径,取最小值作为高斯核的半径r;
3. CenterNet损失函数
整个CenterNet的损失函数包含3个部分,表示 heatmap中心点损失, 表示目标中心点偏移损失,表示目标长宽损失函数。
下面分别详细介绍三个损失:
3.1 ☆Heatmap损失函数
上图展示了Heatmap损失函数,该函数是在Focal Loss的基础上进行了改进,其中的α与 β 是两个超参数,用来均衡难易样本; 表示GT值,表示预测值;N表示关键点的个数。
1)当 = 1时(该位置是GT中心点):
- 简单样本:当 = 1时(正样本),易分类样本的预测值接近为1,此时就表示一个很小的数值,损失函数loss的数值就比较小,起到了降低该样本权重的作用。
- 难样本:当 = 1时(正样本),难分类样本的预测值接近为0,此时 就表示一个较大的数值,此时损失函数的数值就比较大,起到了增加该样本权重的作用。
2)当 != 1(该位置为背景时):
- 作用:当 != 1时,我们期望预测值应该为0,因此使用抑制预测值的得分过高,利用来充当惩罚项。预测值(得分)越接近1,惩罚项的值就越大,使loss值也变大。
- 作用:是用来减少对前景GT中心点附近关键点的惩罚(即,靠近GT中心点附近的关键点给予较小的惩罚)。因为是一个高斯核生成的中心点,在中心点 = 1,但是在中心点周围扩散会由1慢慢变小但是并不是直接为0,当前位置距离GT中心点越近,值越接近1,数值也就越小,同时loss值也变小,因此可以减轻GT中心点附近关键点的惩罚力度。
3.2 中心点偏移损失函数
上面公式展示了损失函数,其中表示网络预测的偏移量数值,p表示图像中心点坐标,R表示Heatmap的缩放因子(下采样倍数R=4), 表示缩放后中心点的近似整数坐标,整个过程利用L1 Loss计算正样本块的偏移损失。由于骨干网络输出的 feature map 的空间分辨率是原始输入图像的1/4。即输出 feature map 上的每一个像素点对应到原始图像的一个4x4 区域,这样使得特征图重新映射到原始图像上的时候会带来位置误差,因此引入了偏置的损失值。
假设目标中心点p为(125, 63),由于输入图片大小为512*512,缩放尺度R=4,因此缩放后的128x128尺寸下中心点坐标为(31.25, 15.75), 相对于整数坐标(31, 15)的偏移值即为(0.25, 0.75),即为。
3.3 目标长宽损失函数
其中N表示关键点的个数,Sk表示目标的真实尺寸,表示预测的尺寸,整个过程利用L1 Loss来计算正样本块的长宽损失。
4. CenterNet推理阶段流程
CenterNet网络的推理阶段的实现步骤如下所述:
- 步骤1-首先将输入图片缩放到512*512大小(长边缩放到512,短边补0);
- 步骤2-然后通过主干网络提取特征(feature map1尺寸16*16)
- 步骤3-通过反卷积模块Deconv,三次上采样得到feature map2尺寸为1x64x128x128;
- 步骤4-将feature map2分别送入三个分支进行预测,预测heatmap尺寸为1x80x128x128(表示80个类别),预测长宽尺寸为1x2x128x128(2表示长和宽),预测中心点偏移量尺寸为1x2x128x128(2表示x, y) ;
- 步骤5-在128*128大小的Heatmap图上面采用一个3*3大小的最大池化操作来获取Heatmap中满足条件的关键点(类似于anchor-based检测中nms的效果),并选取100个关键点;
- 步骤6-最后根据confidence阈值来过滤出最终的检测结果。
5. CenterNet网络性能分析
5.1 不同主干网络的性能
参考链接:
https://blog.csdn.net/WZZ18191171661/article/details/113753991#commentBox
https://www.cnblogs.com/silence-cho/p/13955766.html
https://oldpan.me/archives/anchor-free-ture-centernet
以上是关于目标检测anchor-free框架:CenterNet :Objects as Points的主要内容,如果未能解决你的问题,请参考以下文章
目标检测anchor-free框架:CenterNet :Objects as Points
目标检测anchor-free框架:CenterNet :Objects as Points