CornerNet详解

论文动机

1、anchor-box 好用,但是有两个缺点:
1)、数量太多,造成负样本太多,样本不均衡,导致训练效率低。
2)、anchor-box引入太多超级参数,数量,大小,长宽比等增加算法设计难度。

所以想通过一组关键点,用左上角和右下角的点来代替bbox。

网络结构

CornerNet详解_第1张图片

CornerNet详解_第2张图片

Heatmaps预测哪些点最有可能是Corners点,Embeddings用于表征属于相同对象的corner的相似度。它们的通道数都为C,C是object的类别数 (不包括background) 。最后的Offsets用于对corner的位置进行修正。

CornerNet详解_第3张图片

主干网络 —— Hourglass Network

hourglass 结构:
在这里插入图片描述
Hourglass先由卷积和池化将feature maps下采样到一个很小的尺度,之后再用nearest neighbor upsampling的方法进行上采样,将feature maps还原到最开始的尺度。不难看出,下采样和上采样是对称的,并且在每个upsampling层都有一个skip connection,skip connection上是一个residual modules。

使用这种沙漏结构的目的是为了反复获取不同尺度下图片所包含的信息。例如一些局部信息,包括脸部和手部信息。沙漏结构可以获取局部信息和全局信息。

  1. 、Hourglass在下采样时不再进行max-pooling,而是在卷积时通过stride=2进行下采样。
    2)、 在每个skip connection,有两个residual modules。
    3)、图片进入Hourglass前,进行了2次下采样。

CornerNet 主干网络由多个hourglass组成。
在这里插入图片描述

网络预测

CornerNet详解_第4张图片
上面两条支路经过33的卷积后,进行corner pooling,相加汇集成1路,随后再进行3x3的卷积和batch normalization;最下面的支路进行11的卷积和batch normalization 后,与上路相加后送入到Relu函数中。随后,再对feature maps进行33的卷积,接着分三路33的卷积+Relu后产生了Heatmaps, Embeddings, Offsets三组feature maps。

Corner-pooling

CornerNet详解_第5张图片
corner-pooling 希望把最大响应的点移动到角点上。

corner pooling的动机其实为了更好地适应corner的检测。在目标检测的任务中,object的corner往往在object之外,所以corner的检测不能根据局部的特征,而是应该对该点所在行的所有特征与列的所有特征进行扫描

有一点值得注意的是,池化时不能直接对整行或整列进行max pooling,当一张图上有多个目标时,这样会导致误检。

loss 计算

cornerNet 输出3条分支,每条分支对应一个loss。

1、headmap, 角点预测位置。

在这里插入图片描述
pcij 表示第c 个通道的(i,j)位置的值。ycij 表示对应的ground truth。N表示目标数量。ycij 等于其他目标值说说明(i,j)不是类别c的目标角点。 但是这里ycij不是0,而是用基于ground truth角点的高斯分布计算得到因此距离ground truth比较近的(i,j)点的ycij值接近1,这部分通过β参数控制权重,这是和focal loss的差别。

为什么要对不同负样本点的损失函数采取不同权重值?

这是因为headmap 带有一定的位置回归色彩,有些角点虽然没有落在ycij=1的位置上,但由角点生成的框基本正确地预测了位置,因此是有用的预测框。如此要么设为ignore ,要么为给定一定权重的正样本。我认为设为给定权重的正样本,可以使得样本更加均衡。
ycij 成高斯分布,使得在正样本和负样本之间形成一个过度区域。

ycij 计算方式:

以真实的角点为中心为1,往边上辐射值逐渐变小。但是怎么变化呢?也就是在这里高斯分布怎么变化呢?圆圈内的点的数值是以圆心往外呈二维的高斯分布exp(-(x2+y2)/2σ^2),σ=1/3设置的这里x,y为以真实坐标为原点新建坐标系。

2、offset

在这里插入图片描述
在这里插入图片描述

3、embedding,一对一关联。,如何找到一个目标的两个角点。

基于不同角点的embedding vector之间的距离找到每个目标的一对角点,如果一个左上角角点和一个右下角角点属于同一个目标,那么二者的embedding vector之间的距离应该很小

CornerNet详解_第6张图片
最终,总的损失为 :

在这里插入图片描述
作者在实验中设置各loss权重参数分别为0.1,0.1,1.

你可能感兴趣的:(Deep,Learning,深度学习,pytorch,神经网络)