一 核心思想
本篇文章提出非常新颖的检测方法,不同于以往的anchor-based的方法,CornerNet是基于一对关键点进行物体的检测的(文中讲的为2D检测方法,因此检测的为左上角和右下角两个点。)。除此之外,本文还提出corner pooling层,以便更好提取特征。具体算法步骤如下图所示:
二 核心步骤
如上图所示,本文的创新点是提出使用一对关键点(也就是相对应的top-left heatmap和bottom-right heatmap)来检测出bounding box,而不是采用anchor-based的方法,为了将两个heatmap图进行相同bounding box的配对,给每个heatmap输出相应的embedding vector,只有分别位于embedding vector上的点的距离相同,才是对应的一对key point,这对点也就是对应一个object。
当然,本文的创新点还有corner pooling,不同的heatmap对应不同的corner pooling。
2.1 Detecting Corners
1、Heatmaps
本部分对应的结构如上图所示,每一个heatmap的维度为,其中C表示预测的类别的个数,heatmap预测的是label scores。
不过需要注意的是,在训练过程中,作者不同于之前惩罚negative position,而是在positive position的半径内减少对negative position的惩罚。这是因为对于一对false corners detection,如果它们接近各自的ground truth位置,仍然可以产生一个足以重叠ground truth的框(如下图所示)。
给定半径(这个半径的求法比较通用,也就不在此展开。)之后,使用Gaussian kernel来给出半径内的得分情况(Gaussian kernel为,其中心为positive location为给定的半径。)。
对于heatmap的loss function,定义为:
上述公式也就表示在location为(i,j)的第c个类别上,表示预测出的分数,表示该位置上的类别标签,N为一幅图像上的所有object的数量。也就是本文的改进之处,减少在半径内的negative的损失。
2、Embeddings
图像中可能出现多个目标,因此可能检测到多个左上角和右下角。我们需要确定左上角和右下角是否有一对来自同一个边界框。于是又增加一个网络分支预测每个corner point的嵌入向量,如果左上角和右下角属于同一个边界框,则对应的embeddings上的位置的值趋于相等(原文中说这个值为距离,也就变成了距离相等。维度为)。
然后,我们可以根据左上角和右下角嵌入之间的距离对这些corner point进行分组。Embeddings上的值并不重要。不同Embeddings上的值只是被用来分类corner point。
对于Embeddings的loss function,作者分为pull呵push两个部分,pull对应的是相同组的点的距离要更近,push对应的是不同组的点的距离要更远。
其中,表示top-left corner of object k,表示bottom-right corner of object k;。在反向传播时,只计算ground truth corner location上的损失(也就是)。
3、Offsets
由于下采样的缘故,图像中的位置(x,y)被映射到heatmap中的位置,其中n是下采样因子。这种映射肯定会有损失,因此作者给出的一个分支专门预测offset。对于positive position处,标签为,反向传播时,loss function依然只计算positive position处。Loss function 为:
2.2 Corner Pooling
整个部分也就是上述图中的部分,具体结构见下图,也就是虚线框框起来的部分。
每一个heatmap有着不同的corner pooling层。
对于top-left corner pooling Module,首先有两个输入feature map,其宽高分别为W和H。如下图所示,如果对红色点(坐标为(i,j))做corner pooling的话,第一个feature map计算(i,j)到(i,H)的最大值;第二个feature map计算(i,j)到(i,W)的最大值,然后将二者相加得到这个红色点的初步特征。最后根据上述图进行特征的计算得到top-left corner pooling Module的特征。
对于bottom-right corner pooling Module,与上述相似,计算(0,j)到(i,j)的最大值和(i,0)到(i,j)的最大值,然后将二者相加得到这个红色点的初步特征。最后根据上述图进行特征的计算得到bottom-right corner pooling Module的特征。
下图是上述top-left corner pooling Module的一个例子。
2.3 Hourglass Networks
这个地方暂时没有进行研究。
三 总结
在测试过程中,首先会利用3×3的max pooling层进行NMS操作,选择前100个top-left corner和100个bottom-right corner;计算top-left corner和bottom-right corner的embedding vector时使用L1 distances;对于一对corner点,如果距离大于0.5或者属于不同类别的目标,则不能构成一对;使用0填充图像而不是resize;最后使用soft-nms保存前100个预测结果。
本文创新性使用corner来代替anchor-based的检测方法,提高效率并且效果更佳。
参考文献
[1] Law H , Deng J . CornerNet: Detecting Objects as Paired Keypoints[J]. International Journal of Computer Vision, 2020, 128(3):642-656.