天天看点

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

CornerNet: Detecting Objects as Paired Keypoints 学习笔记

  • Overview
  • CornerNet
    • Detecting Corner
    • Focal Loss
    • Embedding
    • Offset
    • Corner Pooling
    • Hourglass Network
    • Detail
  • Experiment

Overview

CornerNet算是物体检测中anchor free方法的开山之作,促使CornerNet诞生的原因是基于anchor的方法还有一些缺点未能解决:

  1. 需要大量的anchor box,然而只有一小部分的anchor box与ground truth 存在较大的重叠,这就会造成类别不平衡问题,而且不利于训练;
  2. 使用anchor 引入了大量人为的超参数及设计方法(数量、大小、比例等)。

    CornerNet利用单个卷积网络将框的左上角及右下角两个点组成一对关键点,用一个卷积网络预测所有同一类别的样本的左上角点的heatmap,及右下角点的heatmap,及一个检测到角点的embeding vector。embeding用于组合属于同一个目标的一对角点,网络预测其相似的embedings。所以不需要设计大量的anchor boxes,这样就简化了模型的输出,同时移除了anchor的设计步骤。同时提出了corner pooling的新概念用于提升角点定位效果。

思路图如下:

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

Fig. 1 We detect an object as a pair of bounding box corners grouped together. A convolutional network outputs a heatmap for all top-left corners, a heatmap for all bottom-right corners, and an embedding vector for each detected corner. The network is trained to predict similar embeddings for corners that belong to the same object.

CornerNet

one-stage方法,通过检测一对keypoints时间检测框特点:

1)一个卷积神经网路预测top-left corner,一个预测bottom-right corner,称为heatmap。

2)embedding,负责检测哪个top-left corner和哪个bottom-right corner是一对,组成一个box,同一个box的corner距离短。

3)offset:为了获得tighter bounding box,调整corner位置。

4)corner pooling:更好的定位corner(一个corner定位不能只依靠局部信息),检测top-left,有两组feature map,相同像素点,pooling值一个是该像素水平向右的最大值,一个是垂直向下的最大值,之后两组feature map求和。

5)hourglass结构+Focal loss 更好训练

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

主要流程:

将检测框的左上及右下的点作为一组角点。一个单一结构的卷积网络用于预测两组不同目标类别的heatmaps,一组heatmaps用于预测左上角的点,另一组用于预测右下角的点,同时预测一个embeddings向量,比如来自同一目标类别的两个角点之间的距离很小。为了得到更加紧密的边框,网络同时预测一个偏差用于调整角点的位置。有了两个角点的heatmaps,embedding vectors,及Offset,后面通过使用一个后处理的方法来获得最终的边框。如上图,使用hourglass 网络作为backbone,其后接着两个预测模块,一个用于预测左上角的点,另一个用于预测右下角的点。每个模块都有自己的corner pool层,在进行预测heatmaps,embeding vector,offset之前pool hourglass 网络的feature maps.本文并使用不同的尺寸检测目标物,只借助模型的两个输出角点进行目标检测。

Detecting Corner

预测两组heatmaps,每组heatmaps的尺寸为HxWxC。C代表目标物的类别。没有背景这个类别,每个通道的feature map为二值型的mask,代表是否为该类别。对于每个角点,存在一个ground truth positive location,其余的位置为negative.本文降低了对正样本附近圆周位置的负样本的惩罚,因为一对距离对应ground truth很近的负样本角点也可以产生一个较好的边界框,包围目标物。如下图所示。

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

优势:

1)更易实现:corner定位需要两个边,box中心的确定需要四个边。

2)表示box空间更efficient:O(wh)顶点表示 O(w2h2)anchor box

Focal Loss

Pcij代表第(i, j)类别为c的概率,ycij代表对应的经过unnormalized高斯分布增强过的ground truth标签(0, 1),定义了新的Focal Loss:

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

α, β为超参数,用来控制每个角点的分布,实验中α全部设为2, β全部设为4。

Embedding

对角点的预测都是独立的,不涉及一个目标的一对角点的概念,因此如何找到一个目标的两个角点就是embedding做的工作,简单来说通过不同角点的embedding vector之间的距离找到每个目标的一对角点,如果一个左上角角点和一个右下角角点属于同一个目标,那么二者的embedding vector之间的距离应该很小。

