本文最后更新于:2020年9月28日 上午

Abstract

Two- Stage :sparse

One-stage:dense(更快,更简单,但精度落后于Two-Stage,极端前景背景类别失衡是主要原因)

FocalLoss在稀疏的hard examples上训练,避免大量easy negatives在训练时淹没检测器

通过reshape标准交叉熵损失,降低已经很好被分类的样本的损失,从而解决类不平衡问题。

设计和训练了一个简单的稠密检测器:RetinaNet,达到先前One-stage检测器的速度,并且超过最先进的two-stage检测器的精度。

1.Introduction

Two-stage(proposal-driven 机制)例如RCNN框架,第一步生成一个稀疏的候选目标位置集合,第二步使用卷积神经网络将每个候选位置分为前景的类别之一或背景。通过一系列改进,two-stage达到了最佳精度。

One-stage检测器对目标位置、尺寸、长宽比进行有规律的、密集的采样(例如YOLO、SSD)相对于最先进的two-stage检测器提升了10-40%的精度。

本文提出了一个可与最先进two-stage检测器的精度匹配的One-Stage检测器。为了实现该结果,作者将训练过程中的类不平衡问题看作主要障碍,并提出了一个新的损失函数来消除该障碍。

类不平衡问题在像RCNN一样的检测器中通过两步级联和抽样启发被解决。

Two-stage:

Proposal Stage:Selective Search、EdgeBoxes、DeepMask、RPN

​ 快速的缩小候选目标位置的数量到一个很小的值(1-2k),并且滤除大部分背景样本

Second分类步骤:执行启发式采样,例如固定前景和背景的比例(1:3)或者online hard example mining(OHEM),以在前景和背景之间维持一个可管理的平衡。

One-stage:

必须处理在图像中定期采样的大量候选目标位置。在实践中意味着枚举100k个位置,密集的覆盖空间位置、尺度和长宽比。类似的启发采样是低效的,因为训练步骤容易被已分类的背景样本所主导。这些低效率是目标检测中的一个经典问题,通常通过bootstrapping或hard example mining解决。

本文提出了一个新的损失函数,更高效的替代之前处理类不平衡问题的方法。损失函数是动态缩放交叉熵损失,当对正确类的信心增加时,比例因子衰减为0。直观的说,这个比例因子能自动降低简单例的贡献权重,快速的将模型集中在难例上。Focal损失的具体形式不重要,其他实例也能实现相似的结果。

为了证明所提出的focal loss的有效性,我们设计了一个简单的one-stage检测器RetinaNet,由它对输入图片的目标位置进行密集采样命名。它的设计特点是一个高效的网络特征金字塔和使用锚框。

2.Related Work

经典的目标检测器:滑动窗口 boosted object HOG DPMs

Two-stage检测器:
  • First stage:生成稀疏的候选proposal集合,应当包含所有目标同时滤除主要的negative位置
  • Second-stage:将proposal分类为前景或背景。(R-CNN将Second-stage分类器升级到卷积神经网络)【区域建议网络RPN将生成proposal和Second-stage分类器 整合为单个卷积神经网络,形成Faster R-CNN的框架】
One-stage检测器:

OverFeat第一个现代的基于深度网络的one-stage的检测器。SSD和YOLO更新了One-stage方法,他们的速度可以,但精度不如two-stage方法。

