Focal Loss for Dense Object Detection

基于密集目标的焦点损失
摘要
目前准确率最高的目标检测器是以R-CNN为基础的二阶段方法,在这其中我们再一系列候选目标位置上运用一个分类器。相比之下,一阶段的检测器的优点是更为快速和简单,但是相对于二阶段检测器在准确率方面就远远比不上了。在本篇文章中,我们研究了这其中的原因。我们发现在训练过程中极端的前景和背景类别不平衡的比例可能是这其中比较重要的原因。我们建议通过重构标准交叉熵来解决这种类别不平衡的问题,实现了在良好分类样本上降低权重的目的。我们新型的目标损失将关注点放在稀疏的困难样本(hard examples)上,并且避免了在训练过程中大量容易的负样本对检测器造成负担。为了对我们的损失的有效性做出评价,我们设计并训练了一个简单的密集检测器,我们称之为RetinaNet。我们的结果显示当使用焦点损失进行训练时,RetinaNet既可以达到先前一阶段检测器的速度又超过了现有的state-of-art检测器的准确率。


1.Introduction
目前的state-of-the-art的目标检测器都是基于两阶段、以proposal为导向的机制。由于在R-CNN框架中流行之后,一阶段生成一系列系数的候选目标位置,第二阶段用卷积神经网络对每个候选位置进行分类,将其分为前景类别或者背景。通过一系列改进,这个二阶段框架在COCO benchmark上持续实现了较高的准确率。
尽管二阶段检测器如此成功,一个很自然的问题是,一个简单的一阶段检测器可以达到相同的准确率吗?一阶段检测器一般应用于一些常规的、密集的样本目标位置,他们有不同的大小和长宽比。最近在一阶段检测器上的研究,比如YOLO和SSD,显示的结果表明一阶段检测器的速度相较于二阶段检测器速度更快,而在准确性方面距离二阶段检测器大概10- 40%。
我们第一次,展现了一个一阶段检测器,它在COCO数据集上的表现同更为复杂的二阶段检测器相比无异,比如FPN和Faster R-CNN的变种Mask R-CNN。为了实现这个结果,我们在训练的时候明确了类别不平衡问题是阻止一阶段检测器达到state-of-the-art准确率的主要障碍,并且提出了一种新的损失函数来消除这一障碍。
类别不平衡问题在R-CNN类似的检测器中由于二阶段串联和样本探索法得到了强调。Proposal的阶段(比如SS, EB, DeepMask, RPN)快速地实现了对候选目标位置数量进行缩小的目的,过滤掉了大多数背景样本。在第二个分类阶段中,运用样本探索法,比如固定的前景与背景比例,或者OHEM方法来维持前景和背景之间的合理的平衡。

相比之下,一阶段检测器必须加工一张图片上采样得到的更多的候选目标位置。实际上这通常会导致列举出大约100k的密集地覆盖着空间位置、大小和长宽比的位置。尽管相似的样本探索法同样会被使用,当训练过程被容易分类的背景样本主宰的时候它们就会变得无效。这种无效是目标检测中的典型问题,解决这种问题的主要方法是通过诸如bootstrap或者困难样本挖掘等技术。

在这篇文章中,我们提出了一种新的损失函数,它在处理类别不平衡方面相较于之前的方法都更为有效。这一损失函数基于交叉熵损失函数动态地改变大小(dynamically scaled),其中随着正确分类的置信度增加时,scaling因子会衰退到0。(见图1)


直觉上而言,这一scaling因子可以在训练中自动降低容易样本(easy examples)对于损失的贡献,并快速引导模型聚焦到困难样本上去。实验表明我们提出的焦点损失函数能够使得我们训练出一个高准确率的、一阶段检测模型,并且这一模型通过使用样本探索法和困难样本挖掘法显著地超越了其他的、先前用来训练一阶段检测器的state-of- the-art的技术。最后,我们注意到焦点损失的确切形式并不是关键的,因此我们同时展示了其他形式也可以实现类似的结果。
为了展现我们提出的焦点损失的效率,我们设计了一个叫做RetinaNet的一阶段检测器,这个名字是根据他在一张输入图片中的密集样本目标位置而命名的。它的设计的特定在于一个高效的内在网络特征金字塔以及anchor box的使用。它吸收的思想主要来源于,(Scalable object detection using deep neural networks.\ Single shot multibox detector.\ Faster R-CNN: Towards real-time object detection with region proposal net-

works \ Feature pyramid networks for object detection.)这几篇文章。RetinaNet高效又准确;我们基于ResNet-101-FPN这个backbone上的最佳的模型,以5秒每帧的速度在COCO test-dev上实现了39.1% 的AP,超过了之前发表的最好的所有一阶段和二阶段检测器的表现(见图2)。


