Focal Loss for Dense Object Detection
论文地址:https://arxiv.org/abs/1708.02002
摘要
迄今为止,最高精度的物体检测器是基于由R-CNN推广的two-stage方法,其中分类器被应用于候选物体位置的稀疏集合。相比之下,在可能的物体位置的规则密集采样中应用的单级检测器具有更快和更简单的潜力,但是迄今为止已经落后于两级检测器的精度。在本文中,我们调查为什么会出现这种情况。我们发现在密集检测器的训练过程中遇到的极端前景-背景类不平衡是主要原因。我们建议通过重塑标准交叉熵损失来解决这种类别不平衡,这样它就降低了分配给分类良好的例子的损失。我们新颖的聚焦损失训练集中在一组稀疏的硬例子上,并防止大量的简单否定在训练过程中压倒检测器。为了评估我们损失的有效性,我们设计并训练了一个简单的密集探测器,我们称之为视网膜。我们的结果表明,当训练有焦点损失时,视网膜能够匹配以前的一级探测器的速度,同时超过所有现有的最先进的两级探测器的精度。
1 介绍
当前最先进的物体检测器是基于两阶段的提议驱动机制。如在R-CNN框架[11]中推广的,第一阶段生成候选对象位置的稀疏集,第二阶段使用卷积神经网络将每个候选位置分类为前景类别之一或背景。通过一系列的进步[10,27,19,13],这个两阶段的框架在具有挑战性的COCO基准[20]上始终达到最高精度。
尽管两级探测器取得了成功,但一个自然的问题是:简单的一级探测器能否达到类似的精度?单级检测器应用于对象位置、比例和纵横比的规则密集采样。最近对单级探测器的研究,如YOLO [25,26]和SSD[21,9],证明了有希望的结果,产生了更快的探测器,相对于最先进的两级方法,精确度在10-40%以内
本文进一步推进了这一概念:我们首次提出了一种单级物体探测器,它与更复杂的两级探测器中最先进的COCO AP相匹配,如特征金字塔网络(FPN) [19]或更快的R-CNN的掩模R-CNN [13]变体[27]。为了实现这一结果,我们将训练过程中的班级不平衡确定为阻碍单级检测器实现最先进精度的主要障碍,并提出了一种新的损失函数来消除这一障碍。
类不平衡是通过两级级联和采样启发在类似于R-CNN的检测器中解决的。提议阶段(例如,选择性搜索[34]、边缘框[37]、深度遮罩[23,24]、RPN [27])快速将候选对象位置的数量缩小到一个小数字(例如,1-2k),过滤掉大多数背景样本。在第二分类阶段,执行采样试探法,例如固定的前景-背景比(1:3),或在线硬示例挖掘(OHEM) [30],以保持前景和背景之间的可管理的平衡。
相比之下,单级检测器必须处理一组更大的候选对象位置,这些位置在图像中定期采样。在实践中,这通常相当于枚举密集覆盖空间位置、比例和纵横比的100k个位置。虽然也可以应用类似的采样试探法,但是它们效率低,因为训练过程仍然被容易分类的背景例子所支配。这种低效率是对象检测中的一个经典问题,通常通过bootstrapping[32,28]或硬示例挖掘[36,8,30]等技术来解决。
在这篇文章中,我们提出了一个新的损失函数,作为一个更有效的替代以前的方法来处理阶级不平衡。损失函数是一个动态缩放的交叉熵损失,当正确类别的置信度增加时,缩放因子衰减到零,见图1。直观地说,这个比例因子可以在训练过程中自动降低简单例子的权重,并快速将模型集中在困难的例子上。实验表明,我们提出的局部损失使我们能够训练一个高精度的单阶段检测器,该检测器的性能明显优于采样试探法或硬示例挖掘的替代训练,硬示例挖掘是以前训练单阶段检测器的最先进的技术。最后,我们注意到焦点损失的确切形式并不重要,我们可以用其他例子来说明类似的结果。
为了证明所提出的聚焦损失的有效性,我们设计了一个简单的单级物体检测器,称为RetinaNet,以其对输入图像中物体位置的密集采样而命名。它的设计特点是高效的网络特征金字塔和锚箱的使用。它借鉴了[21,6,27,19]中的各种新观点。RetinaNet高效准确;我们基于ResNet-101FPN主干的最佳模型在以5 fps运行时实现了39.1的COCO测试开发AP,超过了之前公布的单级和两级探测器的最佳单模型结果,见图2。
2 相关工作
经典对象检测器:滑动窗口范例,其中分类器应用于密集的图像网格,有着悠久而丰富的历史。最早的成功之一是LeCun等人的经典工作,他将卷积神经网络应用于手写数字识别[18,35]。维奥拉和琼斯[36]使用增强的物体检测器进行人脸检测,导致这种模型的广泛采用。HOG [4]和积分通道特征[5]的引入产生了行人检测的有效方法。DPMs [8]有助于将密集探测器扩展到更一般的物体类别,并在PASCAL [7]上取得了多年的优异成绩。虽然滑动窗口方法是经典计算机视觉中的主要检测范例,但随着深度学习的复兴[17],下述两阶段检测器迅速主导了对象检测。
两阶段检测器:现代物体检测的主要范例是基于两阶段方法。正如在选择性搜索工作[34]中开创的那样,第一阶段生成候选建议的稀疏集合,该集合应该包含所有对象,同时过滤掉大多数负面位置,第二阶段将候选建议框分类为前景类/背景。R-CNN[11]将第二级分类器升级为卷积网络,大大提高了准确性,开创了现代目标检测时代。多年来,R-CNN在速度[14,10]和使用学习对象建议[6,23,27]方面都有所改进。区域建议网络(RPN)将建议生成与第二阶段分类器集成到单个卷积网络中,形成更快的RCNN框架[27]。对这一框架提出了许多扩展,例如[19、30、31、15、13]。
一级探测器:OverFeat[29]是第一个基于深层网络的现代一级物体探测器之一。最近,SSD[21,9]和YOLO [25,26]对一步法重新产生了兴趣。这些探测器已经过速度调整,但其精度落后于两级方法。SSD的平均功耗降低了10-20%,而YOLO专注于更极端的速度/精度权衡。参见图2。最近的工作表明,两级检测器可以简单地通过降低输入图像分辨率和减少建议的数量来实现快速,但是一级方法即使有更大的计算预算也在精度上落后[16]。相比之下,这项工作的目的是了解一级探测器在以类似或更快的速度运行时,是否可以匹配或超过两级探测器的精度。
我们的RetinaNet探测器的设计与以前的密集探测器有许多相似之处,特别是由RPN [27]引入的“锚”概念,以及在SSD [21]和FPN [19]中使用的特征金字塔。我们强调,我们简单的检测器取得最佳结果不是基于网络设计的创新,而是由于我们新颖的损失。
类别不平衡:无论是经典的单阶段物体检测方法,如增强检测器[36,5]和DPMs [8],还是最近的方法,如SSD [21],在训练过程中都面临着较大的类别不平衡。这些检测器评估每个图像的104105个候选位置,但是只有少数位置包含对象。这种不平衡导致两个问题:(1)训练效率低,因为大多数位置容易被否定,没有提供有用的学习信号;(2)总的来说,简单的负面因素会压倒训练,导致模式退化。常见的解决方案是执行某种形式的硬否定挖掘[32,36,8,30,21],在训练或更复杂的采样/重新加权方案期间对硬示例进行采样[2]。相比之下,我们表明,我们提出的焦点损失自然地处理了单级检测器面临的类别不平衡,并允许我们在所有示例上高效地进行训练,而无需采样,也无需简单的否定来压倒损失和计算的梯度。
稳健估计:人们对设计稳健的损失函数(如Huber损失[12])很感兴趣,这种损失函数通过对误差较大的例子(硬例子)的损失进行加权来减少输出的贡献。相比之下,我们的焦点损失不是解决异常值,而是通过降低内联体的权重(简单的例子)来解决类不平衡,这样即使它们的数量很大,它们对总损失的贡献也很小。换句话说,聚焦损失的作用与鲁棒损失相反:它将训练集中在一组稀疏的硬例子上。
3 Focal Loss
Focal Loss设计用于解决一阶段目标检测场景,在该场景中,在训练期间前景和背景类之间存在极端不平衡(例如,1:1000)。我们从二元分类1的交叉熵损失开始引入焦点损失:
在上面的例子中, y ∈ { ± 1 } y∈\{±1\} y∈{ ±1}指定了基本真值类, p ∈ [ 0 , 1 ] p∈[0,1] p∈[0,1]是标签为y = 1的类的模型的估计概率。为了便于标注,我们定义 p t p_t pt:
并重写 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)
CE loss可以看作是图1中的蓝色(顶部)曲线。这种损失的一个显著特点是,即使很容易分类的例子(pt≫0.5)也会造成不小的损失。当通过大量简单的例子总结时,这些小的损失值可以压倒稀有的类别。
3.1 平衡交叉熵
解决类别不平衡的常用方法是为类别1引入加权因子α ∈ [0,1],为类别-1引入加权因子1-α。实际上,α可以通过逆类频率来设置,或者作为一个超参数通过交叉验证来设置。为了便于标注,我们对α的定义与我们对pt的定义相似。我们将α平衡CE loss写成:
这种损失是CE的简单扩展,我们认为它是我们提出的focal损失的实验基线。
3.2 Focal Loss 定义
正如我们的实验将会显示的,在密集检测器的训练期间遇到的大的类不平衡压倒了交叉熵损失。容易分类的负面样本构成了损失的大部分,并主导了梯度。虽然α平衡了正面/负面例子的重要性,但它没有区分容易/困难的例子。相反,我们建议重塑损失函数,减少简单的样本的权重,从而把重点放在困难负面的训练上。
更正式地说,我们建议在交叉熵损失上增加一个调制因子 ( 1 − p t ) γ (1-p_t)^γ (1−pt)γ,可调聚焦参数γ ≥ 0。我们将focal损失定义为:
focal loss在图1中用γ ∈ [0,5]的几个值来表示。我们注意到focal loss的两个性质。(1)当一个例子被错误分类并且pt很小时,调制因子接近1并且损耗不受影响。当pt→ 1时,因子变为0,分类良好的示例的损失被向下加权。(2)聚焦参数γ平滑地调整简单示例的加权速率。当γ = 0时,FL相当于CE,随着γ的增加,调制因子的效果也同样增加(我们发现γ = 2在我们的实验中效果最好)。
直观地说,调制因子减少了简单示例的损耗贡献,并扩展了示例接收低损耗的范围。例如,当γ = 2时,分类为pt= 0.9的示例与CE相比将具有100倍的低损耗,而当pt≈ 0.968时,将具有1000倍的低损耗。这反过来增加了纠正错误分类示例的重要性(对于pt≤0.5且γ = 2,其损失最多缩小4倍)。
实际上,我们使用focal loss的α平衡变量:
我们在实验中采用了这种形式,因为它比非α平衡形式的精度略有提高。最后,我们注意到损失层的实现将计算p的sigmoid运算与损失计算相结合,导致更大的数值稳定性。
虽然在我们的主要实验结果中,我们使用了上面的focal loss定义,但它的精确形式并不重要。在在线附录中,我们考虑了focal的其他例子,并证明了这些例子同样有效。
3.3 类别不平衡与模型初始化
默认情况下,二分类模型被初始化为输出y = 1或-1的概率相等。在这样的初始化下,在存在类别不平衡的情况下,由于频繁类而造成的损失占总损失的绝大部分,并在早期训练中造成不稳定。为了应对这种情况,我们在训练开始时为稀有类(前景)引入了模型估计的p值的“先验”概念。我们用π来表示先验,并设置它,使得模型对稀有类的例子的估计较低,例如0.01。我们注意到这是模型初始化的变化(见4.1),而不是损失函数的变化。我们发现,在严重的班级不平衡的情况下,这可以提高交叉熵和焦点损失的训练稳定性。
3.4.类别不平衡和两阶检测器
两级检测器通常使用交叉熵损失进行训练,而不使用α平衡或我们提出的损失。相反,他们通过两种机制解决阶级不平衡:(1)两级级联和(2)有偏的小批量抽样。第一个级联阶段是一个对象提议机制[34,23,27],它将几乎无限多的可能对象位置减少到一两千个。重要的是,选择的建议不是随机的,而是可能对应于真实的对象位置,这消除了绝大多数容易的负面影响。当训练第二阶段时,典型地使用有偏采样来构建包含例如1:3的阳性和阴性样本比率的小批量。该比率类似于通过采样实现的隐式α平衡因子。我们提出的焦点损失被设计成直接通过损失函数在单级检测系统中处理这些机制。
还没有评论,来说两句吧...