RetinaNet检测器的设计与以前的密集检测器有许多相似之处,特别是RPN引入的“锚”的概念,以及SSD和FPN[中引入的特征金字塔的使用。特别强调:我们简单检测器实现最高的结果不是基于网络设计的创新,而是由于所提出的Focal Loss。

类不平衡:

Boosted detectors、DPMs、SSD面临较大的类不平衡,检测器对每张图片评估104-105个候选位置,但只有少数位置包含物体。

类不平衡导致两个问题:

  1. 训练效率低,大多数位置是easy negative ,没有贡献有用的学习信号
  2. Easy negative能淹没训练,导致模型退化。

一个常见的解决方案是执行某种形式的硬负挖掘[33,37,8,31,22],在训练中采样硬例子或更复杂的采样/重新分配权重方案[2]。相比之下,我们证明了我们所提出的focal loss自然地处理了one-stage检测器所面临的类不平衡,并允许我们高效地训练所有的例子,而不需要采样,不需要担心easy negatives淹没损失和计算梯度。

鲁棒估计:

人们对设计鲁棒损失函数很感兴趣,例如Huberloss,通过降低有很大错误的样本的损失,来减少异常值outliers(hard examples)的贡献。相比之下,我们的focal loss没有解决异常值(outliers),而是降低inliers(easy examples)的权重,这样即使他们的数量很大,他们对总损失的贡献也很小。换句话说,focal loss扮演了与robust loss对立的角色,它关注在稀疏的hard examples上的训练。

3.Focal Loss

Focal Loss被用来解决one-stage检测方案中训练时前景和背景极端不平衡的问题。从二分类的交叉熵(CE)损失来介绍Focal Loss,

image-20200924182142381

y=±1指定ground-truth类,p∈[0,1]是模型对于类标签y=1的概率。

image-20200924183857022

CE损失在图1中用蓝线画出,一个值得注意的性质是:即使样本已经被很容易的分类(p>>0.5),CE损失依然很大。当把大量easy样本加和起来,这些小的损失能淹没稀有的类别。

image-20200924184020821

3.1 平衡的交叉熵

解决类不平衡的一种常用方法是对类1引入权重因子α。在实际应用中,α可采用逆类频率设置,也可作为交叉验证设置的超参数。

image-20200924185352955

这种损失是CE的简单扩展,我们将其作为我们提出的Focal损失的实验基线。

3.2 Focal Loss 定义

正如实验将显示的那样,在密集检测器的训练过程中 遇到的较大的类不平衡压倒了交叉熵损失。容易被分类的负样本构成了大部分损失,并支配着梯度。尽管α平衡了正负样本的重要性,但他没有区分easy/hard样本。我们重构了loss function来降低easy样本的权重,关注hard negative的训练。

image-20200924192231368

性质1:当一个样本被误分类并且概率很低,调制因子趋近于1,损失不受影响。当概率趋近于1,因子趋近于0,这样就降低了已经被良好分类的样本的损失占比。

性质2:聚焦参数γ平滑的调整easy样本的权重降低率。当γ=0时 FL=CE,随着γ的增加调制因子的影响也最值增加。(我们发现γ=2在实验中效果最佳)。

直观的说,调制因子减少了easy样本的损失贡献,并且扩展了损失较低样本的范围。例如当γ=2,一个样本被分类的概率为0.9,FL损失比CE损失低100倍,当概率增加到0.968,损失低了1000倍。这反过来增加了校正误分类样本的重要性。(它的损失降低了4倍,当概率<0.5,γ=2)

在实验中,使用一个FL的α-balanced变体:

image-20200924200258905

我们在实验中采用这种形式,因为他比不适用α-balanced形式产生了轻微的精度提高。最后,我们注意到损失层的实现将计算p的sigmoid操作与损失计算相结合,从而获得更大的数值稳定性。

3.3 类不平衡和模型初始化

二分类通常默认初始化为相同的输出概率(y=-1or1)。在这这样的初始化条件下,在类不平衡的情况下,由于频繁类别的损失会主导整个损失,造成训练早期的不稳定。为了解决这个问题,我们引入了一个先验概念,用于在训练开始时模型对稀有类(前景)估计的p值。我们用pi表示先验值,并设置它,以便模型对稀有类示例的估计p很低,例如0.01。我们注意到,这是模型初始化的变化(见§4.1),而不是损失函数的变化。我们发现,在严重的类不平衡情况下,这可以提高交叉熵和FL损失的训练稳定性。

3.4 类不平衡和Two-stage检测器

Two-stage检测器经常使用交叉熵损失训练,而不用α-balanced或者我们提出的FL。相反,他们解决类不平衡问题通过两种机制:(1).两步级联 (2).偏置小批采样。第一个级联步骤是一个目标提议机制,将几乎无限目标可能位置集合减小到1000-2000。重要的是,被选择的proposals并不是随机的,而是可能与真实的目标位置相对应,从而消除大多数easy negatives。在训练第二阶段时,通常使用偏置抽样来构建minibatches,包含例如1:3的正例与负例。这个比率就像一个通过采样实现的隐式α平衡因子。我们提出的FocalLoss是用来在one-stage检测系统中通过损失函数解决这些机制。

4. RetinaNet Detector

RetinaNet是一个单一的、统一的网络,由一个基石网络和两个特定任务的子网络组成。基石网络负责在整个输入图像上计算卷积特征图,并且它不是一个自卷积神经网络。第一个子网络在基石网络的输出上做卷积目标分类,第二个子网络执行卷积边框回归。

特征金字塔基石

采用FPN作为RetinaNet的基石网络,FPN使用自顶向下的路径和侧面连接扩展了一个标准的卷积神经网络,这样网络可以从单分辨率输入图像高效的构建一个rich、多尺度的特征金字塔。金字塔的每一个等级被用来检测不同尺度的目标。FPN从FCN提高了多尺度预测。在ResNet的顶部建立FPN结构。

Anchors

与RPN网络类似,也使用anchors来产生proposals。特征金字塔的每层对应一个anchor面积,为了产生更加密集的coverage,增加了三个面积比例 {20,21/2,22/3}(即使用当前anchor对应的面积分别乘以相应的比例,形成三个尺度),然后anchors的长宽比仍为{1:2,1:1,2:1} ,因此特征金字塔的每一层对应A = 9种Anchors。

我们使用和RPN变体相似的平移不变的Anchor boxes,在每一个金字塔等级有9个Anchors。每个Anchors有一个长度为K的one-hot向量(作为分类信息),和4个边界框回归目标向量。0.5的IoU阈值的Anchors被分配到ground-truth目标框,[0,0.4)的IoU被分配到背景。每个Anchor最多被分配到一个目标框,并且把长度为K的标签向量的相对应的位置设为1,其他为0 。如果一个Ancho没有被分配,它或许在[0.4,0.5)之间发生了重叠,我们在训练期间忽略它。每个Anchor和被分配的目标框之间的偏移被计算为边界框回归目标。

分类子网络

分类子网络预测了A个Anchors和K个目标类别在每个空间位置存在的概率。该子网络的参数与所有级别的金字塔共享。从金字塔等级输入的特征图有C个通道,子网络应用3x3的卷积层,C个过滤器跟着一个ReLU激活函数,后面跟着一个有KA个滤波器的3x3的卷积层。最终每个空间位置输出KA个二进制的预测,后接Sigmoid激活。

与RPN相比,我们的目标分类子网络更深,仅使用3x3的卷积,没有与边界框回归子网络共享参数。

边界框回归子网络

与目标分类子网络平行,我们为每一个金字塔层级增加了另一个小的FCN,来回归每个anchorBox和附近的ground-truth的偏移。除了在结束时每个空间位置改为输出一个4A个线性输出,其他的设计和边界框回归子网络完全一致。我们使用类怀疑边界框回归器,使用更少的参数,同样高效。

4.1推理和训练

推理

RetinaNet形成了一个由ResNet-FPN作为基石的简单的FCN网络,包括分类子网络、边界框回归子网络。因此,推理只涉及在网络上传播一张图片。为了提高速度,我们只对每个FPN层上分数最高的1k个预测解码边界框预测(在阈值检测置信度为0.05之后)。将所有层级的顶部预测合并,执行阈值为0.5的非极大值抑制,产生最终的检测。

Focal Loss

采用FocalLoss作为分类子网络输出的损失。γ=2效果比较好,γ=[0.5,5]时RetinaNet相对鲁棒。在训练RetinaNet时,FocalLoss被应用于每个被采样的图片中所有(大约100k个)anchors上。这与使用启发式抽样(RPN)或硬实例挖掘(OHEM, SSD)为每个mini选择一小组Anchors(例如,256)的常见做法形成了对比。整张图片的focalloss是所有大约100k个anchors 的focalloss的总和。被已分配ground-truth box的anchors的数量正规化(不是所有anchors)因为绝大多数的anchors是easy negatives,损失在focal loss下可忽略不计。最后我们注意到,被分类给稀有类别的α权重也有一个稳定的范围,他与γ相互作用,两者必须同时选择。通常α应该被轻微减小,γ应该被增加。(γ=2,α=0.25时最佳)

5.实验

6.结论

本文将类不平衡看作阻止one-stage目标检测器超过two-stage方法表现的主要障碍。为了解决这个问题,我们提出了focal loss,他对交叉熵损失应用了一个可调制的项,使得学习过程更关注hard negative样本。我们的方法简单高效。我们设计了一个全卷积one-stage检测器,报告大量实验分析,证明它的效果。表明他实现了最先进的速度和精度。