RetinaNet论文理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wwwhp/article/details/83317738

paper:Focal Loss for Dense Object Detection
linkRetinaNet

引言

  • 目前精度最高的目标检测器都是基于R-CNN结构衍生出来的two-stage目标检测方法,相反one-stage的探测器应用于目标可能位置的密集采样中,具有更快更简单的特点但是精度落后two-stage的检测器;在本文的研究中发现造成这种情况的核心问题是密集检测器在训练过程中会遇到foreground和background类别极度不平衡的问题;
  • Focal loss是针对这种情况重新设计的CE loss来解决类别不平衡问题,降低分类良好例子的loss,focal loss将训练重点放在一组稀疏的例子上,防止在训练期间大量的easy negatives给检测器带来压制影响;
  • 为了评估focal loss的有效性,设计和训练出了RetinaNet,在使用focal loss对RetinaNet进行训练时可以匹配之前的one-stage的方法,同时在精度上超过了目前所有的two-stage检测器;

介绍

  • 目前精度高的检测器都是基于two-stage,proposal-driven机制,第一阶段生成稀疏的候选对象位置集,第二阶段使用CNN进一步将每个候选位置分为前景或者背景以及确定其类别;
  • 提出一个one-stage检测器可以匹配two-stage检测器在COCO上AP,例如FPN、Mask R-CNN,为了到达这一结果针对训练过程中类别不平衡这个阻碍问题,设计出一个新的loss,focal loss;
  • R-CNN类检测器可以通过two-stage级联和启发式采用来解决class imbalance问题,proposal stage包括:Selective Search、EdgeBoxes、DeepMask、RPN,可以迅速候选区域数目降低过滤大量background样本;在第二个分类stage启发式采样,可以采取的策略有:固定前景和背景的比例1:3或者采用OHEM在线困难样本挖掘,可以用来维持前景和背景样本可操作性平衡;
  • one stage检测器需要处理更大的候选位置集,虽然也应用了同样的启发式采样,但是效率低下因为在训练过程中很容易受到简单背景样本的支配;这种低效率问题是目标检测的典型问题,对此典型的解决方法是bootstrapping、HEM;
  • focal loss是一个能够动态缩放的cross entropy loss,当正确类别的置信度提高时缩放因子衰减为0,缩放因子可以自动降低easy例子在训练期间贡献loss的权重,使得模型注重hard例子;
  • 为了验证focal loss的有效性设计了一种one-stage的目标检测器RetinaNet,它的设计利用了高效的网络特征金字塔以及采用了anchor boxes,表现最好的RetinaNet结构是以ResNet-101-FPN为bakcbone,在COCO测试集能达到39.1的AP,速度为5fps;

创新点

  • Focal Loss:blanced corss entropy通过设置 α \alpha 来解决平衡问题 C E ( p t ) = α t l o g ( p t ) CE\left ( p_{t} \right )=-\alpha _{t}log\left ( p_{t} \right ) ,但是 α \alpha 只能平衡positive/negtive样本的重要性,不能区分easy/hard样本,因此提出重构CE loss为了降低easy样本的权重把更多注意力放到hard negtive训练上,focal loss的标准公式为 F L ( p t ) = ( 1 p t ) γ l o g ( p t ) FL\left ( p_{t} \right )=-\left ( 1-p_{t} \right )^{\gamma }log\left ( p_{t} \right ) ,文中实验还加上了 α \alpha 平衡参数 F L ( p t ) = α t ( 1 p t ) γ l o g ( p t ) FL\left ( p_{t} \right )=-\alpha _{t}\left ( 1-p_{t} \right )^{\gamma }log\left ( p_{t} \right ) ;参考其他论文读者对focal loss的理解,它所带来的效果是:

    loss的量级 数量大的类别:backgroud 数量少的类别:foregroud
    正确分类loss值 大幅度下降 稍微下降
    错误分类loss值 稍微下降 基本不变

    在one-stage的网络中,假设正负样本的比例达到1:10000,就会出现两个问题,一是样本不平衡,二是负样本主导loss,虽然负样本的loss小,但是由于大量的负样本是easy example,大量负样本是准确率很高的第0类,但是数量很多加起来loss甚至大于正样本的loss;在one-stage的网络中loss由负样本主导,但是负样本大多数准确率很高,经过focal loss后变成了正负样本共同主导,也可以理解为概率低的主导,思想同ohem相似然loss大的样本主导训练;但是两者的区别在于,ohem选出loss较大的样本,忽略loss较小的easy的负样本,虽然easy负样本loss小但是数量多,加起来loss较大,对loss有一定贡献,focal loss是希望把loss较小的样本也融入loss计算中,有助于训练但是又不希望easy 负样本主导loss,这时候就用到了衰减因子对它们的loss贡献进行调整,最后通过balanced cross entropy平衡类别

  • RetinaNet:为了验证focal loss的效果,设计了一个简单的one-stage detector来进行检测,网络结构名为RetinaNet:

  • RetinaNet本质上是由resnet+FPN+两个FCN子网络组成,设计思路是backbone选择vgg、resnet等有效的特征提取网络,主要尝试了resnet50、resnet101,FPN是针对resnet里面形成的多尺度特征进行强化利用获得表达力更强包含多尺度目标区域信息的feature map,最后在FPN的feature map集合上分别使用两个结构相同但是不share参数的FCN子网络,从而完成目标框类别分类和bbox位置回归任务;
  • Anchor信息:anchor的面积从 3 2 2 32^2 51 2 2 512^2 在特征金字塔p3到p7等级上,在每一个level上都有三种不同的长宽比例{1:2,1:1,2:1},针对denser scale coverage,在每一个level的anchor集合上加入{ 2 0 2^0 , 2 1 / 3 2^{1/3} , 2 2 / 3 2^{2/3} }三种不同的size;每一个anchor分配一个长度为K的vector作为分类信息,以及一个长度为4的bbox回归信息;
  • 模型的训练和部署:使用训练好的模型针对每个FPN level上目标存在概率最高的前1000bbox进行下一步的decoding处理,然后将所有level的bbox汇总,使用0.5threshold的nms过滤bbox最后得到目标最终的bbox位置;训练的loss由bbox位置信息L1 loss和类别信息的focal loss组成,在模型初始化的时候考虑到正负样本极度不平衡的情况对最后一个conv的bias参数做了有偏初始化;

RetinaNet代码分析

TODO

猜你喜欢

转载自blog.csdn.net/wwwhp/article/details/83317738
今日推荐