这部分是受associative embedding的启发,embedding这部分的训练是通过两个损失函数实现的,etk表示属于k类目标的左上角角点的embedding vector,ebk表示属于k类目标的右下角角点的embedding vector,ek表示etk和ebk的均值。公式(4)用来缩小属于同一个目标(k类目标)的两个角点的embedding vector(etk和ebk)距离。公式(5)用来扩大不属于同一个目标的两个角点的embedding vector距离。

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

Offset

目标检测算法中预测的offset是表示预测框和anchor之间的偏置,而这里的offset是表示在取整计算时丢失的精度信息,如上式(2),其中(xk,yk)表示第k个角点的原图坐标值,n代表下采样因子,ok表示特征图缩放回原图后与原gt框的精度损失。

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

然后通过smooth L1损失函数监督学习该参数,和常见的目标检测算法中的回归支路类似。

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

Corner Pooling

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

CornerNet是预测左上角和右下角两个角点,但是这两个角点在不同目标上没有相同规律可循,如果采用普通池化操作,那么在训练预测角点支路时会比较困难。作者认为左上角角点的右边有目标顶端的特征信息(第一张图的头顶),左上角角点的下边有目标左侧的特征信息(第一张图的手),因此如果左上角角点经过池化操作后能有这两个信息,那么就有利于该点的预测。

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

文章中的具体举例比较易懂:

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

Hourglass Network

本文创新点启发于姿态估计,左上角点和右下角点的配对也类似于姿态估计关键点的组合。CornerNet的backbone取用于stacked hourglass model中的hourglass network,SHM的主要贡献在于利用多尺度特征来识别姿态,这里不再赘述,我们着重于hourglass network结构。

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

网络的前半段用来提取特征,随着层数的加深,feature map的语义越来越多。

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

后半段做上采样,于前半段基本对称,相当于pooling层的反操作,feature map的大小也一一对应。每扩大一次feature map的大小,就将前半段对应大小的feature map add进来,直至返回为原图大小。整个过程类似于U-Net。

Detail

  1. Loss Funtion

    Ldet为角点损失,Lpull、Lpush为embedding损失,Loff为offset损失

    其中α为0.1,β为0.1,γ为1,损失函数优化方式为Adam

    CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment
    CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment
  2. 上图是预测模块的详细结构,该结构包括corner pooling模块和预测输出模块两部分,corner pooling模块采用了类似residual block的形式,有一个skip connection,虚线框部分执行的就是corner pooling操作。
  3. 1、在得到预测角点后,会对这些角点做NMS操作,选择前100个左上角角点和100个右下角角点。

    2、计算左上角和右下角角点的embedding vector的距离时采用L1范数,距离大于0.5或者两个点来自不同类别的目标的都不能构成一对,检测分数是两个角点的平均分数。

    3、测试图像采用0值填充方式得到指定大小作为网络的输入,而不是采用resize,另外同时测试图像的水平翻转图并融合二者的结果。

    4、最后通过soft-nms操作去除冗余框,只保留前100个预测框。

Experiment

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment
  1. Table1是关于是否添加corner pooling的消融实验,可以看出第二行(添加)提升效果明显,尤其在大目标上;
  2. Table2是关于不同位置负样本采取不同权重的损失函数的效果,第一行为无惩罚减少机制,第二行为固定半径,第三行为采用目标计算得到的半径值,效果提升明显,尤其是在中、大目标上;
  3. Table3是关于corner pooling分别对左上角点预测和右下角点预测的影响。
    CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment
    CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment
  4. Table4是关于主干网络选择的消融实验,该实验分别以fpn为主干网络+corner检测方式,hourglass-104为主干网络+anchor检测方式,hourglass-104为主干网络+corner检测方式,最后说明本文组合方式效果最佳。
CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment

5. Table5将cornernet分别与RetinaNet、Cascade R-CNN、IoU-Net在高iou阈值下进行ap对比,证明“好的检测期的边界框与gt更贴近”

CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment
  1. Table6错误分析。第一行是这篇文章的算法结果;第二行是将角点预测结果用ground truth代替,可以看到提升非常大;第三行是进一步将偏置用ground truth代替,相比之下提升会小很多。这说明目前该算法的瓶颈主要在于角点预测。
CornerNet: Detecting Objects as Paired Keypoints 学习笔记OverviewCornerNetExperiment
  1. 上表Table7是connerNet和其他优秀目标检测算法的效果对比。

参考:

Stacked Hourglass Networks - 堆叠沙漏网络结构详解

论文阅读笔记五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)

简书 CornerNet

CornerNet 算法笔记

继续阅读