2. Related Work
典型的目标检测器:在滑动窗口中,分类器被运用到一个密集的图像分割网上,这一理念有着丰富且悠久的历史。其中最早的成功是LeCun等人将卷积神经网络运用到手写数字识别上。Viola和Jones在面部识别上使用了boosted目标检测器,兴起了类似模型的广泛传播与采用。HOG的引入以及整体通道特征的利用促进了类似行人检测的有效算法的兴起。DPMs将密集检测器扩展到了更多的一般目标类别上并且持续很多年都在PASCAL数据集上获得了顶尖的表现。尽管滑动窗口方法在经典计算机视觉仍然是领先的检测范式,但是随着深度学习的复苏,接下来介绍的二阶段检测器快速地煮到了目标检测领域。
二阶段检测器:现代目标检测的主流范式是基于二阶段的方法。SS在这一领域处于先锋地位,一阶段生成了一系列稀疏的、可以覆盖所有目标的候选建议,并且同时过滤掉了大多数负样本区域,第二阶段则对这些proposal进行前景类别和背景的分类。R-CNN将第二阶段的分类器升级成了一个在准确率和现代目标检测上领先的卷积神经网络。R-CNN近些年在速度和使用学习目标建议上都有所提升。RPN将建议生成同第二阶段的额分类器联合形成一个单个卷积神经网络,构成了Faster R- CNN的基本框架。这一框架的更多的扩展(FPN/OHEM/ Top-down modulation for object detection/ResNet/Mask R-CNN)也陆续被提出。
一阶段检测器:OverFeat是现代的第一个基于深层神经网络的一阶段目标检测器。近期SSD和YOLO更新了一阶段方法。这些检测器为了实现速度的提升,我们有对其进行调整,因此它们的准确率相比于二阶段方法要低一些。SSD的AP少了10-20%,而YOLO则在速度和准确率之间的trade-off上更关注速度(见图2)。最近的成果表明二阶段检测器可以通过降低输入图片精度和减少proposal数量来实现更快的速度,但是一阶段方法不仅在计算上有更大的支出而且在准确率上也落后。相比之下,本篇文章的目的是为了弄清楚在相同、甚至更快的速度下,一阶段检测器是否可以比得上甚至超过二阶段检测器的准确率。
我们设计的RetinaNet同先前的密集检测器有许多相似点,尤其是在RPN中引入的anchor概念上以及SSD和FPN中使用的特征金字塔这两方面。我们更优结果的实现并非是由于网路设计的创新而是因为设计的新型损失函数。
类别不平衡:无论是典型的一阶段目标检测方法,比如boosted检测器(Rapid object detection using a boosted cascade of simple features/ Integral channel features)和DPM,或者是更近期的方法,比如SSD,在训练过程中都面临类别不平衡问题。这些检测器在10000-100000的候选位置(每张图片上),但只有其中的少量包含目标。这种不平衡问题导致了两个问题:(1)由于大多数位置都是容易分类的负样本,而它们只会贡献一些无用的学习信号,因此会导致训练没有效率;(2)整体而言,容易分类的负样本会overwhelm训练过程,并且导致模型degenerate。常用的做法是进行某种形式的困难负样本挖掘(Learning and Example Selection for Object and Pattern Detection./ Rapid object detection using a boosted cascade of simple features/ Cascade object detection with deformable part models./ Training region- based object detectors with online hard example mining./ SSD: Single shot multibox detector.),即在训练过程中对困难样本进行采样,或者实行一些更复杂的取样或者/重构权重的策略。相对比而言,我们提出的焦点损失的方法自然地处理了一阶段检测器面临的类别失衡的问题,并且实现了在不用采样和没有对损失和计算梯度overwhelming的简单负样本的情况下在所有样本进行高效训练。
稳健估计:很多人都对设计一个可以通过降低有较大error的样本(hard examples)来实现outlier的贡献的方法和基础文件的损失函数这一行为感兴趣。相比之下,我们并没有对outlier进行处理,我们的焦点损失函数通过降低inlier(easy examples)的权重来解决类别不平衡的问题,达到了即使easy examples的数目很多但是它们对总的贡献很小的目的。换句话说,焦点损失同稳健损失的扮演的角色正好相反:它的关注点在于那些稀疏的较难进行分类的样本(hard examples)。


