CenterNet是第一个基于Anchor Free的目标检测模型。解决了基于Anchor Based的检测模型的一直存在的正负样本不均衡问题。
✨1 基本介绍
测试时流程:
- 输入一张图像。
- 进入backbone网络,这是一个encoder-decoder结构,然后通过级联角池和中心池分别输出两个角热图和一个中心关键点热图。
- 利用一对检测到的角和相似的嵌入来检测潜在的边界框。
- 利用检测到的中心关键点来确定最终的边界框。
训练时在第2步后计算损失即可。
从整个过程来看,我们接下来需要重点总结几个问题:
- backbone网络是什么样子的
- 训练集的两个角热图和中心关键点热图如何生成
- 损失如何计算
- 如何利用角和相似的嵌入检测潜在的边界框
- 如何利用中心关键点来确定最终的边界框
✨2 backbone及级联角池和中心池
🎃2.1 backbone
CenterNet可以完成目标检测,肢体识别和3D目标检测三种任务。
因此,papper提供了三种backbone,分别是Resnet-18, DLA-34和Hourglass-104。
三种backbone的速度和准确率:
backbone | 速度/COCOAP | 准确率/FPS |
Resnet-18 | 28.1% | 142 |
DLA-34 | 37.4% | 52 |
Hourglass-104 | 45.1% | 1.4 |
目标检测任务是以Resnet作为backbone中的encorde,反卷积模块Deconv作为decorder,可根据实际情况进行更换。
2.2 反卷积模块Deconv
2.3 级联角池
2.4 中心池
🌭2.5 算法流程
- 1. 图像预处理:图像长边缩放到512,短边补0,将该512x512x3的图像输入
- 2. 特征提取:图片经过resnet50提取特征得到feature1,尺寸为1x2048x16x16,对应encoder结构。之后,feature1经过反卷积模块Deconv,三次上采样得到feature2尺寸为1x64x128x128,对应decorder结构。
- 3.预测:将feature2分别送入三个分支进行预测。预测heatmap,尺寸为1x80x128x128(表示80个类别)。预测长宽尺寸为1x2x128x128(2表示长和宽)。预测中心点偏移量,尺寸为1x2x128x128(2表示x, y)。
✨3 heatmap的生成
🎈3.1 heatmap(1x80x128x128)
1x80x128x128
,其中1
代表每个类别取1个特征图,80
代表种类数,128x128
代表每个图像最终生成128x128像素的特征图。
若某个坐标处有物体目标的中心点,则在该坐标处产生一个用高斯圆表示的keypoint,如下图所示:
以上图为例,img其实生成了80个特征图。而上图的heatmap展示了类别为猫的特征图,因为img中有两只猫,所以在同一张heatmap上有两个keypoints。若还有一只狗,则类别为狗的特征图上也存在一个keypoints。
上面介绍了类别热图是什么,接下来总结如何利用训练集的真实label生成类别热度图
- 将目标的bbox缩放到128x128的尺度上,然后求box的中心点坐标并取整,设为point
- 根据目标bbox大小计算高斯圆的半径,设为R
- 在heatmap图上,以point为圆心,半径为R填充高斯函数计算值(point点处为最大值,沿着半径向外按高斯函数递减)。
🌭3.2 高斯函数填充
首先我们要明白为什么选择高斯填充,这里与一位博主总结的openpose中热度图的解释很类似。
假设:
我们有一个13x13的热度图。如果位置(0.0)
是中心点,则其中第一个值是1,其余为0。
但是预测输出的是第二个值是1,其余是0。其实这很像一个非对即错的问题,完全正确不受损失,否则计算的损失一样。但是,这就有些绝对了,因为其实映射到真实图像中这个点非常接近,甚至看不出来,这明显不太合理。因此,采用高斯填充,point点处为最大值,沿着半径向外按高斯函数递减。
🍕3.3 高斯圆半径的选择
实际情况中会取真实GT与预测框之间IOU=0.7,即下图中的overlap=0.7作为临界值,然后分别计算出三种情况的半径,取最小值作为高斯核的半径r
注意,这里我们虽然是按照预测框和真实GT计算的r,但是最终我们用到的还是预测的关键点周围
假设:
第一图关键点是s,那么可以用左上角做内切得到的半径r在S周围画一个圈,里面用高斯函数填充
✨4 损失函数
我们一共预测了三个热度图,损失函数也对应着分成三部分:
- heatmap的loss
- 目标长宽预测loss
- 目标中心点偏移值loss。
其中heatmap的采用改进的focal loss。长宽预测的和目标中心点偏移都采用L1 Loss,而且加上了0.1的权重。
🍕4.1 heatmap的loss
该loss function基于focal loss。其中α和β是超参数,用来均衡难易样本和正负样本。
N是图像的关键点数量(正样本个数),用于将所有的positive focal loss标准化为1。
求和符号的下标xyc表示所有heatmap上的所有坐标点(c表示目标类别,每个类别一张heatmap)。
==为预测值
为真实值。
与focal loss不同的是负样本的loss里面多了平衡参数, 目的是抑制0<<1的负样本的损失(heatmap高斯中心点附近那些点)。
🍔4.2 中心点偏移值损失
只对正样本的偏移值损失进行计算
表示预测的偏移值。
p为图片中目标中心点坐标
R为缩放尺度
为缩放后中心坐标的整数近似。
例如:
p=(125, 125)
,R=(32)
,P/R=(3.906, 3.906)
,=(3, 3)
,=(0.906, 0.906)
代表GT的着中心偏移值。
🎆4.3 长宽预测损失
为预测尺寸.
为真实尺寸。
5 ✨重叠物体难检测问题
在训练过程中,同一类别中的如果某些物体靠的比较近,那么其Ground Truth中心点在下采样时容易挤到一块,导致两个物体GT中心点重叠,使得网络将这两个物体当成一个物体来训练(因为只有一个中心点了)。而在模型预测阶段,如果两个同类物体在下采样后的中心点也重叠了,那么网络也只能检测出一个中心点。这个问题在网络FCOS中得到了解决。