【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结

文章目录

  • 前言
  • Abstract
  • 1.Introduction
  • 2.Related Work
  • 3.Focal Loss
    • 3.1 Balanced Cross Entropy
    • 3.2 Focal Loss Definition
    • 3.3 Class Imbalance and Model Initialization
    • 3.4 Class Imbalance and Two-stage Detectors
  • 4.RetinaNet Detector
    • 4.1 Inference and Training
  • 5.Experiments
    • 5.1 Training Dense Detection
    • 5.2 Model Architecture Design
    • 5.3 Comparison to State of the Art
  • 6.Conclusion
  • Appendix :Focal Loss^*^
  • 笔者总结
    • Focal Loss
    • RetinaNet


前言

论文地址:RetinaNet https://arxiv.org/abs/1708.02002

源码地址:见6节。(Python+Caffee2)

Abstract

有最高准确率的目标检测器是基于R-CNN的二阶段检测方式。二阶段检测的分类器从稀疏的目标候选区域提取目标位置。相反,一阶段的检测器是从大量可能的目标区域中提取目标位置,因此有潜力去提升速度和简化模型。但是,一阶段的目标检测器的准确率却远不如二阶段。在本文中,我们研究了为什么会这样。我们发现了在一阶段目标检测器(多bbox)训练时,前景和背景类别的极端不平衡是主要原因。我们提出了解决这种不平衡的办法:把标准的交叉熵损失替换成对于分类良好样本的轻量级损失——Focal Loss。新型的Focal Loss关注困难样本的稀疏集合(少bbox)的训练。并且在训练时防止大量的负样本损害检测器的性能。为了评估Focal Loss的效率,我们设计和训练了一个简单的稠密检测器,命名为RetinaNet。我们的结果展示了当用Focal Loss训练时,RetinaNet可以达到之前一阶段检测器速度的同时,准确率也超过了当时所有已存在的二阶段检测器。

总结:
1.解决了一阶段检测器的通病:减少了大量没有用的bbox(框成背景的bbox)
2.解决方法:将标注交叉熵损失变成Focal Loss(优化检测模型的方法)
3.又有一阶段检测器的速度,又有二阶段检测器的准确率

1.Introduction

现在顶级的目标检测器是二阶段的目标驱使的机制(先定位再分类)。正如主流的R-CNN框架,第一阶段生成少量的候选目标区域,第二阶段对每个候选区域(前景或者背景)使用卷积神经网络分类。通过前人一些列的研究,二阶段框架在COCO数据集上实现了顶级的准确率。

尽管二阶段检测器取得了成功,一个自然而然的问题就出现了:简单的一阶段检测器可以达到二阶段检测器的准确率吗?一阶段检测器对目标定位,目标规模和宽高比的取样是有规律且稠密的。近期关于一阶段检测器的工作,如YOLO,SSD等表明了有前景的结果——产生了更快的检测器随着准确率在10%-40%与顶级的二阶段检测方法相关。

这篇文章打破了这种桎梏(一阶段检测器不准):我们提出的一阶段检测器第一次达到了二阶段检测器(FPN,Mask R-CNN以及各种Faster R-CNN的变体)在COCO数据集上的AP。(PS:反正作者里都有你你说啥是啥=。=)为了得到这个结果,我们在训练的时候把类的不平衡作为一阶段检测器达到顶级准确率的主要障碍并提出了一个新的损失函数以此来消除障碍。

类不平衡问题在类R-CNN的一系列二阶段检测器的结构和探索中得到解决。Selective Search,EdgeBoxes,DeepMask,RPN等快速地把候选框的数量
降低到1-2K,过滤掉了大多数的背景样本。(PS:候选框中没有目标为背景样本,即负样本)。在第二个分类阶段,抽样检索,例如不变前景背景率(1:3),或在线难样本挖掘都很好的维持了前景和背景的平衡。

