background
任务:利用单一的卷积神经网络对目标检测任务中的目标的左上和右下进行预测
关键词:Object Detection,CornerNet
Introduction
对于传统的目标检测任务,以faster rcnn为例,基于targets,产生大量的建议区域,虽然经过nms,iou大小比较等方法极大的减少了建议区域,但建议区域的数目依然巨大,而且区域中的积极区域的数目要远小于消极区域的数目,这种不平衡很影响神经网络的训练,而且faster rcnn虽然比一般的一级检测网络的精度要高,但算力开销巨大,而且时间消耗很多,而且对于超参数的确定,很大程度上影响faster rcnn的检测精度,对于不同尺度的任务的迁移性较差。
CornerNet是一级检测网络,所以时间开销较小,而且CornetNet摆脱了targets的应用,避免了因积极区域远小于消极区域的极大的不平衡带来的误差,并且box的确定是自己学习而来的,迁移性更好。
CornerNet主要是从人体关键点检测中受到启发,将目标的左上和右下当作关键点,通过对热图的预测确定关键点的位置,然后通过embedding,确定左上和右下对应的组,通过offset进行微调,确定最后的输出。
Model
整体结构
其中的Hourglass Network是关键点检测的主要模块,作者的主要思路就是对左上右下的两个点当作关键点进行预测,然后确定最后的边框。
Hourglass输出的两个部分分别是左上,右下的点位的feature maps
Corner Pooling
Cornet Pooling的主要想法是,因为左上,右下的点主要是通过目标的边界轮廓来进行确定的,而传统的池化方式主要是对局部进行运算,很难看到目标的边界轮廓,所以Cornet Pooling就是通过对一个点的横向寻找,池化来进行:
heatmaps
heatmaps和目标关键点检测的方法相似,输出的feature maps的大小是WHC,其中C是目标种类的个数,这里没有背景样本。
如上图,以左上点为例,橙色圈的圆心是左上的坐标,而半径,是通过周围的点与右下的点的半径内对应的点组成的边框与ground-truth的iou的值大于t(实验中为0.7),确定的半径。
y值:对于圈内的点的数值是成二维高斯分布形成:
y
=
e
−
x
2
+
y
2
2
σ
2
y=e^{-\frac{x^2+y^2}{2\sigma^2}}
y=e−2σ2x2+y2
x,y是与左上点的距离,
σ
\sigma
σ是半径的三分之一
因为虽然是假点,但产生的边框与ground-truth的iou较大,十分接近真实的边框,所以惩罚值应该小一些。
对热图的损失函数:
offset
对于image中的坐标,x,y,映射到feature maps上可能不是整数,所以在进行取整时,会产生一定的误差
n是下取样的倍数,后面是下取整
o
k
o_k
ok是偏移的变量
所以最后对偏移量进行预测,然后通过预测的偏移量来对预测边框进行微调。
作者用L1来做损失函数:
embedding
对于左上,和右下点的预测,我们希望生成一个编码向量,对于同一个目标的左上,右下对应的编码向量的距离要尽量小,而不同目标的左上,右下的编码向量的均值要距离尽量大,从而达到对不同的点的分组的问题的解决。
e
t
k
e_{tk}
etk是左上的编码向量,
e
b
k
e_{bk}
ebk是右下的编码向量,
e
k
e_{k}
ek是左上,右下的编码向量的均值,
Δ
\Delta
Δ是1。
最终的损失函数:
Expriment
![QQ截图20210601204538.png](https://img-blog.csdnimg.cn/img_convert/a5a2c2fd97298c71438078e80f9c934d.png#clientId=u31a58ab2-edbb-4&from=ui&id=u68ca22c5&margin=[object Object]&name=QQ截图20210601204538.png&originHeight=450&originWidth=1345&originalType=binary&size=100558&status=done&style=none&taskId=u6ff0b745-4e0f-428f-ae78-8ad2e551b57)
对于一级检测网络产生了不错的效果
Learn from paper
通过编码向量来区分不同组的左上,右下点,十分的厉害
迁移目标关键点检测的方法,来预测左上,右下点,而且减少了不少计算,十分的创新,迁移的很厉害