论文RetinaNet :Focal Loss for Dense object Detection阅读笔记

论文RetinaNet <>阅读笔记

1.摘要
迄今为止最高精度的对象检测器基于由R-CNN推广的 two-stage 方法,其中分类器应用于稀疏的候选对象位置集。相比之下,在可能的物体位置的规则,密集采样上应用的 one-stage 探测器具有更快和更简单的可能性,但迄今为止已经落后于 two-stage 探测器的精度。在本文中,我们调查为什么会这样。我们发现在密集探测器训练过程中遇到的极端前景 - 背景类不平衡是其中心原因。我们提出通过重塑标准交叉熵损失来解决这种类不平衡问题,从而降低分配给分类良好的例子的损失。我们的小说“焦点损失”将训练重点放在一组稀疏的例子上,并防止大量的轻易否定因素在训练期间压倒探测器。为了评估我们损失的有效性,我们设计并训练了一个简单的密集检测器,我们称之为RetinaNet。我们的研究结果表明,当使用焦点损失进行训练时,RetinaNet能够匹配先前 one-stage 探测器的速度,同时超越所有现有技术的 two-stage 探测器的精度。
2.主要创新点
1)new cls loss:Focal 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平衡类别
2)new network:RetinaNet
为了验证focal loss的效果,设计了一个简单的one-stage detector来进行检测,网络结构名为RetinaNet
3.论文工作
在论文中作者去探讨了造成one stage精度低的原因,发现在训练密集目标检测器的过程中出现了严重的foreground-background类别不平衡。
首先,什么是“类别不平衡”呢?
检测算法在早期会生成很多bbox,而在一幅正常的图像中需要检测的object不会很多,这就意味着多数的bbox是属于background,使得foreground-background类别不平衡。
存在类别平衡问题为什么会导致检测精度低呢?
因为bbox数量很多,而属于background的bbox太多了,假设分类器将所有的bbox全部归为background,那么精度也会很高,而这样的分类器是一个失败的分类器,所以导致目标检测的精度很低。
那么,为什么two stage机制的目标检测器可以达到很高的精度呢?
因为two stage的第一个阶段生成一个候选目标位置组成的稀疏样本集,即RPN简单的对anchor进行二分类(只是区分是foreground和background,并不会区别细类),这样,属于background类别的bbox会大量减少,虽然其数量依然远大于foreground的bbox(例如3:1),但已不像最初生成anchor差别那么大了,这一阶段最终结果是从“类别极不平衡”到“类别较不平衡”转变,也就是说two stage并不能完全解决类别不平衡问题,第二个阶段使用一个卷积神经网络将各候选位置归置foreground类别或者background类别,即在初步筛选后的bbox上进行难度小得多的分类(细分类),这样分类器便得到了较好的训练,从而精度提高了。但因为是经过了两个阶段的处理,操作复杂,使得检测速度变慢了。
为什么one stage系列无法避免这个问题呢?
因为one stage系列的检测器直接在“类别极不平衡”的bbox中进行难度极大的细分类,直接输出bbox和标签,而原有的交叉熵损失(CE)作为分类任务的损失函数,无法抗衡“类别极不平衡”(会在另一篇文章中详细讲解交叉熵损失),容易导致分类器训练失败。因此,one stage检测虽然速度快,但检测精度低。
既然one stage中的交叉熵损失函数无法抗衡“类别极不平衡”,所以retinanet作者何恺明及其团队提出Focal Loss替换交叉熵损失来提高检测精度。
该篇文章指出,“类别不平衡”是one-stage detector在精度上逊于two-stage detector的病结所在。
那么,只要通过将原先训练 分类任务 惯用的 交叉熵误差 改为 FL (focal loss) 即可。
论文RetinaNet :Focal Loss for Dense object Detection阅读笔记_第1张图片
为了验证focal loss的效果,设计了一个简单的one-stage detector来进行检测,网络结构名为RetinaNet
论文RetinaNet :Focal Loss for Dense object Detection阅读笔记_第2张图片

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

你可能感兴趣的:(论文RetinaNet :Focal Loss for Dense object Detection阅读笔记)