3. Focal Loss
焦点损失主要是用来处理一阶段目标检测方案在训练时前景和背景目标极度不平衡的情况(比如1:1000)。我们从二分类交叉熵损失中引入了焦点损失(将焦点损失扩展到多分类的情况很简单,为了简单起见我们此处只讨论二分类的情况)

在上面的表达式中,y只取+1和-1两个值,这两个值代表了真实类别,p是模型对于y=1的类别的估计概率。为了表示方便,我们定义pt为:


因此,我们重新定义CE(p,y)为CE(pt) = -log(pt)

从图一中的蓝色曲线(最上方那条)可以看到交叉熵损失。从图中也可以看出,这种损失比较明显的一个特点是即使对于那些很容易分类的样本而言(pt  >> 0.5),它们的损失也并不小。当我们对那些大量容易分类的样本的进行加总时,那些小的损失值可能会超过较稀少的类别的损失。

处理类别不平衡问题的常用方法是分别为类别1和类别-1引入权重因子\alpha和1-\alpha,其中\alpha介于[0,1]之间。实际上\alpha的确定可以通过inverse类别频率(?)或者将其看作超参数,然后用交叉验证法对其设定。为了表示方便,我们类似地同定义pt一样定义\alpha t。我们将用\alpha平衡过的CE损失定义为:


这个损失只是CE的简单扩展,我们将其看作之后对我们提出的焦点损失的实验基线。


3.2 Focal Loss Definition
正如我们实验中所表明的那样,在密集检测器训练过程中遇到的大型类别不平衡问题对CE损失有较大的影响。容易分类的负样本构成了损失函数中的一大部分,并且主导了梯度。尽管\alpha平衡了正负样本的重要性,但是它并没有对easy/hard样本进行区分。因此,我们提出改造损失函数来down-weight easy样本,从而将训练的关注点放在hard negative上。 
我们提出了在CE损失上添加一个调整因子(1 − pt)γ,其中γ是一个可以调整的focusing参数,而且γ ≥ 0。我们将损失定义为:


图1中展示了几个不同的γ ∈ [0, 5]值时焦点损失的可视化结果。我们注意到焦点损失的两个特点。(1)当一个样本被错误的的分类而且pt 很小时,调整因子很接近于1,而且损失几乎没有什么变化。当pt 接近于1时,调整因子逐渐变为0,而且正确分类样本的损失也得到了down-weight。(2)focusing参数γ在对易分类样本进行down-weight处对比率进行了温和的调整。
当γ = 0时,FL和CE相等,并且随着γ增大,调整因子的影响也会相应地增加。
直觉上而言,调整因子降低了易分类样本的损失贡献,并且扩大了一个得到较小损失的样本的区间。比如,当γ = 2且pt ≈ 0.968的时候,样本的损失将会降低大概1000x倍。这反过来增大了易错分类的样本在损失函数中的重要性(当pt ≤.5且γ=2时,损失函数扩大了4倍以上)。

实际上,我们用了一个变种的\alpha平衡焦点损失:


在实验中我们采取了这种形式的损失函数,因为它产生了相较于没有\alpha平衡的形式的更优的准确率。最后,我们注意到这种损失层的使用将计算p使用的sigmoid操作和损失计算进行了结合,使得计算稳定性得到了极大的提高。

尽管在我们的主要实验结果中,我们使用的都是以上形式的损失函数定义,但是它的精确的形式并不是关键的。在appendix中我们考虑了其他形式的焦点损失,而且发现它们同样有效。

猜你喜欢

转载自blog.csdn.net/weixin_40516558/article/details/79826720
今日推荐