CornerNet-(目标检测->关键点检测)
流程:
- ConvNet生成两组heat maps来预测不同分类下的corners,其中一组负责预测左上角,另一组负责预测右下角。backbone使用hourglass network。每组heatmap有C个channel,其中C是category数量,heatmap的size为 。每个channel就是一个binary mask,表示location是否是这个分类下的corner。
- ConvNet为每个corner预测embedding vector,用于判断某左上角和右下角是否同属一个目标,
- 为了使得通过预测左上角和右下角corner得到的bbox更加紧贴目标,ConvNet还预测了corner的location偏差offset
损失函数
L_off 为关于取整计算时缺失的梯度。
anchor free:
corner在离散化bbox空间更加高效,比如 (h,w)
的feature map,corner总共有 种可能性,而anchor box则有 种可能性,所以可以说使用了 的corners 来表征 的anchor boxes。
corner:
gt corner location为中心的某个圆内,应该降低对negative location的惩罚比较合理,随着negative location远离圆中心,逐渐增大惩罚。记 为gt heatmap的值,当 位置处是gt corner且对应分类为 时, 表示positive,其余情况 表示negative,在gt corner对应分类 下对一定几何范围内的negative location 降低惩罚。在离gt较近的区域内的negative corner的IOU值大于0.7 我们也认为是有必要保留的,所以作出这样的惩罚。
其中 表示negative location 与 gt corner location(圆中心)的坐标相对值, 是圆的半径, ,这个值控制惩罚降低的变化速度,值越大,随着negative location远离圆中心, 值下降的越慢
损失函数为: N为一个image中object的数量 为预测heatmap上的预测值(预测位置 处是分类为 的corner的概率)
坐标的修复:
pooling layer:
作者认为,要确定一个location是不是top-left corner,需要从这个location水平向右看,才能知道是不是目标的top most边界,同理,从这个location垂直向下看,才能知道是不是目标的left most边界。这就是corner pooling层。所有location的vector就组成heatmap。corner poolingdie叠加了tl右边的最大特征值和最下边的最大特征值,根据右边和下面的特征来确定corner tl。
embedding:寻找属于同一目标的左上 右下的location
etk和ebk分别是第k个目标左上和右下corner对应位置的embedding vector,ek是这两个向量的均值向量。在pull的时候,需要使同一个目标corner对应的两个embedding vector的距离尽量小,这里就以两个embedding vector分别到其均值向量也就是ek的距离之和表征两个embedding vector的距离;在push的时候,需要不同目标的corner对应的embedding vector尽量远,在这里就以每两个目标的均值向量ek之间的距离均值表征不同目标的距离。其实这么做就是为了保证类内离散度小的同时,类间差大。
hourglass:
hourglass模块结合了local 特征和 global 特征生成新的特征,重复这个过程,从而捕获更加higher-level的信息
使用了两个hourglass模块级联,并做了一些修改,包括:1. 下采样使用stride=2的conv代替max-pooling。2. 在hourglass内部,feature分辨率和channel的变化(见下面的具体讨论部分)。