分享

Focal Loss论文详解

 汉无为 2022-05-22 发布于湖北
论文:《Focal Loss for Dense Object Detection》
代码:https://github.com/facebookresearch/Detectron.

摘  要  

迄今为止,精度最高的目标检测器是基于R-CNN推广的两阶段方法,其中一个分类器应用于稀疏的候选目标位置。相比之下,对可能的目标位置进行常规、密集采样的一阶段检测器,可能更快、更简单,但是迄今为止精度仍落后于两阶段检测器。在本文,我们调查了情况为什么会这样。我们发现:在密集目标检测器训练期间,极端的前-后景类别不平衡是造成该情况的主要原因。我们提出通过重新改造标准交叉熵损失来解决这种类别不平稳问题,方法是减少容易分类样本的损失权重。我们新型的的Focal Loss集中在训练一个稀疏的困难样本,并且防止大量的容易反例在训练期间压倒检测器。为了评估我们的损失的效果,我们设计并训练了一种称为RetinaNet(视网膜网络)的简单密集检测器。我们的结果显示:训练时采用focal losss时,RetinaNet速度与之前的一阶段检测器相似,同时超过了所有最先进的一阶段检测器。

概述

目前最先进的目标检测器基于一种两阶段的、候选框驱动的机制。就像R-CNN框架中普及的那样,第一阶段生成一组稀疏的候选目标定位,并且第二阶段用一个卷积神经神经网络将每一个候选位置分类为前景类之一或背景。通过一系列改进,这种两阶段的框架在竞赛COCO基准上一直取得最高精度。
尽管两阶段检测器取得了成功,一个自然的问题被提出:一个简单的一阶段检测器能否达到相似的精度?一阶段检测器应用一个规则的、密集的目标位置、尺度和纵横比的采样。最近一阶段检测器的工作,如YOLO和SSD,证明了有希望的结果,产生了更快的检测器,相对于最先进的一阶段方法,能产生10%-40%精度的更快的检测器。

本论文进一步推动该进程:我们提出了一种一阶段目标检测器,首次,达到了更复杂的两阶段检测器的最先进的COCO AP,如FPN或Faster R-CNN的变体Mask R-CNN。为了达到这个结果,我们确定了训练期间的类平衡是主要阻碍一阶段检测器达到最先进精度的障碍,并且提出了一种新型的函数消除这个障碍。

在类R-CNN检测器中通过两阶段级联和采样启发法解决类别不平衡问题。候选框阶段(如Selective Search, EdgeBoxes,DeepMask,RPN)迅速地将候选目标位置的数量降低到来了一个很小的数值,过滤掉了大部分背景样本。在第二个分类阶段,执行采样启发,例如固定前-后景比例(1:3),或者在线困难样本挖掘(OHEM),以保持前景和背景之间的平衡。

对比之下,一阶段检测器必须处理一组更大的候选目标位置,这些位置通过对图像规律的采样得到。在实际中,通常可达100k个位置,这些位置覆盖了空间定位、尺度和纵横比。虽然也可以采用类似的采样启发法,但是它们的效率很低,因为容易分类的背景样本一直主导着训练过程。这种低效在目标检测中是一个经典问题,通常采用如boostrapping或者困难样本挖掘等技术解决。

本文中,我们提出了一个新型的损失函数,相比以前的方法,可以作为一个更有效的替代方法来处理类别不平衡。该损失函数是一个动态缩放的交叉熵损失,当正确类别的置信度增加时,其缩放因子会衰减至0. 从直觉上,这个缩放因子可以自动的减少训练期间容易样本的贡献,并且迅速的将模型集中在困难样本上。实验表明,我们提出的Focal Loss可以训练一个高精度的单阶段检测器,其性能明显超过了采用采样启发式或者困难样本挖掘的替代方法,这些是用来训练单阶段检测器的最新技术。最终,我们注意到focal loss的准确形式并不重要,并且表明了其他形式也可以达到相似的结果。

为了证明所提出的focal loss的有效性,我们设计了一种称为RetinaNet的简单的单阶段目标检测器,它的名字来源于它对一张输入图片进行密集的目标位置采样。它的设计突出了一种高效的内网特征金字塔和锚框的使用。最好的模型基于ResNet-101 FPN主干,在COCO test-dev的AP达到39.1,运行速度为5fps,超过了之前已经发表的最好的单模型(非cascade模型)结果,来自于一阶段或两阶段的检测器。我们强调了我们简单的探测器达到最高结果不是基于网络设计的创新,而是由于我们新型的损失。
图片
类别不平衡:经典的一阶段目标检测方法,像boosted的检测器,和DPM,和更多最近的方法,像SSD,在训练期间都面临巨大的类别不平衡。对于每张图片,这些检测器需要评估10000-100000个候选位置,但是只有一小部分位置包含目标。这种不平衡造成了两个问题:(1)大多数的位置是容易的反例,贡献了无用的学习信号;(2)容易的反例主导整个训练过程,导致模型退化。

