【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰

【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰目标检测领域普遍one-stage算法准确率不如以Faster RCNN为代表的two-stage算法。RetinaNet认为主要原因是样本不均衡,提出了focal loss来解决这个问题。

【目标检测(一)】RCNN详解——深度学习目标检测的开山之作
【目标检测(二)】SPP Net——让卷积计算共享
【目标检测(三)】Fast RCNN——让RCNN模型能端到端训练
【目标检测(四)】Faster RCNN——RPN网络替代selective search
【目标检测(五)】YOLOv1——开启one-stage目标检测的篇章
【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger
【目标检测(七)】YOLOv3——准确率的全面提升
【目标检测(八)】一文吃透目标检测回归框损失函数——IoU、GIoU、DIoU、CIoU原理及Python代码
【目标检测(九)】FPN详解——通过特征金字塔网络进行多尺度特征融合
【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰
【目标检测(十一)】CenterNet——Anchor Free, NMS Free
【目标检测(十二)】FCOS——用实例分割的思想做Anchor Free的目标检测

1. Motivation

在RetinaNet之前,目标检测领域普遍以YOLO系列、SSD算法为首的one-stage算法准确率不如以Faster RCNN为代表的two-stage算法。这其中有两类原因:

  • two-stage算法是先用RPN网络生成一系列Region Proposal的,然后再使用Fast RCNN在Region Proposal的基础上再进行微调,自然结果更为精细。
  • 样本不均衡:正负样本比极度失衡,Faster RCNN明确了训练时正负样本比1:3,而one-stage算法是极度不均衡的(1:1000都是有可能的);梯度被简单样本所主导,复杂样本只占到很小一部分,在Loss计算过程中会被多数的简单样本所主导。

而RetinaNet的出现,在一定程度上改善了这个问题,让one-stage的方法具备了更好的准确率,本文章主要介绍RetinaNet的原理。

RetinaNet原论文:Focal Loss for Dense Object Detection

2. RetinaNet原理

2.1 RetinaNet网络结构和Anchor

image.png

RetinaNet是one-stage算法,直接省略掉了第二阶段,将RPN网络直接完成了整套的目标检测任务。它的的网络结构,其实就是FPN网络提取多尺度的特征,然后在多尺度特征的基础上连接检测头,对目标的分类和位置回归进行预测,如上图所示。论文中这张图还是没有特别清晰的说明网络结构,如果觉得不够清楚,可以继续看下面这张图。

【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰

RetinaNet设计改造了FPN,考虑到P2的特征图尺寸是非常大的,非常消耗空间和计算量,FPN中的P2被删掉了,同时在P5的基础上往上再延伸两层,进行两次下采样得到P6和P7层。P3到P7对应了不同的尺度特征,P3更适合小目标的检测,而P7更适合大目标的检测,作者根据尺度特点设计了相应的anchor机制,每个尺度上的每个特征图点对应3个不同大小和3个不同比例的anchor,共9个,如下表所示:

Scale Ratio
32 {
2 0 2^0
,
2 1 / 3 2^{1/3}
,
2 2 / 3 2^{2/3}
}
{1:2, 1:1, 2:1}
64 {
2 0 2^0
,
2 1 / 3 2^{1/3}
,
2 2 / 3 2^{2/3}
}
{1:2, 1:1, 2:1}
128 {
2 0 2^0
,
2 1 / 3 2^{1/3}
,
2 2 / 3 2^{2/3}
}
{1:2, 1:1, 2:1}
256 {
2 0 2^0
,
2 1 / 3 2^{1/3}
,
2 2 / 3 2^{2/3}
}
{1:2, 1:1, 2:1}
512 {
2 0 2^0
,
2 1 / 3 2^{1/3}
,
2 2 / 3 2^{2/3}
}
{1:2, 1:1, 2:1}

之后每个尺度特征后都会接一个检测头子网络,包括class subnet和box subnet,负责分类和框预测,这里五个特征图后的检测头子网络都是权值共享的。具体的class subnet和box subnet结构如下图所示:

image.png

class subnet子网络最后输出维度为KA,其中K为要分类的类别数量(不包括背景),A为anchor的数量9。box subnet输出维度为4A,其中4表示中心点坐标和长宽,A为anchor数量9。这样就得到了最终的类别和框位置预测值。

2.2 正负样本划分

  • IOU>=0.5, 正样本
  • IOU<0.4, 负样本
  • IOU∈[0.4, 0.5), 舍弃

2.3 Focal Loss

前面提到的,单阶段算法精度不如两阶段算法的样本不均衡原因——正负样本不均衡和难易样本不均衡,就是在Focal Loss部分进行解决的。首先我们看传统的交叉熵Loss函数:


C E ( p , y ) = [ y l o g ( p ) + ( 1 y ) l o g ( 1 p ) ] CE(p,y)=−[ylog(p)+(1−y)log(1−p)]

可以改写成这种形式:

【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰

我们定义
p t p_t

【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰

那么就有


C E ( p , y ) = C E ( p t ) = l o g ( p t ) CE(p,y)=CE(p_t)=−log(p_t)。

2.3.1 平衡交叉熵

前面既然提到正负样本的不均衡,我们就引入一个正例因子
α [ 0 , 1 ] α∈[0, 1]
,负例因子为
1 α 1-α
,作为权重放在loss上,来平衡正负样本的数量差异:

【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰

将这个公式展开:

【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰

论文中说到,实践中可以考虑将其设置为样本比例的反数,但是作者最终实验得到最好的α是0.25。

2.3.2 引入困难样本权重

为了解决难易样本严重不均衡,导致loss被容易的样本所主导的问题,论文做出了改进,引入权重
( 1 p t ) γ (1-p_t)^γ
,其中γ为超参数,这个参数能够降低易分样本的损失贡献,最终focal loss的定义如下:

【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰

展开之后如下形式:

【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰

作者实验得到最好的超参数是
α = 0.25 , γ = 2 α=0.25, γ=2
,我们理解一下这个困难样本权重是如何起作用的:

image.png

  • 当真实样本标签为1时,而预测概率为0.9时,预测的也比较好,Cross Entropy产生的损失比Focal Loss产生的损失大了400倍,说明Focal Loss降低了易分样本的损失贡献。
  • 当真实样本为1时,而预测概率为0.1,预测的不太好,Cross Entropy产生的损失只比Focal Loss产生的损失大5倍,这里提高了难分样本的损失贡献。

3. RetinaNet的效果和优劣势分析

3.1 RetinaNet的效果

image.png

可以看到,RetinaNet的精度还是获得了非常大的提升,这就是focal loss + FPN带来的效果。

3.2 优劣势分析

优点:

  • 准确率提升了非常多。
  • 引入了focal loss,降低了样本不均衡带来的影响。
  • 在分辨率降低时,RetinaNet具备非常优越的推理性能。

缺点:

  • RetinaNet引入的focal loss易受噪声干扰,对图像标注的准确性要求非常高,一旦有标错的样本,就会被focal loss当做困难样本,干扰样本对loss贡献很大,从而影响学习效果。

Reference:

  1. arxiv.org/pdf/1708.02…
  2. zhangxu.blog.csdn.net/article/det…

今天的文章【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20828.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注