CornerNet论文笔记

粗读概念

1. 论文提出了什么?


  • 论文提出了一种不需要anchor boxesanchor\ boxes的目标检测的方法
  • 提出了一种新的cornerpoolingcorner-pooling操作
  • 属于anchorfreeanchor-free的方法

2. 论文为什么提出这种方法?解决了什么问题


  • 此前的onestage detecorone-stage\ detecor需要在图像上生成许多anchorboxesanchor boxes, 但是只有少量的boxbox能够在
    覆盖到有目标的地, 过多的negative boxnegative\ box导致样本不平衡,从而训练缓慢

  • 需要anchorboxesanchor boxes 的方法通常需要设置许多超参数, 例如boxbox数量, 长宽比, 大小等, 这些通常需要一些经验来支持更好的结果

3. 方法描述


CornerNet论文笔记

CornerNet论文笔记

通过卷积网络生成一组topleft cornertop-left\ corner和一组bottomright cornerbottom-right\ corner以及它们对应的embedding vectorembedding\ vector, 这个vectorvector的作用是匹配属于一个objectobject的左上右下的角点

4. corner pooling


  • 作者提出corner poolingcorner\ pooling是因为实际中, object boxobject\ box的角点通常是在objectobject的外面的, 所以没有本地的依据来进行调整, 如下图所示, 作者提出一种新的cornet poolingcornet\ pooling 来解决这个问题

  • 具体是对角点的水平和垂直两个方向,分别在feature mapfeature\ map上取各个channelchannel上的最大值, 然后再加起来

  • 但是文中提到的两个feature mapfeature\ map是指的什么呢??
    topleft cornertop-left\ corner为例, 是hourglass networkhourglass\ network生成feature mapfeature\ map分别做水平和垂直poolingpooling生成 tijt_{ij}lijl_{ij} 的, 本质上是一个featuremapfeature map

    CornerNet论文笔记

精读部分

3 CornerNet


3.1 overview

CornerNetCornerNet通过Human Pose EstimationHuman\ Pose\ Estimation领域中Hourglass NetworkHourglass\ Network作为backbonebackbone提取初级特征, 然后将初级特征输入到Topleft CornersTop-left\ CornersBottomright CornersBottom-right\ Corners两个预测模块中, 经过corner poolingcorner\ pooling及后续的nnnn得到Heatmaps, Embeddings, OffsetsHeatmaps,\ Embeddings,\ Offsets三个输出, 其中HeatmapsHeatmapsC×H×WC×H×Wbinary maskbinary\ mask, 有C个channelschannels分别对应C个classesclasses, H×WH×W分别对应图上的点是否有CornersCorners, EmbeddingsEmbeddings用来对预测的两种cornerscornersgroupinggrouping,也就是配对, OffsetsOffsets用来微调预测角点的值, 改善网络对小目标的预测结果

3.2 Detecting Corners


这个部分主要讲了两个内容:

  1. NegativePositionNegative Position的定义: 以gt positiongt\ position为中心, radiusradius为半径的圆外的点, 其中radius的大小有gtbboxgt bbox的大小确定,原则如下图所示,大意是radiusradius中点组成的boxboxgtboxgt boxIOUIOU最小为tt, 文中的括号里0:30:3没看懂,感觉是笔误,应该是0.30.3吧(这个不太确定). 对于negativepositionnegative positionpenaltypenalty, 作者使用2DGaussians=e(x2+y2)/2×σ22D Gaussians=e^{-(x^2+y^2)/2\times\sigma^2}生成一个gt heatmapgt\ heatmapycijy_{cij}, 以gt positiongt\ position为中心,方差为radius/3radius/3, 从公式可以看到对于生成的heatmapheatmap某个点若对应ycij=1y_{cij}=1(即对应gt positiongt\ position),按照上式求lossloss, 对于其他negative positionnegative\ position,越接近gt positiongt\ position, 那么(1ycij)(1-y_{cij})则越小, 也就是惩罚越小,来计算lossloss.


    CornerNet论文笔记

    CornerNet论文笔记

  2. OffsetsOffsets: 许多网络下采样后将预测的左边remap回原始图像时通常会损失一些精确度, 所以作者在CornerNetCornerNet中设置offsetsoffsets来微调预测的坐标使结果更准确.其中(2)(2)式为计算偏差公式, 那么οk\omicron_{k}ο^k\hat\omicron_{k}分别对应gt offsetgt\ offsetpredict offsetpredict\ offset, 最后通过SmoothL1LossSmoothL1Loss来学习. SmoothL1LossSmoothL1LossFast RCNNFast\ RCNN中提出的,相比L1L1收敛更快,相比L2L2对于离群点、异常值更加鲁棒,训练不容易跑飞

    CornerNet论文笔记

CornerNet论文笔记

3.3 Grouping Corners


这个部分讲如何将预测的cornerscorners进行配对,文中写的方法是based on the distance between the embeddings of corners ,但是具体距离的计算公式什么,文中没有给出,也许可以在作者提到的NewellNewell的论文中有提到, 此外作者引用NewellNewell论文中pullpushpull-push的方法训练使成对的cornercorner接近,不成对的进行远离.

CornerNet论文笔记

3.4 Corner Pooling


大概原理如下图所示, 文中说的vectorvector应该指的是1×channel1\times channel, 也就是从spatialspatial的每个点看向channelchannel方向, 下图是一个channelchanneltopleft corner poolingtop-left\ corner\ pooling情形,分别从右往左与从下往上max poolingmax\ pooling
CornerNet论文笔记

4 Experiments


实验中作者验证了论文几个key componentskey\ components的结果,总结如下:

  1. 不同poolingpooling方式的对比显示cornerpoolingcorner poolingAPAP上提高2%

  2. negative penaltynegative\ penaltyradiusradius的三种方式对比, 不要radiusradius效果最差, fixed radiusfixed\ radius提高接近3%, objectdependent radiusobject-dependent\ radius提高5.5%(这个是文中使用的方法)

  3. backbonenetworkbackbone network的对比中Hourglass+cornersHourglass+cornersFPN+cornersFPN+corners提到6%多, 性能差别还是挺大的.