相反,一阶段的检测器必须有规律地抽样处理图片上的庞大的候选框集合。事实上,这通常要处理100K的候选框,这些候选框稠密地包含空间位置,大小规模和宽高比。虽然类似的抽样检索可能有用,但在训练程序依然被简单的分类背景样例占据主导地位时,那也是无效的。这种无效性是目标检测的传统问题,它可以被多种技术解决,例如bootsrapping(统计学技术),或者难例挖掘。

在这篇文章中,我们提出了一个高效的损失函数,它可以替代之前的方法去处理类不平衡。这种损失函数是按比例的交叉熵损失,比例因子减少到0作为正确类别增加的置信度。见图1。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第1张图片
直观地,缩放因子在训练中可以自动降低简单样本对权重的贡献并快速地使模型关注困难样本。实验表明我们提出的Focal Loss可以让我们训练出一个高准确率的一阶段检测器。它可以超过抽样启发搜索或者难样本挖掘等先前的训练一阶段检测器的供选方案。最后,我们注意到focal loss的精确形式不是决定性的并且还有其他的方法可以得到相似的结果。

为了证明focal loss的有效性,我们设计了一个简单的一阶段目标检测器叫做RetinaNet,因需要在输入图片中目标候选定位稠密抽样而得名。它的的特点是在一个有效的网络内使用特征金字塔和先验框。它来源于最近的想法[22,6,28,20](22是SSD,28是Faster RCNN,20是FPN)。RetinaNet是高效且准确的;最好的模型是基于ResNet-101-FPN主干,COCO上AP达到了39.1,5fps,超过了以前的已发布的一阶段和二阶段模型的最好结果。见图2。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第2张图片

2.Related Work

传统的目标检测器: 典型的例子是滑动窗口,它是一个应用在稠密图片网格的分类器,有很悠久的历史。最早期的成功之一是用CNN分类实现手写数字识别。Viola和Jones使用boosted目标检测器用于人脸检测,使得这样的模型得到广泛的应用。HOG的引入和整合通道特征使得行人检测得到了有效的方法。DPMs帮助扩展稠密检测器获得更普遍的目标种类并且很多年在PASCAL数据集上都有最好的结果。虽然滑动窗口是传统CV检测的典型范例,但随着深度学习的复苏,二阶段的目标检测器紧接着快速地占据了目标检测的主导地位。

二阶段的目标检测器: 现代目标检测的主要范例是基于二阶段检测策略的。正如在选择性探索工作中开拓的那样,第一阶段生成稀疏候选框集合,候选框包含所有的目标同时过滤掉多数负样本(包含背景不包含目标的候选框),并且第二阶段将目标分为前景类或者背景类。R-CNN改善了第二阶段分类器获得了高的准确率,把目标检测模型带入了新纪元。R-CNN连年被改善,无论是速度方面还是可学习目标生成策略。RPN把带有二阶段分类器的proposal generation(候选框生成)整合到一个单一的卷积网络中,构成了Faster R-CNN框架。已经有很多类似的框架被提出。

一阶段目标检测器: OverFeat是基于深度网络的首批一阶段目标检测器之一。SSD和YOLO振兴了一阶段方法。这些目标检测器已经有很好的速度但是准确率比不上二阶段方法。SSD只有10-20%的AP,同时YOLO关注于更极端的速度/准确率平衡。见图2。最近的工作表明二阶段的目标检测器可以简化得更快通过降低输入图片的分辨率和proposals的数量,但是一阶段方法准确率受限而且有很大的计算开销。相反,本工作的目的就是去理解是否一阶段检测器可以达到或超过二阶段检测器的准确率同时有相似或者更快的速度。

RetinaNet的设计与先前的稠密检测器有很多相似之处,尤其是在RPN中介绍的anchors的概念,并且使用了SSD和FPN中使用的特征金字塔。我们强调简单的检测器达到了顶尖结果不是因为网络设计的创新,而是因为损失函数的创新。

