论文:CornerNet: Detecting Objects as Paired Keypoints(CVPR 2018)速达>>
代码:princeton-vl/CornerNet
动机
Anchor缺点:
- 大部分和目标框几乎没有重叠,导致正负样本失衡
- 引入的参数较多(Box数量、尺寸、纵横比)
将关键点检测的方法加以改造,用于目标检测任务
Corner Detection
关键点位置通常带有语义信息,如下图 关键点7 就是在汽车右边后轮上,关键点7 在前面右车灯处
而目标框顶点不同于普通的关键点,顶点处语义信息不明,一般都在目标区域外边,如下图:
让目标框顶点与目标建立桥梁,如上图最左边的人:头顶上画一条横线,左手边上画一条竖线,两线相交即为左顶点。Corner Pooling相当于在划线,这样目标的语义信息就与定点位置联系起来了(注意:这里只是建立联系,不是最终预测)
具体示例:计算四个左顶点得分,
最终的预测模块如下所示:
如何评估预测的定点位置,当然是与标签框定点的距离,目标框顶点处位置处值
y
c
i
j
=
1
y_{cij}=1
ycij=1,在一定范围内预测位置偏离越远
y
c
i
j
y_{cij}
ycij 越小(文中假设服从Gaussian分布,范围划定为一个圆圈,半径根据圆圈内顶点组成的框与目标框IOU是否大于0.7设定),超出范围直接打 0 分就可以了
位置损失采用修改版的 Focal Loss:
其中,
N
N
N 表示图片中目标数量,
α
\alpha
α 和
β
\beta
β 为超参数
将 Heatmap 重新映射会输入图像时,会有精度损失,所以预测模块还有一个 Offset map,预测偏移量:
采用 Smooth
L
1
L_1
L1 Loss:
Grouping Corners
怎么确定预测的左顶点和右顶点是一个目标的?
- 预测模块还会预测一个 Embeddings map,每个像素点(位置和预测的顶点相对应)就是一个Embedding Vector,同一个目标的两个顶点对应的 Embedding Vector 的距离应该较小,根据距离即可判断是否为同一个目标上的顶点了
Embedding 损失由两部分组成:
- L p u l l \mathcal L_{pull} Lpull:同一个目标的关系要拉近(pull)
- L p u s h \mathcal L_{push} Lpush:不是同一个目标的远离(push)
其中,
e
t
k
e_{t_k}
etk 表示目标
k
k
k 对应的预测左顶点,
e
b
k
e_{b_k}
ebk 表示目标
k
k
k 对应的预测右顶点,
e
k
e_k
ek 表示
e
t
k
e_{t_k}
etk 和
e
b
k
e_{b_k}
ebk 的平均,
Δ
\Delta
Δ 设为1
Hourglass Network
相关实验
参考文献
【1】CornerNet
【2】CornerNet算法解读
【3】CornerNet 算法笔记
【4】Stacked Hourglass Networks for Human Pose Estimation(论文)
【5】DenseBox