CornerNet: Detecting Objects as

2019-04-26  本文已影响0人  yanghedada

这是一篇很久之前就看过的论文,当时没有仔细看,现在又翻出来看了。

CornerNet

CornerNet就像名称那样,网络就是预测物体的top-letf和bottom-right两个点。网络采用Hourglass Network 漏斗结构。

image.png

模型采用热力图进行预测方式,无anchor设置。Hourglass Network网络之后有两个分支,一个是top-left,另一个是bottom-right。每个分支之后会有三个输出Heatmaps,Embeddings,Offsets。
Heatmaps就是网络检测的角点的坐标位置。Embeddings是top-left和bottom-right关系的一个矩阵,当top-left一个位置的点和bottom-right上某个位置点距离较小那就是同一个物体的一对角点了。由于网络经过下采样预测位置和实际位置会有一定的偏移,offset就是偏移修正值。

CornerNet设置

在训练期间,不是减少所有的负样本的数量,而是减少对正位置半径内的负位置给予的惩罚。 这是因为如果一对假角点检测器靠近它们各自的ground-truth位置,它仍然可以产生一个与ground-truth充分重叠的边界框。我们通过确保半径内的一对点生成的边界框与ground-truth的IoU ≥ t(我们在所有实验中将t设置为0.7)来确定物体的大小,从而确定半径。 给定半r径,惩罚的减少量由非标准化的2D高斯

确定。

  1. 通过设计局部损失,N是一张图中物体的数量,α=2 and β=4 用来控制每个点的贡献。


  2. 通过设置图中位置(x,y)到热图的映射[x/n,y/n]偏差Ok


  1. 角点分组策略

图像中可能出现多个目标,因此可能检测到多个左上角和右下角。我们需要确定左上角和右下角的一对角点是否来自同一个目标边界框。我们的方法受到Newell等人提出的用于多人姿态估计任务的关联嵌入方法的启发[27]。Newell等人检测所有人类关节,并为每个检测到的关节生成嵌入。他们根据嵌入之间的距离将节点进行分组。
关联嵌入的思想也适用于我们的任务。 网络预测每个检测到的角点的嵌入向量,使得如果左上角和右下角属于同一个边界框,则它们的嵌入之间的距离应该小。 然后,我们可以根据左上角和右下角嵌入之间的距离对角点进行分组。 嵌入的实际值并不重要。 仅使用嵌入之间的距离来对角点进行分组。etk是对象k的左上的嵌入,ebk是对象k右下嵌入,ek是均值。使用‘pull’使同目标的嵌入相近,使用‘push’是不同目标嵌入产生特定距离∆=1。

  1. 联合多任务损失进行训练

Corner Pooling

使用如下公式进行关于top-left的corner pooling。因为需要进行top-left和bottom-right的max pooling。确定一个像素是否是左上角点时,需要在水平方向上往右看,在竖直方向上往下看。在确定是否时右下角点时,则需要在水平方向上往左看,在竖直方向上往上看。


对于top-left和bottom-right通过分别往下扫描和往右扫描,然后分别取最大值,最后相加。


测试

首先通过在角点热图上使用3×3最大池化层来应用非极大值抑制(NMS)。然后从热图中选择前100个左上角和前100个右下角。 角点位置由相应的偏移调整。 我们计算左上角和右下角嵌入之间的L1距离。距离大于0.5或包含不同类别的角点对将被剔除。 左上角和右下角的平均得分用作检测分数。

模型由于所有的one-stage模型,可以和two-stage媲美。

参考

深度学习【60】物体检测:CornerNet
CornerNet 算法笔记

上一篇 下一篇

猜你喜欢

热点阅读