Focal Loss for Dense Object Detection

https://arxiv.org/pdf/1708.02002.pdf

Focal Loss for Dense Object Detection

Abstract

目标检测目前最高的准确率是基于两阶段的R-CNN,其分类器被应用于一个稀疏的候选目标位置集合。相比之下,如果将常规的,密集的可能目标位置输入到单一阶段的检测器里可能会使得模型更简洁,训练更快,但是可能准确率会受到一定影响。在本文,我们就将来探究这是为何。我们发现其主要原因是密集检测器在训练时所遭遇的前景-背景类数量的极度不平衡问题。我们计划通过重构标准交叉熵损失函数,如降低易分类样本loss的权值,来解决这种类不平衡问题。我们新提出的Focal Loss着眼于在难例的稀疏集上进行训练,然后避免在训练时大量的easy negatives将整个检测器淹没。为了评估我们的loss的有效性,我们设计和训练了一个简单的密集检测器叫做RetinaNet。我们结果表明当使用focal loss进行训练时,RetinaNet可以媲美之前单阶段的检测器的速度并且同时准确率会超过现有的两阶段的检测器。

1. Introduction

现有的最好的目标检测器是基于两阶段的和预测框驱使的机制。如流行的R-CNN结构,第一个stage生成一个稀疏的候选目标框位置,第二阶段使用CNN对每个候选框进行前景或背景的分类。经过一系列的发展,这个两阶段的结构不断的刷新着记录。
既然两阶段的检测器取得了这样的成功,那么很自然的我们会问:简单的one-stage检测器可以获得相似的准确率吗?One stage检测器可以被应用于常规的,密集的多尺度,多纵横比的目标位置样本。近期的one-stage检测器,如YOLO和SSD,都展示出了很有希望的结果,在准确率低10~40%的情况下比two-stage要更快。
本文更是推进了更多,得到了一个可以媲美更加复杂的two-stage检测器的one-stage检测器,如FPN,Mask R-CNN以及一系列Faster R-CNN的变体。为了得到这一结果,我们确认了在训练时的类不平衡问题是阻止one-stage检测器达到state-of-the-art准确率的主要障碍,因此我们提出一种新的损失函数来消除这个障碍。
类不平衡已经在类似R-CNN的探测器中通过两阶段级联和启发式采样解决了。区域候选阶段(如SS,EdgeBoxes,DeepMask,RPN)迅速地将候选目标区域减小到了一个很小的数量(如1-2k),几乎过滤了所有的背景样本。在接下来的分类阶段,启发式采样,如固定前后景比例(1:3)或者在线难例挖掘(OHEM),都对前后景样本维持了一个平衡。
相反,单阶段检测器必须处理一个均匀采样于图像的超大的候选目标区域集合。实际中,这个集合会到达100k的一个数量,密集的覆盖空间位置,尺度和纵横比。当应用类似的启发式采样算法时,它们仍然是低效的,因为训练过程总是被简单的背景样本所支配。这样的低效率是目标检测中的一个经典问题,通常是通过bootstrapping和难例挖掘来解决。
在本文,我们提出一个新的损失函数来更高效的代替之前的方法来解决类不平衡问题。这个损失函数能够动态的缩放交叉熵loss,当正确类的置信率增加,它对应的尺度因子会逐渐衰减到0,如图1。直观上,尺度因子会自动地在训练时减少简单例子对loss的贡献,然后迅速地着眼于难例。实验显示,我们提出的Focal Loss能够帮助我们训练出高准确率,单阶段的检测器,并且很明显地优于之前的训练单阶段检测器的策略,使用启发式采样算法或难例挖掘。最后,我们发现focal loss的形式不一定唯一,其他的形式也可以得到相似的效果。

这里写图片描述
图1. 我们提出一种新的损失函数Focal loss,在标准的交叉熵上添加一个 ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ。设置 γ > 0 \gamma>0 γ>0来减小好分类样本( p t > 0.5 p_t>0.5 pt>0.5)的相对loss,更多的着眼于难例。就像我们的实验阐述的,这个focal loss能够在大量简单背景样本存在的情况下,训练出高准确率的密集目标检测器。

为了阐明focal loss的有效性,我们设计了简单的单阶段检测器RetinaNet,取名源于它对输入图像的目标位置的密集采样。它的设计特点在于有效的网络内特征金字塔和anchor框的使用。RetinaNet是高效并且准确的,在COCO test-dev 上达到了 39.1的AP,速度为5fps,超过了之前最好的单一模型的结果不论是one-stage还是two-stage。

2. Related Work

