Focal Loss简述

引言

  本文进一步提高了one-stage检测器的性能,设计出了一个one-stage目标检测器,并首次达到了更复杂的two-stage检测器所能实现的最高COCO平均精度,例如FPN(特征金字塔网络,Feature Pyramid Network) 或 Mask R-CNN(Faster R-CNN的变体),本文发现训练过程中的类别不平衡是阻碍one-stage检测器实现这个结果的主要障碍,并提出了一种新的损失函数来消除这个障碍。
  R-CNN 检测器通过两阶段的级联(cascade)和启发式采样(sampling heuristics)解决类别不平衡问题。Proposal 阶段(如Selective Search、EdgeBoxes、DeepMask和RPN)可以快速地将候选目标位置的数目缩至更小(例如1000-2000),过滤掉大多数背景样本。在接下来的分类阶段中,应用启发式抽样法(sampling heuristics),例如一个固定的前景样本背景样本比(1:3),或者在线困难样本挖掘法(online hard example mining),在foreground样本和background样本之间维持可控的平衡。相反,one-stage检测器则必须处理一个由图像中规则分布的候选目标位置组成的大样本集。在实践中,目标位置的总数目通常可达10万左右,并且密集覆盖空间位置、尺度和长宽比。虽然还可以应用类似的抽样启发法,但是这些方法在易分类的背景样本支配训练过程的情况下依然会失效。这种失效是目标识别中的一个典型问题,通常使用 bootstrapping或困难样本挖掘来解决。
  在本文中,提出了一个新的损失函数Focal Loss,它可以替代以往用于解决类别失衡问题的方法,这个损失函数是一个动态缩放的交叉熵损失函数,随着正确分类的置信度增加,函数中的比例因子缩减至零,见图1。
Focal Loss简述_第1张图片
  在训练过程中,这个比例因子可以自动地减小简单样本的影响,并快速地将模型集中在困难样本上。试验证明,Focal Loss函数可以帮助训练出准确度很高的one-stage检测器,并且在性能上超越使用抽样启发法或困难样本挖掘法等以往优秀方法训练出的one-stage检测器。
  为了证明这个Focal Loss函数的有效性,本文还设计了一个简单的one-stage目标检测器—RetinaNet,它会对输入图像中目标位置进行密集抽样。效果如图2所示。
Focal Loss简述_第2张图片

相关工作

  Class Imbalance:像SSD这样的经典一阶段检测器在训练中都面临类别不平衡问题。通常对每张候选图会产生104-105个候选框,但只有极少数内存在物体。这种类不平衡导致两个问题:
  ①绝大多数候选框定位是简单负样本,贡献了无用的学习信号,对它们的训练是无效的,因此训练效果低下。
  ②简单负样本过多会使得模型变得更差。
  常见的解决方案是进行困难样本挖掘,而本文的方案是提出Focal loss,自然地处理了一阶段检测器所面临的类别不平衡,并允许在没有采样的情况下有效地训练所有样本。
  Robust Estimation:人们对设计鲁棒损失函数(如Huber损失(《The elements of statistical learning》))非常感兴趣,这些函数通过降低难样本的loss权重来降低离散值的对网络的贡献。相反,Focal loss通过降低inliers(简单样本)的权重来解决类不平衡问题,使得即使它们的数量很大,它们对总损失的贡献也很小。换句话说,Focal loss与稳健损失起着相反的作用:它将训练集中在一组稀疏的难样本上。

方法

  原本交叉熵损失函数表示为:
在这里插入图片描述
  为了简化,定义 p t p_t pt为:
在这里插入图片描述
  公式简化为:
在这里插入图片描述
  对于普通的CE loss,由于负样本数量巨大,正样本很少,所以负样本被错分为正样本的loss会占据loss的主导。那么好的做法就是,尽量减少负样本loss所占的比例,或者增大正样本被错分为负样本的loss所占的比例。图1展示了损失函数值随γ的变化曲线,对于背景区域,分类器有非常大置信度认为它是背景,所以背景区域属于上图中的well-classified examples。当γ为0时,这个区域损失函数值比较大,而随着γ增大,这个区域损失函数值逐渐减小,也就说明随着γ值变大,背景区域的损失函数占总体损失函数的比例在下降,模型能够更加注意对损失函数的优化有意义的样本。
Focal Loss简述_第3张图片

  首先要让正负样本所占的比例均衡,本文直接在CE loss前面乘以一个参数α,这样可以方便控制正负样本loss所占的比例,
在这里插入图片描述
  然而,尽管这样做可以做可以起到一些作用,如果分类的结果接近正确,比如正样本以0.9的概率被分为正样本,但是0.9和1之间也是有loss的,这部分loss也会因为前面乘了一个α被放大,这属实没必要,因此认为被分类的足够好的样本loss不需要太大的α权重,而被错分严重的,比如预测概率小于0.5的正样本,我们需要将他的loss放大,错分越严重loss应该被放大的越多,因此可以用下面的指数函数来实现,也就是本文提出的Focal loss。在这里插入图片描述
  在实验中,采用如下的形式:
在这里插入图片描述
  论文还提出了one-stage检测器RetinaNet,由骨干网络和两个特定任务子网组成,骨干负责计算整个输入图像上的卷积特征映射,并且是一种通用(off-the-shelf)的卷积网络,第一个子网在骨干的输出上执行卷积对象分类;第二个子网执行卷积BBox回归。网络结构如图3所示:
Focal Loss简述_第4张图片
  骨干网络是由ResNet和特征金字塔网络(FPN)组成,第一个子网class subnet先用4个C通道33的卷积核卷积+relu激活,然后用KA个通道的33的卷积核卷积,用sigmoid来激活最后一层,对每个特征层进行类别预测。KA是K种类别A个anchor的预测结果,实验中设置C = 256,A = 9。
  第二个子网box subnet也差不多,后面接着FCN,以便从每个anchor到附近的真实物体(如果存在)进行回归,最后一层通道数是4A。class subnet和box subnet共享结构,参数独立。

实验

  对RetinaNet和Focal Loss的消融实验如表1所示
Focal Loss简述_第5张图片
  与COCO上的SOTA方法比较如表2所示:
Focal Loss简述_第6张图片

总结

  单阶段的很多检测方法在精度上会被二阶段的方法领先很多,作者就以此为出发点,研究单阶段方法的精度差的原因,作者认为是因为单阶段检测器中样本的失衡,负样本比例远远大于正样本,占据样本中多数,我刚开始看到作者描述大量的anchor覆盖到了背景上,然后目标只占很小一部分的时候,寻思只要是基于anchor的都会这样吧,然后细想,二阶段也不是没有这种问题,只是它第一个阶段就是会删除很多覆盖背景的anchor也就是负样本,所以第二阶段就保证了正负样本不会严重失衡。然后本文就提出了Focal loss方法来解决不平衡问题,思路很清晰,就是在原有的分类损失函数上,加上权重因子,减小易区分样本的权重,加大难区分样本的权重,相比之下,提出的RetinaNet就没什么特殊的,就是使用ResNet+FPN作为骨干网络,再利用Focal loss作为损失函数。

你可能感兴趣的:(计算机视觉)