鲁棒性评估:人们对设计鲁棒性的损失函数(例如Huber loss)很感兴趣,通过损失函数减少异常值的贡献,即减少较大误差的样本(困难样本)的损失。与此相反,我们的focal loss设计为通过衰减正常值(容易样本)来解决类别不平衡问题,这样,即使他们的数量很大,但是对总损失的贡献很小。换句话说,该损失使模型集中于训练一组稀疏的困难样本。


Focal Loss

将Focal loss设计得可以减少在单阶段的目标检测场景中,训练期间存在极端的前-背景不平衡(例如1:1000)。从二分类的交叉熵损失来引入focal loss(可以很容易的扩展到多类别损失函数中):
图片(一般这样写)
图片
样本类别标签,模型对y估计的类别概率 ,
定义pt
图片
重写:
  图片
图片

标准交叉熵损失可以看做图1中最上面的蓝色曲线。容易分类的样本也会会造成较大量级的损失,当容易样本的数量巨大时,其总损失会压过稀少样本。


平衡的交叉熵


为了解决类别不平衡,一种常用的的方法是引入一个权重因子:类别1的权重,类别-1的权重为1-。在实际中,α可以通过根据反类的频率设置,或者当做一个超参数通过交叉验证设置。为了符号表示方便,定义的权重为,将平衡的交叉熵损失写成:


Focal Loss的定义


为交叉熵损失添加一个修正因子,可调聚焦参数.将focal loss定义为:
图1中可看到时的曲线。
我们注意到Focal Loss的两个特性:(1)当样本分类错误时,很小,修正因子接近1,因此损失不受影响。当时,修正因子趋于0,即容易分类的样本损失受到了衰减。(2)当容易样本的损失受到衰减时,聚焦参数γ的调整率是平滑的。当γ = 0时,Focal Loss等于交叉熵损失,当γ增加时,可调因子同样也增加(我们发现在实验中,γ= 2运行最好)。
直观上,修正因子较少了容易样本的交叉熵损失,并且扩大了样本得到低损失的范围。例如,(γ= 2),时,损失相比CE(交叉熵损失)缩减了100倍,当时,损失相比CE缩减了1000倍, 
当时,损失最多缩减了4倍。
在实际中采用focal loss的以下变体:
图片

在实验中,加了α的形式相比没有α的形式精度得到了轻微的提升。最终,我们注意到,损失层的实现,将计算的sigmoid操作与损失计算相结合,结果是数值上更稳定。

类别平衡和模型初始化

默认初始化的二分类模型对于y=-1或1,都输出相同的概率。在这样的初始化下,由于类别不平衡存在,频繁的类损失主导了总损失,导致训练早期不稳定。为了解决这个问题,在训练开始,我们为模型对稀少类(前景)估计的值引入了一个“先验”概念。我们将这个先验表示为π,并将它设置为如此:模型对稀少类估计的很低,例如0.01。我们注意到:这是模型初始化的变化,而不是损失函数的变化。我们发现,对于交叉熵和focal loss在类别严重不平衡的情况下,这都可以提高训练的稳定性。

类别平衡和两阶段检测器

两阶段检测器通常采用不带α平衡或者我们提出的损失函数。相反,它们解决类别不平衡通过两种机制:(1)两阶段级联;(2)有偏minibatch采样。第一个级联阶段是一种目标候选框机制(Selective search、RPN),该机制将接近无线个可能的目标位置减少到一两。重要的是,所选择的候选框不是随机的,而是可能对应于正确的目标位置,排除了大量的容易负例。当训练第二阶段时,通常用候选框集的有偏采样minibatch,例如,设置正负例比例为1:3。这个比例是一个进行采样时潜在的α平衡因子。我们提出的focal loss设计为:在一阶段检测系统中,直接通过损失函数实现这些机制。

RetinaNet检测器

RetinaNet是一个单一的,统一的网络,由一个主干网络和两个具体任务子网络组成。主干负责计算整个输入图片的卷积特征映射,并且是一个现有的卷积网络(直接在resnet101基础上改造)。第一个子网络对主干的输出进行卷积目标分类;第二个子网络做卷积边界框回归。这两个子网络有一个简单的设计,我们为了这两个子网络能够实现单级密集检测提出了一种简单设计,如图3所示。

特征金字塔网络主干:采用特征金字塔网络(FPN)作为RetinaNet的主干网络。

图片
图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多