Classic Object Detectors: 滑动窗口模式,将分类器应用到一个密集的图像网格中,有很长很丰富的历史。最早的成功来自于LeCun,利用CNN完成手写数字识别。然后是Viola和Jones使用boosted目标检测器进行人脸识别,使得这一模型被广泛的散播出去。HOG和积分通道特征的出现使得对于行人检测有了有效的方法。DPMs帮助密集检测器能够适用于更加广泛的目标类别,并且在PASCAL上取得了很好的成绩。滑动窗口方法是经典计算机视觉中最为主要的检测模式,但是随着深度学习的复苏,two-stage检测器很快的支配了目标检测领域。

Two-stage Detectors: 目前物体检测的主导模式是基于two-stage的方法。以SS为例,第一阶段生成一个稀疏的候选区域集合,这个集合包含所有的目标并且同时还滤除绝大部分的负位置(也就是背景),然后第二阶段对候选区域进行前景类别/背景的分类。R-CNN将第二阶段的分类器升级为一个卷积网络这样极大的提高了准确率从而引领了现代目标检测领域。R-CNN在近些年得到了提升不论是速度还是使用经过学习的候选目标区域。RPN将第二阶段分类器和候选区域生成器整合到了一个单一的卷积网络中,形成了Faster R-CNN框架。大量的基于Faster R-CNN的变体被提出。

One-stage Detectors: OverFeat是现代第一个基于深度网络的one-stage目标检测器。更近的SSD和YOLO使得人们从新提起了对one-stage方法的兴趣。这些检测器速度更快但是准确率比two-stage方法要低。SSD相比低了10~20%,而YOLO着重于得到一个更加极端的速度/准确率的平衡。近期的发现表明two-stage检测器可以简单得通过降低输入图像分辨率和候选框数量来加速,但是one-stage方法即使在更大的计算预算上也依然不能取得很好的准确率。相比之下,本文的目标就在于去理解是否one-stage检测器可以在取得甚至超越two-stage准确率的情况下还能跑的更快。
我们的RetinaNet检测器的设计与之前的密集检测器有很多相似点,尤其是RPN引入的anchors的理念以及SSD和FPN使用的特征金字塔。我们强调我们的检测器能够得到如此好的结果并不是基于网络设计的创新,而是基于我们新的损失函数。

Class Imbalance: 不管是经典的one-stage目标分类方法,像boosted检测器和DPMs,还是最近的方法,像SSD都面对这一个问题,那就是训练时的很大的类不平衡问题。这些检测器对于每张图像要评估 1 0 4 − 1 0 5 10^4-10^5 104105的候选位置,但是仅有很少量的位置是有物体的。这样的不平衡造成了两个问题:(1)训练很低效,因为很多位置都是easy negatives对学习并没有帮助;(2)总体来看,easy negatives会淹没整个训练使得模型退化。一个普遍的解决方式进行一定形式的难例挖掘,也就是在训练时进行难例采样或者使用更复杂的采样/修改权值策略。相比之下,我们的focal loss自然的解决了这个类不平衡问题,并且使得我们能够在所有样本存在的情况下进行有效学习,不需要进行采样,easy negatives也不会淹没我们的loss和梯度。

Robust Estimation: 人们一直对设计鲁棒的损失函数很感兴趣(如Huber loss),通过减少难例的loss的权值来减少异常值的贡献。相比之下,我们不是处理这些异常值,我们的focal loss是设计来通过降低简单例子的权值来解决类不平衡问题,这样即使简单例子的数量大他们对于总loss的贡献依然很小。换句话说,focal loss与鲁棒loss完全相反:它着眼于在难例这一稀疏集上进行训练。

3. Focal Loss

Focal Loss是设计来解决one-stage目标检测里训练时有着极端的前后景样本不平衡的场景的(如1:1000)。我们从二分类的交叉熵(CE)loss来引入focal loss:
(1) C E ( p , y ) = { − log ⁡ ( p ) if  y = 1 − log ⁡ ( 1 − p ) otherwise. CE(p,y) = \begin{cases} -\log(p) & \text{if $y=1$} \\ -\log(1-p) & \text{otherwise.} \tag 1 \end{cases} CE(p,y)={ log(p)log(1p)if y=1otherwise.(1)
在上面方程中 y ∈ { ± 1 } y\in \{\pm1\} y{ ±1}来指定gt类,然后 p ∈ [ 0 , 1 ] p\in[0,1] p[0,1]是模型预测标签 y = 1 y=1 y=1的概率。为了标识方便,我们定义 p t p_t pt
(2) p t = { p if  y = 1 1 − p otherwise, p_t = \begin{cases} p & \text{if $y=1$} \\ 1-p & \text{otherwise,} \tag 2 \end{cases} pt=

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值