文章目录
- Abstract
- 北京
- 发现问题并给出方法
- 成果
- Introduction
- Related Work
- Robust 评估
- Focal Loss
- Balanced Cross Entropy
- Focal Loss Definition
- Class Imbalance and Model Initialization
- Class Imbalance and Two-stage Detectors
- RetinaNet Detector
- Experiments
- Conclusion
hh
源代码
Abstract
北京
迄今为止,精度最高的目标检测器是基于R-CNN推广的两阶段方法,其中分类器应用于候选目标位置的稀疏集。相比之下,应用于对可能的目标位置进行常规、密集采样的单级探测器有可能更快、更简单,但到目前为止还不如两阶段检测器的准确性。
发现问题并给出方法
在本文中,我们调查了为什么会出现这种情况。我们发现,在密集检测器训练过程中遇到的极端前景-背景类不平衡是主要原因。我们建议通过重塑标准交叉熵损失来解决这种类不平衡,从而降低分配给分类良好的示例的损失的权重。我们的新Focal Loss将训练集中在一组稀疏的困难示例上,并防止在训练期间大量的简单负样本让检测器失去应有的功效(1T,1000F,全F错误率1/1001)。
成果
为了评估损失的有效性,我们设计并训练了一个简单的密度检测器RetinaNet。我们的研究结果表明,当使用焦损进行训练时,RetinaNet能够匹配先前的一级检测器的速度,同时超过所有现有的最先进的两级检测器的精度。
Introduction
对于两阶段检测器,第一阶段生成候选目标位置的稀疏集,第二阶段使用卷积神经网络对每个候选位置提取特征区分前景和背景
我们提出了一种单阶段目标检测器,首次与更复杂的两阶段检测器的最先进的COCO AP相匹配,例如特征金字塔网络(FPN)[20]或Faster R-CNN[28]的Mask R-CNN[14]变体。为了达到这个结果,我们确定训练过程中的类不平衡是阻碍单阶段检测器达到最先进精度的主要障碍,并提出了一个新的损失函数(Focal Loss)来消除这个障碍。
(好吧,也没我以为的那么潇洒)类不平衡在类r - cnn检测器中通过两阶段级联和抽样启发式来解决。提案阶段(例如,Selective Search [35], EdgeBoxes [39], DeepMask [24,25], RPN[28])迅速将候选对象位置的数量缩小到少量(例如,1-2k),过滤掉大多数背景样本。在第二个分类阶段,进行抽样启发式,例如固定的前景与背景比例(1:3),或在线硬示例挖掘(OHEM)[31],以保持前景和背景之间可管理的平衡
相比之下,单阶段检测器必须处理更大的候选对象位置集,这些候选对象位置在图像上定期采样。在实践中,这通常相当于枚举密集覆盖空间位置、尺度和纵横比的约100k个位置。虽然也可以应用类似的抽样启发式,但它们效率低下,因为训练过程仍然由易于分类的背景样本主导。这种低效率是目标检测中的一个经典问题,通常通过bootstrapping[33,29]或硬例挖掘[37,8,31]等技术来解决
在本文中,我们提出了一个新的损失函数,作为一个更有效的替代以前的方法来处理类不平衡。损失函数是动态缩放的交叉熵损失,随着正确类别置信度的增加,比例因子衰减到零,见图1。
设置γ > 0减少了分类良好的示例(p t > .5)的相对损失,把更多的注意力放在困难的、错误分类的例子上
直观地说,这个比例因子可以在训练过程中自动降低简单示例的权重,并迅速将模型集中在困难示例上。实验表明,我们提出的Focal Loss使我们能够训练一个高精度的单阶段检测器,其性能明显优于使用抽样启发式或硬示例挖掘训练的替代方案,这是先前用于训练单阶段检测器的最先进技术。最后,我们注意到焦点损失的确切形式并不重要,并且我们展示了其他实例可以实现类似的结果
为了证明所提出的焦点损失的有效性,我们设计了一个简单的单级目标检测器RetinaNet,因其在输入图像中对目标位置进行密集采样而命名。它的设计特点是高效的网络内特征金字塔和锚盒的使用。它借鉴了来自[22,6,28,20]的各种最新思想。RetinaNet高效、准确;我们基于ResNet-101- FPN骨干网的最佳模型,在以5 fps运行时实现了39.1的COCO测试开发AP,超过了之前发布的单级和两级检测器的最佳单模型结果,见图2。
Related Work
介绍了下以往的经典检测器、一阶段、二阶段检测器。指出RetinaNet的设计与以前的密集检测器有许多相似之处,特别是RPN[28]引入的“锚”概念以及SSD[22]和FPN[20]中使用的特征金字塔。强调RetinaNet获得的最佳结果不是基于网络设计的创新,而是由于我们的新颖Focal Loss损失。
Robust 评估
人们对设计鲁棒损失函数(例如,Huber损失[13])非常感兴趣,该函数通过降低具有大误差的示例(硬示例)的损失权重来减少异常值的贡献。相比之下,我们的焦点损失不是解决异常值,而是通过降低内部值(简单的例子)的权重来解决类别不平衡,这样即使它们的数量很大,它们对总损失的贡献也很小。换句话说,焦点损失执行与鲁棒损失相反的角色:它将训练集中在一组稀疏的硬示例上
Focal Loss
焦点损失是为了解决在训练期间前景和背景类之间存在极端不平衡的单阶段对象检测场景(例如1:1000)。我们从二元分类的交叉熵(cross entropy, CE)损失入手,引入焦损:
在上面,y∈{±1}指定基真类,p∈[0,1]是模型对标签y = 1的类的估计概率。
为了表示方便,我们定义p t:
所以CE(p,y)可以表示为
CE损失如图1中的蓝色(顶部)曲线所示。从图中可以很容易地看出,这种损失的一个显著特性是,即使是容易分类的例子(p t 》0.5)也会带来巨大的损失。当对大量简单的例子求和时,这些小的损失值可能会压倒罕见的类。
Balanced Cross Entropy
解决类失衡的一个常用方法是为类1引入一个加权因子α∈[0,1],为类- 1引入1 - α。在实际应用中,α可以用逆类频率来设定,也可以作为一个超参数,通过交叉验证来设定。为了表示方便,我们像定义p t一样定义α t。我们将α-平衡CE损失写成:
Focal Loss Definition
正如我们的实验将显示的那样,密集检测器训练过程中遇到的大类不平衡压倒了交叉熵损失。容易分类的底片构成了大部分的损失,并主导了梯度。虽然α平衡了积极/消极例子的重要性,但它并不区分简单/困难的例子。因此,我们建议重塑损失函数以降低简单示例的权重,从而将训练重点放在困难的否定上。
我们建议在交叉熵损失中加入一个调制因子(1−p t) γ,可调聚焦参数γ≥0。我们将焦损定义为:
图1显示了γ∈[0,5]的几个值下的焦损。我们注意到焦损的两个特性。(1)当样本被误分类,且p t较小时,调制因子接近1,损失不受影响。当p t→1时,因子趋于0,并且对分类良好的示例的损失是下加权的。(2)聚焦参数γ平滑地调整了简单样例降权的速率。当γ = 0时,FL相当于CE,并且随着γ的增加,调制因子的效果也同样增加(我们发现γ = 2在我们的实验中效果最好)。
直观地,调制因子减少了简单示例的损失贡献,并扩展了示例接收低损失的范围。例如,当γ = 2时,一个分类为p t = 0.9的例子的损失比CE低100倍,当p t≈0.968时,其损失比CE低1000倍。这反过来又增加了纠正错误分类示例的重要性(当p t≤0.5且γ = 2时,其损失最多减少4倍)。
实践中使用α-平衡焦点损失,发现γ=2,α=0.25时效果最好
最后我们注意到损失层结合sigmoid操作实现用损失计算p,使数值稳定性更强
Class Imbalance and Model Initialization
默认情况下,二元分类模型初始化为输出y = - 1或1的概率相等。在这种初始化下,在类不平衡的情况下,由于类的频繁而造成的损失会超过总损失,导致早期训练不稳定。为了解决这个问题,我们引入了“先验”的概念,用于在训练开始时对罕见类(前景)的模型估计p值。我们用π表示先验,并将其设置为模型的估计值p(对于该类的例子)慢,例如0.01。我们注意到这是模型初始化的变化(见§4.1),而不是损失函数的变化。我们发现,在严重类不平衡的情况下,这可以提高交叉熵和焦点损失的训练稳定性。
Class Imbalance and Two-stage Detectors
两级检测器通常使用交叉熵损失进行训练,而不使用α-平衡或我们提出的损失。相反,他们通过两种机制来解决类别不平衡问题:(1)两阶段级联和(2)有偏差的小批量抽样。第一个级联阶段是一个对象提议机制[35,24,28],它将几乎无限的可能对象位置集减少到一到两千个。重要的是,所选择的建议不是随机的,而是可能对应于真实的对象位置,这消除了绝大多数容易的否定。当训练第二阶段时,偏抽样通常用于构建小批量,例如,包含1:3比例的正样例与负样例。这个比率就像一个隐式的通过抽样实现的α平衡因子。我们提出的焦损是为了在一级检测系统中直接通过损失函数来解决这些机制。
RetinaNet Detector
RetinaNet是由一个骨干网和两个任务子网组成的单一、统一的网络。主干负责计算整个输入图像上的卷积特征映射,是一个离自卷积网络。第一子网对主干网的输出执行卷积对象分类;第二个子网执行卷积边界盒回归。这两个子网的特点是我们专门为单阶段密集检测提出的简单设计,见图3。虽然这些组件的细节有许多可能的选择,但大多数设计参数对实验中显示的精确值并不特别敏感。接下来我们将描述RetinaNet的每个组成部分。
简单来说RetinaNet在ResNet架构上添加了FPN瓶颈,然后分别用分类子网和边界盒回归子网进行分类和回归
RetinaNet使用特征金字塔层p3到p7,其中p3到p5是从对应的ResNet剩余阶段(c3到c5)的输出中使用自上而下和横向连接计算的,p6通过对c5进行3×3步幅2转换获得,p7通过应用ReLU然后对p6进行3×3 stride-2转换来计算。
(1)由于计算原因,我们没有使用高分辨率金字塔级p2
(2) p6是通过跨行卷积而不是下采样计算的
(3)我们包括p7以改进大型目标检测。这些微小的修改提高了速度,同时保持了准确性。
Experiments
Conclusion
在这项工作中,我们认为类不平衡是阻碍单阶段目标检测器超越表现最好的两阶段方法的主要障碍。为了解决这个问题,我们提出了焦点损失,它将调制项(1−p t) γ应用于交叉熵损失,以便将学习集中在硬负例上。我们的方法简单而高效,我们通过设计一个全卷积单级检测器(RetinaNet)来证明其有效性,并报告了广泛的实验分析,表明它达到了最先进的精度和速度。