类别不平衡: 传统的一阶段目标检测方法如boosted detectors和DPMs,还有最近的方法如SSD,在训练时都会面临很大的类别不平衡。这检测器每张图评估104-105个候选框,但是只有一些候选框包含目标。这种不平衡造成两个问题:(1)训练效率低因为大多数候选框都是简单的负样本对学习信号没有用。(2)负样本会压垮训练并且导致模型衰退。普遍的解决办法是困难负样本挖掘,在训练或者更多复杂抽样/重置权重计划期间抽取困难样本。与此不同,我们提出的focal loss自然地掌控一阶段检测器面临的类别不平衡问题,并且可以在所有样本上有效训练,没有抽样、负样本压倒损失和计算梯度。

鲁棒性评估: 鲁棒性损失函数有很多有趣的设计。它通过降低困难样本的权重来减少异常值的贡献。与此不同,并不是解决异常值,而是focal loss通过减少简单样本的权重解决类别不平衡,以至于它们对总损失的贡献很少,即使它们的数量很多。换句话说,focal loss可以扮演一个鲁棒损失的对立角色:它使训练关注在困难样本的稀疏集合上。

3.Focal Loss

Focal Loss设计用来解决一阶段目标检测在训练时前景和背景(1:1000)类别极端不平衡的方案。我们从二分类的交叉熵损失开始介绍focal loss。
C E ( p , y ) = { − l o g ( p ) i f   y = 1 − l o g ( 1 − p ) o t h e r w i s e .   ( 1 ) CE(p,y) = \begin{cases} -log(p) & if \ y = 1\\-log(1-p) & otherwise .\end{cases} \ (1) CE(p,y)={log(p)log(1p)if y=1otherwise. (1)
上述 y ∈ ± 1 y\in{\pm1} y±1代表正负类别, p ∈ [ 0 , 1 ] p\in{[0,1]} p[0,1]是模型估计类别标签y=1的可能性。为了标记方便,我们定义 p t p_t pt
p t = { p i f   y = 1 1 − p o t h e r w i s e ,   ( 2 ) p_t = \begin{cases} p & if \ y=1 \\ 1-p & otherwise,\end{cases} \ (2) pt={p1pif y=1otherwise, (2)
并重写 C E ( p , y ) = C E ( p t ) = − l o g ( p t ) . CE(p,y)=CE(p_t)=-log(p_t). CE(p,y)=CE(pt)=log(pt).

【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第3张图片

图1.我们提出一个新颖的损失叫做Focal Loss.添加一个因子(1- p t p_t pt)γ给标准交叉熵损失。γ > 0 降低好的分类样本相关损失( p t > 0.5 p_t > 0.5 pt>0.5),更加关注困难和误分类样本。正如我们实验将证明的那样,focal loss可以在大量简单前景样本中训练高准确率的稠密目标检测器。

交叉熵损失可以被看作图1中的蓝色曲线。这种损失的一个显著性质可以在曲线中明显的看到,易分类的样本( p t ≫ p_t \gg pt 0.5)会导致损失增大很多。当对大量的易分类样本求和时,这些小的损失值可以压倒稀少类别。

3.1 Balanced Cross Entropy

解决类别不平衡问题的常见方法是添加一个权重因子 α ∈ [ 0 , 1 ] \alpha\in{[0,1]} α[0,1]给类别1和 1 − α 1-\alpha 1α给类别class-1.事实上, α \alpha α可能通过倒转类别频率设置或通过交叉验证被看作一个超参数。为了表述方便,我们定义 α t \alpha_t αt类似定义 p t p_t pt那样。我们把 α \alpha α平衡的交叉熵损失记作: C E ( p t ) = − α t l o g ( p t ) .   ( 3 ) CE(p_t)=-\alpha_t log(p_t). \ (3) CE(pt)=αtlog(pt). (3)该损失是对交叉熵损失的简单拓展,并作为focal loss的实验baseline。

3.2 Focal Loss Definition

正如我们的实验将要展示的那样,在稠密检测器训练的时候大量出现的类别不平衡会压倒交叉熵损失。简单的分类负样本占据损失的主导并支配梯度。虽然 α \alpha α平衡了正负样本,但它没有区分简单/困难样本。相反,我们重新提出了损失函数取降低正样本的权重并因此使训练聚焦到困难负样本上。

更正式地,我们给交叉熵损失加入一个调节因子 ( 1 − p t ) γ (1-p_t)^\gamma (1pt)γ γ ≥ 0 \gamma \geq0 γ0是可变聚焦参数。我们定义focal loss为: F L ( p t ) = − ( 1 − p t ) γ l o g ( p t ) .   ( 4 ) FL(p_t) = -(1-p_t)^\gamma log(p_t). \ (4) FL(pt)=(1pt)γlog(pt). (4)在图1中focal loss的 γ ∈ [ 0 , 5 ] \gamma\in{[0,5]} γ[0,5]的几个值直观可见。我们得到了focal loss的两个性质。
(1)当一个样本被误分类并 p t p_t pt很小时,调节因子近乎为1并且损失没有改变。当 p t p_t pt 趋于1时,调节因子趋于0并且分类较好的样本权重较低。
(2)简单样本权重较低时,聚焦参数 γ \gamma γ平滑地调整比率。当 γ = 0 \gamma=0 γ=0时,FL等于CE,当 γ \gamma γ增长时,调节因子的影响也在增长。( γ = 2 \gamma=2 γ=2实验效果最好 )

直观地,调节因子降低了简单样本的损失贡献并扩大了简单样本接受低损失的范围。例如, γ = 2 \gamma=2 γ=2,与CE相比, p t = 0.9 p_t=0.9 pt=0.9的简单样本有100倍更低的损失, p t ≈ 0.968 p_t ≈ 0.968 pt0.968 有1000倍更低的损失。这依次提升了正确误分类样本的重要性(这些损失被缩放4倍 p t ≤ 0.5 , γ = 2 p_t \leq0.5 ,\gamma=2 pt0.5,γ=2

实际上,我们使用focal loss的一个 α \alpha α平衡变体: F L ( p t ) = − α t ( 1 − p t ) γ l o g ( p t ) .   ( 5 ) FL(p_t) = -\alpha_t(1-p_t)^\gamma log(p_t). \ (5) FL(pt)=αt(1pt)γlog(pt). (5)我们在实验中采取这样的形式,它和不采用α平衡的形式相比稍微提升了准确率。最后,损失层结合sigmoid操作计算p,获得更好的数值稳定性。

虽然在主要的实验结果中我们都使用了上述focal loss定义,但是它的精确形式并不是重要的。在附录中,我们思考了其他的focal loss示例并证明了它们也有同样的效果。

3.3 Class Imbalance and Model Initialization

二分类模型默认初始化等可能的结果 y = − 1   o r   1. y=-1 \ or \ 1. y=1 or 1.在这样的初始条件下,类别不平衡的出现,频繁类别的损失可以在总损失中占据主导并在早期的训练中造成模型不稳定。为了对抗这种情况,我们介绍了’prior’的概念——在训练开始时通过稀少类别模型评估p值。我们通过 π \pi π表示prior并设置它以至于对于稀少类别样本,模型的评估p很低(0.01)。我们把这种改变记作模型初始化,而不是损失函数。我们发现在大量类别不平衡的情况下它能在交叉熵和focal loss上都提升训练的稳定性。

3.4 Class Imbalance and Two-stage Detectors

二阶段目标检测器通常用交叉熵损失训练而没有使用 α \alpha α平衡或者focal loss。相反,它们解决类别不平衡通过两种机制:(1)二阶段层级结构和(2)偏置小批量取样。第一个阶段是目标区域生成阶段,它可以把近乎无穷的可能目标位置降低到一两千。重要地,区域选择不是随机的,而是和真实的目标位置一致,可以移除大量的简单负样本。当训练第二阶段时,偏置抽样被用来构建小批量,例如包含1:3的正负样本。这个比率就像通过采样得到隐藏的 α \alpha α平衡因子。我们提出focal loss,直接通过损失函数来解决一阶段检测系统的这些机制。

4.RetinaNet Detector

RetinaNet是一个单一的统一的网络,它由一个主干网络和两个特定任务子网组成。主干网络用于计算整张输入图片的卷积特征图并且它是一个现成的卷积网络。第一个子网络对上一步主干的输出做卷积目标分类;第二个子网络用于预测框回归。我们提出的用于一阶段稠密检测的两个子网的简单设计见图3.
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第4张图片

  • (a) 底下是前馈网络ResNet;ResNet顶部的是FPN
  • (b) 为了获得丰富的多尺度的卷积特征金字塔
  • (c)分类子网,有先验框
  • (d) 回归,从先验框到实际框

简约的设计,使工作关注到新颖的focal loss从而缩小一阶段和二阶段检测算法准确率的差距。

虽然对这些组件的选择有很多种可能,正如实验中展示的那样,大多数的设计参数对精确值不是特别敏感。我们接下来描述RetinaNet的每一个组件。

特征金字塔网络主干: 我们采用FPN作为RetinaNet的主干网络。简言之,FPN增强了标准卷积网络,它有严密的组织路径和侧面连接。所以网络可以有效地从一个单一分辨率输入图片中构建一个丰富的多尺度特征金字塔,见图3(a)-(b).金字塔的每一层可以预测不同尺度的目标。FPN从全卷积网络FCN中提高了多尺度预测,正如RPN和DeepMask-style proposals中展示的那样,也像二阶段检测器,如Fast R-CNN或Mask R-CNN。
我们在ResNet结构上构建FPN。我们构建金字塔层级P3-P7,l代表金字塔层级( P l P_l Pl代表分辨率低于输入图片2l倍)。正如论文中所讲的,所有的特征金字塔层级都有256个通道。金字塔的具体细节与原论文中的略有不同(见下图)。虽然许多设计选择都不是必须的,我们强调FPN主干的使用,因为只使用ResNet层AP值较低。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第5张图片

先验框: 我们使用平移不变的先验框,类似于论文中的各种RPN变体。从金字塔P3-P7层级先验框面积由3232到512512。正如论文中阐述的那样,每个金字塔层级使用三种宽高比的先验框{1:2,1:1,2:1}。为了比论文中更加密集的尺寸覆盖,每一层增加三种先验框的大小{20,21/3,22/3}。这样会增加AP。每一层总共9种先验框,跨层覆盖32-813个像素。

每个先验框指定一个K维分类标签的独热向量,K目标类别的数量和一个四维向量做边框回归。我们使用RPN的分配规则但修改多类别检测并调整阈值。先验框和预测框使用IoU阈值为0.5;如果IoU在 [ 0 , 0.4 ) [0,0.4) [0,0.4)则视为背景。每个先验框最多关联一个预测框,K维标签向量中与预测框关联的设为1其他为0。如果先验框没有被关联,则训练时IoU在 [ 0.4 , 0.5 ) [0.4,0.5) [0.4,0.5)的忽略不计。边框回归通过每个先验框和预测框直接的偏移计算或者如果没有关联则直接忽略。

分类子网: 分类子网在每个空间位置上每个anchors和K个目标类别预测当前可能的目标类别。子网是一个连接每个FPN层的小型FCN;子网参数可以共享到金字塔的各个层。设计很简单。从金字塔层获取到输入的C通道特征图,子网用四个3×3卷积层,每层通道数是C,后面跟一个ReLU激活,然后跟一个通道数为KA的3×3卷积层。最后用sigmoid激活。见图3 © . 在大多数实验中使用 C = 256,A = 9。

与RPN相比,我么的目标分类子网是很深的,仅使用3×3卷积,边框回归子网不能共享参数。我们发现更高层的设计决定比超参数的特殊值更重要。

边框回归子网: 和分类子网平行,我们在每个金字塔层添加了另一个小的FCN,为了回归预测,计算每个先验框和真实框(如果存在)的偏移。边框回归子网的设计和分类子网相同,除了它以4A线性输出结束(分类子网是KA)。见图3(d)。对于每个空间位置上的每个先验框,这些4输出预测先验框和真实框的偏移(我们使用R-CNN中的标准边框参数化)。我们发现不像大多数近期的工作,我们使用一个参数更少的类不可知的预测框回归并且我们发现它有同样的效率。目标分类子网和边框回归子网,共享相同结构,使用不同参数。

4.1 Inference and Training

推断: RetinaNet由ResNet-FPN主干,一个分类子网和一个边框回归子网构成。推断包含一张图片通过网络简单的前向传播。为了提升速度,我们仅从每个FPN层中的1K个顶尖得分中,在置信度阈值设为0.05后,解码边框预测。所有层的top预测结果通过非极大抑制合并,阈值设为0.5,得出最终的预测结果。

Focal Loss: 我们在分类子网的输出用focal loss。实验发现 γ = 2 \gamma = 2 γ=2效果最好,RetinaNet的鲁棒区间 γ ∈ [ 0.5 , 5 ] \gamma \in [0.5,5] γ[0.5,5]。当训练RetinaNet时,在每张采样图片中focal loss使用100K个先验框。在每个微小批量中,这与使用RPN或OHEM去选择少量先验框不同。图片总的focal loss损失是100k个先验框的focal loss总和,通过关联真实框的先验框数量标准化。正则化是关联的先验框数量,而不是总数,因为先验框大多数是简单负样本,在focal loss下接受的是可忽略的损失值。关联稀少类别权重的 α \alpha α也有固定范围,但 α \alpha α γ \gamma γ有某种内在联系,所以必须一起选择它们的取值。通常,当 γ \gamma γ变大时, α \alpha α应该轻微下降。( γ = 2 , α = 0.25 \gamma = 2,\alpha =0.25 γ=2,α=0.25最好)。

初始化: 实验用ResNet-50-FPN和ResNet-101-FPN主干网络。它们都是在ImageNet1k上预训练好的模型。FPN层与原FPN论文中的相同。除了最后一个RetinaNet子网其他所有的卷积层偏置设为0,高斯填充 σ = 0.01 \sigma=0.01 σ=0.01。对于最后一个分类子网,设置偏置初始化为 b = − l o g ( ( 1 − π ) / π ) b=-log((1-\pi)/\pi) b=log((1π)/π) π \pi π是训练初期的前景标签置信度的估计值。 π \pi π设为0.01在整个实验中。这样初始化防止在第一个训练迭代初期,大量的背景先验框生成很大、很不稳定的损失值。

优化: 优化器使用随机梯度下降SGD。每个minibatch总共16张图片用8GPUS。如果没有其他特殊说明,所有模型用初始学习率0.01训练90K次。之后在第60k轮和80k轮缩小10倍。使用水平翻转作为唯一的数据增强。权重衰减0.0001,动量0.9。训练损失是focal loss和标准平滑L1损失用于边框回归。模型训练时间在10-35个小时。

5.Experiments

实验结果是在COCO基准数据集上基于预测框追踪所得到的。对于训练,我们使用常规的论文[1,20]中的方法并且使用COCO trainval135k(80k训练集,40k验证集中随机选35k个子图)。验证集中剩下的5K图片用于通过评估minival split来进行损伤和敏感度研究。对于我们主要的结果,我们在test-dev split上得到COCO AP,没有公开的标签和需求使用评估服务。

5.1 Training Dense Detection

我们用多种优化策略去分析稠密检测下损失函数的表现。所有的实验中我们使用50或101ResNets-FPN结构。对于所有的消融实验,我们训练和测试时都使用大小为600像素的图片。

网络初始化: 首先训练RetinaNet使用标准交叉熵损失,没有任何修改和其他学习策略。这很快就失败了,在训练时网络发散。然而,简单初始化模型的最后一层例如预测一个目标的先前可能是 π = 0.01 \pi=0.01 π=0.01可以有效地学习。用ResNet-50和这种初始化训练RetinaNet得到了30.2的AP在COCO数据集上。结果对于 π \pi π的精确值不敏感,所以在所有的实验中,我们令 π = 0.01 \pi=0.01 π=0.01

平衡交叉熵: 下一步是改进学习策略,包括3.1描述的使用 α \alpha α平衡的交叉熵损失。 α \alpha α的不同取值结果如Table 1a。 α = 0.75 \alpha=0.75 α=0.75时,AP提升了0.9个点。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第6张图片
**Focal Loss: ** 使用focal loss的结果见Table 1b。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第7张图片
focal loss引入一个新的超参数,聚焦参数 γ \gamma γ,调节作用。当 γ = 0 \gamma=0 γ=0时,focal loss等同于交叉熵损失。 γ \gamma γ增长时,损失变化以至于低损失的简单样本减少。FL表明 γ \gamma γ增长效果超过CE。当 γ = 2 \gamma=2 γ=2时,AP提升2.9个点。

经过对照,我们发现了对每个 γ \gamma γ最好的 α \alpha α。我们发现低 α \alpha α对应高 γ \gamma γ。改变 γ \gamma γ是非常有利的,最好的 α \alpha α的范围是 [ 0.25 , 0.75 ] [0.25,0.75] [0.25,0.75](测试了[0.01,0.999])。所有实验使用 γ = 2.0 , α = 0.25 \gamma=2.0,\alpha=0.25 γ=2.0,α=0.25但是 α = 0.5 \alpha=0.5 α=0.5效果也很好(AP低了0.4)。

Focal Loss分析: 为了更好的理解focal loss,我们分析了收敛模型的损失分布。我们采用默认的ResNet101,600像素, γ = 2 \gamma=2 γ=2,36.0AP模型训练。我们应用这个模型,并用大量的随机图片和采样预训练大约107负样本和大约105正样本。之后分离正样本和负样本,我们计算这些样本的FL并且归一化损失。根据归一化的损失从低到高排序画成累积分布函数(CDF)。

【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第8张图片
正负样本的CDF如上图。如果我们观察正样本,会发现CDF在不同的 γ \gamma γ值下基本相同。例如,大约20%的困难正样本数量是正样本损失的一半。当 γ \gamma γ增加时,20%的样本损失增长的更明显,但是影响却不是很大。

γ \gamma γ对负样本的影响却截然不同。 γ = 0 \gamma=0 γ=0,正负样的CDF很相似。然而,当 γ \gamma γ增长时,实质上更多的权重关注到困难负样本上。事实上, γ = 2 \gamma=2 γ=2,损失主要来自小部分样本。FL可以有效降低简单负样本的影响,从而关注到艰难负样本上。

在线困难样本挖掘: 通过使用高损失样本构建minbatches提升二阶段检测器的训练。特别地,在OHEM每个样本通过它的损失得分,NMS使一个minibatch用最高损失样本构建。NMS阈值和batchsize是可调参数。就像focal loss,OHEM更强调误分类样本,但是不像FL,OHEM完全忽略简单样本。我们也实现了SSD中的多种OHEM:在所有样本使用NMS后,minibatch构建正负样本1:3比率,从而使每个minibatch有足够的正样本。

我们也在有高类别不平衡的一阶段检测集合中测试了这两种OHEM。原始OHEM策略和1:3OHEM策略可选择的batchsize和NMS阈值Table 1d。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第9张图片
这些结果使用ResNet-101,我们的baseline用FL训练达到了36.0 AP。相反,OHEM最好的结果达到了32.8 AP(没有1:3比率,batchsize128,nms0.5)。与最好的FL相差3.2AP,可见FL在训练稠密检测器时比OHEM更有效。我也尝试了其他参数但都没有达到更好的效果。

Hinge Loss: 最后,在早期的实验中,我们用对 p t p_t pt用hinge loss训练,损失从0到 p t p_t pt。然而,不稳定,也没有获得有意义的结果。结果可探索的间隔损失函数见附件。

5.2 Model Architecture Design

Anchor密度: 一阶段目标检测系统最重要的设计因素之一是覆盖在图片中可能的预测框是否稠密。二阶段检测器可以使用区域池化操作以任何位置、规模和宽高比分类预测框。相反,一阶段检测器使用固定的抽样网格,在这些方法中一个流行的方法是在每个空间位置上使用多尺度的先验框来覆盖不同宽高比的图片。

在FPN结构中的每一层采用多尺度和宽高比不同的先验框。我们使用1个方形先验框到使用12个先验框进行实验(尺寸为2k/4 k ≤ 3 k\leq3 k3,宽高比[0.5,1.2])。使用在ResNet-50中的结果见Table 1C。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第10张图片
特别令人惊讶的好结果AP(30.3)是仅使用一个方形先验框。然而,AP可以提升4个点,每个位置使用3尺寸和3宽高比。

最终,我们发现超过6-9先验框就没有什么结果了。因此虽然二阶段系统可以在图片中任意分类,性能w.r.t饱和密度说明二阶段系统更高的潜在密度可能没有优势。

速度VS准确率: 更大的主干网络会有更高的准确率,但是推理速度更低。输入图片的尺寸也是如此。见Table 1e。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第11张图片
图2展示了RetinaNet和其他方法在COCO数据集上的速度/准确率对比。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第12张图片
从图中可知,RetinaNet通过使用focal loss超越了所有已存在的方法,打破了一阶段检测器准确率低的瓶颈。ResNet-1-1-FPN和600像素的RetinaNet准确率媲美ResNet-101-FPN Faster R-CNN,且推理时间122ms,而Faster R-CNN 172ms。使用大尺寸使得RetinaNet的准确率超越了二阶段检测方法,并保持速度。对于更快的推理时间,使用500像素的ResNet-50-FPN比ResNet-101-FPN更好。

5.3 Comparison to State of the Art

【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第13张图片

6.Conclusion

在这项工作中,我们认为类别不平衡导致一阶段检测器无法超越二阶段检测器的主要问题。为了解决它,用focal loss替代交叉熵损失为了让模型关注困难负样本。我们的方法简单高效。通过设计一个全卷积的一阶段检测器和实验分析对比证明了它的效力。
论文中的源码地址:RetinaNet

Appendix :Focal Loss*

Focal Loss的精确形式不重要,其他形式的focal loss也可能有更好的效果。
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第14张图片
如图,派生出来的FL*就比原始FL效果好。梯度变化也比较稳定。

【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第15张图片
派生形式:ResNet-50-600, α = 0.25 \alpha=0.25 α=0.25
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第16张图片
【论文精读】Focal Loss for Dense Object Detection(RetinaNet)全文翻译及重点总结_第17张图片

笔者总结

Focal Loss

  1. 正样本:图片中候选框有目标
  2. 负样本:候选框没有目标
  3. p t p_t pt较大的是easy example,较小的是hard example
  4. Focal Loss就是通过控制正负样本权重和easy/hard样本权重得到好的结果,因为类别不平衡是一阶段检测器的通病,所以这点改进效果提升明显。
  5. 精度该论文就是因为Focal Loss可以作为提升模型性能的trick,很有用的技巧。

RetinaNet

  1. 应用Focal Loss的目标检测模型。
  2. ResNet-50-FPN/ResNet-101-FPN+class subnet和box subnet
  3. 输入是(batch_size,3,600,600)

你可能感兴趣的:(论文笔记,计算机视觉,神经网络,pytorch,python,深度学习)