【CV】RetinaNet:使用二分类类别不平衡损失 Focal Loss 实现更好的目标检测

论文名称:Focal Loss for Dense Object Detection
论文下载:https://arxiv.org/abs/1610.02357
论文年份:ICCV 2017
论文被引:13045(2022/05/10)
论文代码:https://github.com/facebookresearch/Detectron

论文总结

RetinaNet 的设计基于 RPN 提出的 anchor 以及 SSD 和 FPN 中使用的特征金字塔。其性能的提升是由新提出的 Focal Loss 实现的,而非网络架构。Focal Loss 旨在解决单阶段目标检测场景,其中在训练期间前景和背景类别之间存在极端不平衡(例如,1:1000)。容易分类的负数构成了损失的大部分,并主导了梯度。为了更好地区分简单样本和困难样本,Focal Loss 通过引入调制因子,使得其可以有效地降低易负例的影响,将所有注意力集中在难负例上。直观地说,调制因子减少了简单示例的损失贡献,并扩展了示例接收低损失的范围。

现在这个损失函数已经广泛用于二分类的类别不平衡问题,例如推荐场景下的CTR预估(正负样本比1:1000)以及广告场景下的CVR(正负样本比1:10000),LTV预估(正负样本数量相差更大),这些都是经典的二分类不平衡问题。

RetinaNet 是一个单一的,统一的网络,由一个主干网络和两个特定任务的子网络组成。主干负责计算整个输入图像的卷积特征图。第一个子网对主干的输出进行卷积对象分类;第二个子网执行卷积边界框回归。

Abstract

The highest accuracy object detectors to date are based on a two-stage approach popularized by R-CNN, where a classifier is applied to a sparse set of candidate object locations. In contrast, one-stage detectors that are applied over a regular , dense sampling of possible object locations have the potential to be faster and simpler , but have trailed the accuracy of two-stage detectors thus far . In this paper , we investigate why this is the case. We discover that the extreme foreground-background class imbalance encountered during training of dense detectors is the central cause. We propose to address this class imbalance by reshaping the standard cross entropy loss such that it down-weights the loss assigned to well-classified examples. Our novel Focal Loss focuses training on a sparse set of hard examples and prevents the vast number of easy negatives from overwhelming the detector during training. To evaluate the effectiveness of our loss, we design and train a simple dense detector we call RetinaNet. Our results show that when trained with the focal loss, RetinaNet is able to match the speed of previous one-stage detectors while surpassing the accuracy of all existing state-of-the-art two-stage detectors.

迄今为止,精度最高的目标检测器基于 R-CNN 推广的两阶段方法,其中分类器应用于一组稀疏的候选目标位置。相比之下,应用于可能目标位置的常规密集采样的单阶段检测器有可能更快、更简单,但迄今为止的准确性落后于两阶段检测器。在本文中,我们调查了为什么会出现这种情况。我们发现,在密集检测器训练过程中遇到的极端前景-背景类别不平衡是主要原因。我们建议通过重塑标准交叉熵损失来解决此类不平衡问题,从而降低分配给分类良好示例的损失的权重。我们新颖的 Focal Loss 将训练集中在一组稀疏的困难示例上,并防止大量简单的负样本在训练期间压倒检测器。为了评估损失的有效性,我们设计并训练了一个简单的密集检测器,我们称之为 RetinaNet。我们的结果表明,当使用焦点损失进行训练时,RetinaNet 能够与之前的单阶段检测器的速度相匹配,同时超过所有现有最先进的两阶段检测器的准确度

1. Introduction

当前最先进的目标检测器基于两阶段的提议驱动(proposal-driven)机制。正如 R-CNN 框架 [11] 中所推广的那样,第一阶段生成一组稀疏的候选目标位置,第二阶段使用卷积神经网络将每个候选位置分类为前景类或背景。通过一系列的进步 [10, 28, 20, 14],这个两阶段框架在具有挑战性的 COCO 基准 [21] 上始终保持最高准确度。

尽管两阶段检测器取得了成功,一个自然的问题是:一个简单的单阶段检测器能否达到类似的精度?单阶段检测器应用于目标位置、尺度和纵横比的常规密集采样。最近关于单阶段检测器的工作,例如 YOLO [26, 27] 和 SSD [22, 9],展示了有希望的结果,相对于最先进的两阶段方法,产生了更快的检测器,精度在 1040% 以内。

本文进一步推动了这个领域:我们提出了一个单阶段目标检测器,它首次与更复杂的两阶段检测器的最先进的 COCO AP 相匹配,例如特征金字塔网络(FPN)[20 ] 或 Mask R-CNN [14] Faster R-CNN [28] 的变体。为了实现这一结果,我们将训练期间的类别不平衡确定为阻碍单阶段检测器达到最先进精度的主要障碍,并提出了一种新的损失函数来消除这一障碍

在类似 R-CNN 的检测器中,类不平衡通过两阶段级联和采样启发式来解决提议阶段(例如,Selective Search [35]、EdgeBoxes [39]、DeepMask [24, 25]、RPN [28])迅速将候选目标位置的数量缩小到少量(例如,1-2k),过滤掉大多数背景样本。在第二个分类阶段,执行采样启发式,例如固定的前景与背景比率 (1:3),或在线硬示例挖掘 (OHEM) [31],以保持前景和背景之间的可管理平衡

相比之下,单阶段检测器必须处理在图像上定期采样的更大的候选目标位置集。在实践中,这通常相当于枚举密集覆盖空间位置、比例和纵横比的 10 万个位置。虽然也可以应用类似的采样启发式方法,但它们效率低下,因为训练过程仍然由易于分类的背景示例主导。这种低效率是目标检测中的一个经典问题,通常通过诸如引导 [33, 29] 或硬示例挖掘(hard example mining) [37, 8, 31] 等技术来解决

扫描二维码关注公众号,回复: 14216538 查看本文章

在本文中,我们提出了一种新的损失函数,它可以作为以前处理类不平衡的方法的更有效替代方法。损失函数是一个动态缩放的交叉熵损失,其中缩放因子随着对正确类的置信度的增加而衰减为零,见图 1。直观地说,这个缩放因子可以在训练期间自动降低简单示例的贡献并快速集中注意力困难例子的模型。实验表明,我们提出的 Focal Loss 使我们能够训练一个高精度的单阶段检测器,该检测器的性能明显优于使用采样启发式或硬示例挖掘的训练替代方案,这是以前用于训练单阶段的最先进技术探测器。最后,我们注意到焦点损失的确切形式并不重要,我们展示了其他实例可以达到类似的结果。

为了证明所提出的焦点损失的有效性,我们设计了一个简单的单阶段目标检测器,称为 RetinaNet,以其对输入图像中目标位置的密集采样而命名。它的设计具有高效的网络内特征金字塔和锚点的使用。它借鉴了 [22, 6, 28, 20] 中的各种最新想法。 RetinaNet 高效准确;我们最好的模型基于 ResNet-101FPN 骨干网,在以 5 fps 运行时实现了 39.1 的 COCO 测试开发 AP,超过了之前发布的来自单阶段和两阶段检测器的最佳单模型结果,见图 2。

2. Related Work

经典目标检测器:滑动窗口范式,其中分类器应用于密集的图像网格,具有悠久而丰富的历史。最早的成功之一是 LeCun 等人的经典作品。谁将卷积神经网络应用于手写数字识别 [19, 36]。 Viola 和 Jones [37] 使用增强型目标检测器进行人脸检测,从而导致此类模型的广泛采用。 HOG [4] 和积分通道特征 [5] 的引入产生了行人检测的有效方法。 DPM [8] 帮助将密集检测器扩展到更一般的目标类别,并且多年来在 PASCAL [7] 上取得了最佳结果。虽然滑动窗口方法是经典计算机视觉中领先的检测范式,但随着深度学习 [18] 的复兴,接下来描述的两阶段检测器迅速主导了目标检测。

两阶段检测器:现代物体检测的主要范式基于两阶段方法。正如在选择性搜索工作 [35] 中所开创的那样,第一阶段生成一组稀疏的候选提议,这些候选提议应该包含所有目标,同时过滤掉大部分负面位置,第二阶段将提议分类为前景类/背景。 R-CNN [11] 将第二阶段分类器升级为卷积网络,大大提高了准确性,并开启了现代目标检测时代。多年来,R-CNN 在速度 [15, 10] 和使用学习目标提议 [6, 24, 28] 方面都得到了改进。区域建议网络(RPN)将建议生成与第二阶段分类器集成到单个卷积网络中,形成更快的 RCNN 框架 [28]。已经提出了对该框架的许多扩展,例如[20、31、32、16、14]。

一阶段检测器:OverFeat [30] 是第一个基于深度网络的现代单阶段目标检测器。最近 SSD [22, 9] 和 YOLO [26, 27] 对单阶段方法重新产生了兴趣。这些检测器已针对速度进行了调整,但其准确性落后于两阶段方法。 SSD 的 AP 降低了 10-20%,而 YOLO 则专注于更极端的速度/准确性权衡。参见图 2。最近的工作表明,只需降低输入图像分辨率和提议的数量,就可以快速提高两阶段检测器的速度,但即使在计算预算较大的情况下,单阶段方法的准确性也会落后 [17]。相比之下,这项工作的目的是了解单阶段检测器在以相似或更快的速度运行时是否可以匹配或超过两阶段检测器的精度。

我们的 RetinaNet 检测器的设计与之前的密集检测器有许多相似之处,特别是 RPN [28] 引入的“锚点 (anchors)”概念以及 SSD [22] 和 FPN [20] 中特征金字塔的使用。我们强调,我们的简单检测器获得最佳结果不是基于网络设计的创新,而是由于我们的新损失

类别不平衡:经典的单阶段目标检测方法,如增强检测器 [37、5] 和 DPM [8],以及最近的方法,如 SSD [22],在训练期间都面临着大的类不平衡。这些检测器评估每张图像的 104105 个候选位置,但只有少数位置包含目标。这种不平衡导致了两个问题

  • 1)训练效率低下,因为大多数位置都是简单的负样本,没有提供有用的学习信号

  • 2)整体而言,简单的负数会压倒训练并导致退化模型

一个常见的解决方案是执行某种形式的硬负挖掘 [33、37、8、31、22],在训练或更复杂的采样/重新加权方案 [2] 期间对硬示例进行采样。相比之下,我们表明,我们提出的焦点损失(focal loss)自然地处理了单阶段检测器面临的类别不平衡,并允许有效地训练所有示例,而无需采样,也不会出现压倒损失和计算梯度的简单负数。

鲁棒估计:人们对设计稳健的损失函数(例如,Huber 损失 [13])非常感兴趣,这些损失函数通过降低具有大错误的示例(困难示例)的损失权重来减少异常值的贡献。相比之下,我们的焦点损失(focal loss)不是解决异常值,而是旨在通过降低内部值(简单示例)的权重来解决类别不平衡问题,即使它们的数量很大,它们对总损失的贡献也很小。换句话说,焦点损失的作用与鲁棒损失相反:它将训练集中在一组稀疏的困难样本上

3. Focal Loss

在这里插入图片描述
Focal Loss 旨在解决单阶段目标检测场景,其中在训练期间前景和背景类别之间存在极端不平衡(例如,1:1000)。我们从二分类的交叉熵 (CE) 损失开始引入焦点损失(focal loss):
在这里插入图片描述
在上面的 y ∈ {±1} 中指定了 ground-truth 类,p ∈ [0, 1] 是模型对标签 y = 1 的类的估计概率。为了符号方便,我们定义 p t p_t pt
在这里插入图片描述
CE 损失可以看作是图 1 中的蓝色(顶部)曲线。这种损失的一个显著特性,可以在其图中很容易看出,是即使是容易分类的示例 ( p t ≫ . 5 p_t \gg .5 pt.5) 也会产生很大的损失。当对大量简单示例求和时,这些小的损失值可能会压倒稀有的类。

3.1. Balanced Cross Entropy

解决类不平衡的一种常用方法是为类 1 引入加权因子 α ∈ [0, 1],为类 -1 引入 1-α。在实践中,α 可以通过逆类别频率设置,也可以作为超参数通过交叉验证来设置。为了符号方便,我们定义 αt 的方式与定义 pt 的方式类似。我们将 α 平衡 CE 损失写为:
在这里插入图片描述
这种损失是对 CE 的简单扩展,我们将其视为**焦点损失(focal loss)**的实验基线。

3.2. Focal Loss Definition

正如我们的实验将表明的那样,在密集检测器的训练过程中遇到的大类别不平衡压倒了交叉熵损失。容易分类的负数构成了损失的大部分,并主导了梯度。虽然 α 平衡了正/负例的重要性,但它没有区分简单/困难示例。相反,我们建议重塑损失函数以降低简单示例的权重,从而将训练重点放在难的负样本上

更正式地说,我们建议在交叉熵损失中添加一个调制因子 ( 1 − p t ) γ (1 - p_t)^γ (1pt)γ,可调聚焦参数 γ ≥ 0 γ ≥ 0 γ0。我们将焦点损失(focal loss)定义为:
在这里插入图片描述
在图 1 中,对于 γ ∈ [0, 5] 的几个值,焦点损失可视化。我们注意到焦点损失的两个属性。

  • 1)当一个样本被错误分类并且 pt 很小时,调制因子接近 1,损失不受影响。当 pt → 1 时,因子变为 0,分类良好的示例的损失被降低权重
  • 2)聚焦参数 γ 平滑地调整了简单示例被降低权重的速率当 γ = 0 时,FL 等效于 CE,并且随着 γ 的增加,调制因子的效果同样会增加(我们发现 γ = 2 在我们的实验中效果最好)。

直观地说,调制因子减少了简单示例的损失贡献,并扩展了示例接收低损失的范围。例如,当 γ = 2 时,与 CE 相比,用 pt = 0.9 分类的示例的损失将低 100 倍,而当 pt ≈ 0.968 时,它的损失将低 1000 倍。这反过来又增加了纠正错误分类示例的重要性(对于 pt ≤ .5 和 γ = 2,其损失最多缩小 4 倍)。

在实践中,我们使用焦点损失的 α 平衡变体
在这里插入图片描述
我们在实验中采用这种形式,因为它比非 α 平衡形式略微提高了准确性。最后,我们注意到损失层的实现将计算 p 的 sigmoid 操作与损失计算相结合,从而提高了数值稳定性

虽然在我们的主要实验结果中我们使用了上面的焦点损失定义,但它的精确形式并不重要。在附录中,我们考虑了焦点损失的其他实例,并证明这些实例同样有效。

3.3. Class Imbalance and Model Initialization

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

3.4. Class Imbalance and Two-stage Detectors

两阶段检测器通常在不使用 α 平衡或我们提出的损失的情况下使用交叉熵损失进行训练。相反,他们通过两种机制解决类别不平衡问题

  • 1)两阶段级联

  • 2)有偏差的小批量采样

第一个级联阶段是一个目标提议机制 (object proposal mechanism) [35,24,28],它将几乎无限的可能对象位置集减少到一两千。重要的是,选择的提议不是随机的,而是可能对应于真实的对象位置,这消除了绝大多数简单的否定。在训练第二阶段时,通常使用有偏抽样来构建包含例如 1:3 比例的正负样本的小批量。这个比率就像一个通过采样实现的隐含 α 平衡因子。我们提出的焦点损失 (focal loss) 旨在直接通过损失函数在单阶段检测系统中解决这些机制

4. RetinaNet Detector

RetinaNet 是一个单一的,统一的网络,由一个主干网络和两个特定任务的子网络组成主干负责计算整个输入图像的卷积特征图,是一个非自我卷积网络第一个子网对主干的输出进行卷积对象分类;第二个子网执行卷积边界框回归。这两个子网络具有一个简单的设计,我们专门为单阶段密集检测提出了建议,请参见图 3。虽然这些组件的细节有很多可能的选择,但大多数设计参数对精确值并不特别敏感,如实验。我们接下来描述 RetinaNet 的每个组件。
在这里插入图片描述
特征金字塔网络骨干网:我们采用 [20] 中的特征金字塔网络(FPN)作为 RetinaNet 的骨干网络。简而言之,FPN 通过自上而下的路径和横向连接增强了标准卷积网络,因此该网络有效地从单分辨率输入图像构建了丰富的多尺度特征金字塔,参见图 3(a)-(b)。金字塔的每一层都可以用于检测不同尺度的对象。 FPN 改进了来自全卷积网络 (FCN) [23] 的多尺度预测,如其在 RPN [28] 和 DeepMask 风格提议 [24] 以及两阶段检测器(如 Fast R-CNN [ 10]或Mask R-CNN [14]。

在 [20] 之后,我们在 ResNet 架构 [16] 之上构建 FPN。我们构建了一个 P3 到 P7 级别的金字塔,其中 l 表示金字塔级别(Pl 的分辨率比输入低 2l)。如在 [20] 中,所有金字塔级别都有 C = 256 个通道。金字塔的细节通常遵循[20],有一些细微的差异。虽然许多设计选择并不重要,但我们强调使用 FPN 主干是:仅使用来自最终 ResNet 层的特征的初步实验产生了低 AP

在目标检测任务中,输入图像经过骨干网络提取特征,得到特征图,该图上的每个像素点,即为anchor(锚点)。参考自:link

Anchors:我们使用与 [20] 中的 RPN 变体中的类似的平移不变锚框。锚框在金字塔级别 P3 到 P7 上的面积分别为 3 2 2 32^2 322 51 2 2 512^2 5122与 [20] 中一样,在每个金字塔级别,我们使用三个纵横比 { 1 : 2 , 1 : 1 , 2 : 1 } \{1:2, 1:1, 2:1\} { 1:2,1:1,2:1} 的锚点。为了比 [20] 中更密集的尺度覆盖,我们在每个级别添加原始一组 3 个大小为 { 2 0 , 2 1 / 3 , 2 2 / 3 } \{2^0, 2^{1/3}, 2^{2/3}\} { 20,21/3,22/3} 的纵横比的锚点这提高了我们设置中的 AP。每个级别总共有 A = 9 个锚点,并且在各个级别上,它们覆盖了相对于网络输入图像的32-813个像素的比例范围。

每个锚点都分配有一个长度为 K 的分类目标 one-hot 向量,其中 K 是对象类的数量,以及一个框回归目标的 4 元素向量。我们使用来自 RPN [28] 的分配规则,但针对多类检测进行了修改并调整了阈值。具体来说,使用 0.5 的交并比 (intersection-over-union, IoU) 阈值将锚分配给真实对象框;如果他们的 IoU 在 [0, 0.4) 中,则返回背景。由于每个锚点最多分配给一个对象框,我们将其长度 K 标签向量中的相应条目设置为 1,将所有其他条目设置为 0。如果未分配锚点,则可能发生在 [0.4, 0.5) 中的重叠,它在训练期间被忽略。框回归目标计算为每个锚点与其分配的对象框之间的偏移量,如果没有分配,则省略。

分类子网络:分类子网络为每 A 个锚点和 K 个对象类预测每个空间位置的对象存在概率。该子网是附加到每个 FPN 级别的小型 FCN;此子网的参数在所有金字塔级别共享。它的设计很简单。从给定的金字塔级别获取具有 C 个通道的输入特征图,子网应用四个 3×3 卷积层,每个具有 C 个过滤器,每个后跟 ReLU 激活,然后是带有 KA 过滤器的 3×3 卷积层。最后附加 sigmoid 激活以输出每个空间位置的 KA 二进制预测,参见图 3 ©。在大多数实验中,我们使用 C = 256 和 A = 9。与 RPN [28] 相比,我们的对象分类子网更深,仅使用 3×3 卷积,并且不与框回归子网共享参数(如下所述)。我们发现这些更高级别的设计决策比超参数的特定值更重要

框回归子网络:与对象分类子网并行,我们将另一个小型 FCN 附加到每个金字塔级别,以便将每个锚框的偏移量回归到附近的真实对象(如果存在)。框回归子网的设计与分类子网相同,只是它在每个空间位置终止于 4A 线性输出,见图 3 (d)。对于每个空间位置的每个 A 锚,这 4 个输出预测锚和真实框之间的相对偏移(我们使用来自 RCNN [11] 的标准框参数化)。我们注意到,与最近的工作不同,我们使用了与类别无关的边界框回归器,它使用的参数更少,而且我们发现同样有效。对象分类子网和框回归子网虽然具有共同的结构,但使用不同的参数。

4.1. Inference and Training

推理:RetinaNet 形成一个单一的 FCN,由 ResNet-FPN 主干网,分类子网和框回归子网组成,见图 3。因此,推理只需通过网络前向传播图像。为了提高速度,在将检测器置信度阈值设置为 0.05 之后,我们仅从每个 FPN 级别最多 1k 个得分最高的预测中解码框预测合并所有级别的最高预测,并应用阈值为 0.5 的非最大抑制来产生最终检测

焦点损失(focal loss):我们使用这项工作中引入的焦点损失作为分类子网输出的损失。正如我们将在第 5 节中展示的那样,我们发现 γ = 2 在实践中效果很好,并且 RetinaNet 对 γ ∈ [0.5, 5] 相对稳健。我们强调,在训练 RetinaNet 时,焦点损失应用于每个采样图像中的所有 ~100k 锚点。这与使用启发式采样 (RPN) 或硬示例挖掘 (OHEM, SSD) 为每个小批量选择一小组锚点(例如 256 个)的常见做法形成对比。图像的总焦点损失计算为所有 ~100k 锚点的焦点损失的总和,通过分配给真实框的锚点数量进行归一化。我们通过分配的锚点数量而不是总锚点来执行归一化,因为绝大多数锚点都是容易的负数,并且在焦点损失下接收到的损失值可以忽略不计。最后,我们注意到分配给稀有类的权重 α 也有一个稳定的范围,但它与 γ 相互作用,因此有必要将两者一起选择(见表 1a 和 1b)。一般来说,随着 γ 的增加,α 应该略微降低(对于 γ = 2,α = 0.25 效果最好)。
在这里插入图片描述
初始化:我们使用 ResNet-50-FPN 和 ResNet-101-FPN 主干[20]进行实验。基础 ResNet-50 和 ResNet-101 模型在 ImageNet1k 上进行了预训练;我们使用[16]发布的模型。为 FPN 添加的新层在 [20] 中初始化。除了 RetinaNet 子网中的最后一层之外,所有新的卷积层都初始化为偏置 b = 0,高斯权重填充为 σ = 0.01。对于分类子网的最后一个卷积层,我们将偏差初始化设置为 b = − log((1 − π)/π),其中 π 指定在训练开始时,每个锚点都应标记为前景,置信度为 ~ π。我们在所有实验中使用 π = .01,尽管结果对精确值是稳健的。如第 3.3 节所述,此初始化可防止大量背景锚在训练的第一次迭代中产生大的、不稳定的损失值

优化:RetinaNet 使用随机梯度下降 (SGD) 进行训练。我们在 8 个 GPU 上使用同步 SGD,每个 minibatch 总共 16 个图像(每个 GPU 2 个图像)。除非另有说明,否则所有模型都经过 90k 次迭代训练,初始学习率为 0.01,然后在 60k 时除以 10,再在 80k 次迭代时除以 10。除非另有说明,否则我们使用水平图像翻转作为数据增强的唯一形式。使用 0.0001 的权重衰减和 0.9 的动量。训练损失是用于框回归 [10] 的焦点损失和标准平滑 L1 损失的总和。表 1e 中模型的训练时间在 10 到 35 小时之间。

5. Experiments

我们展示了具有挑战性的 COCO 基准 [21] 的边界框检测轨道的实验结果。对于训练,我们遵循常见做法 [1, 20] 并使用 COCO trainval35k 分割(来自训练的 80k 图像和来自 40k 图像 val 分割的随机 35k 图像子集的联合)。我们通过评估 minival split(来自 val 的剩余 5k 图像)来报告病变和敏感性研究。对于我们的主要结果,我们在 test-dev 拆分上报告 COCO AP,它没有公共标签,需要使用评估服务器。

5.1. Training Dense Detection

我们进行了大量实验来分析密集检测的损失函数的行为以及各种优化策略。对于所有实验,我们使用深度为 50 或 101 的 ResNets [16],并在顶部构建一个特征金字塔网络 (FPN) [20]。对于所有消融研究,我们使用 600 像素的图像比例进行训练和测试。

网络初始化:我们首次尝试使用标准交叉熵 (CE) 损失来训练 RetinaNet,而无需对初始化或学习策略进行任何修改。这很快就会失败,因为网络在训练期间会发散。然而,简单地初始化我们模型的最后一层,使得检测到对象的先验概率为 π = .01(参见 §4.1)可以实现有效的学习。用 ResNet-50 训练 RetinaNet,这个初始化已经在 COCO 上产生了一个可观的 AP 30.2。结果对 π 的确切值不敏感,因此我们在所有实验中使用 π = .01。

平衡交叉熵(Balanced Cross Entropy):我们下一次改进学习的尝试涉及使用第 3.1 节中描述的 α-平衡 CE 损失。各种 α 的结果如表 1a 所示。设置 α = .75 可获得 0.9 点 AP 的增益。

焦点损失(Focal Loss):使用我们提出的焦点损失的结果如表 1b 所示。焦点损失引入了一个新的超参数,即聚焦参数 γ,它控制调制项的强度当 γ = 0 时,我们的损失相当于 CE 损失。随着 γ 的增加,损失的形状发生变化,因此具有低损失的“简单”示例被进一步打折,见图 1。随着 γ 的增加,FL 显示出比 CE 有很大的收益。在 γ = 2 的情况下,FL 比 α 平衡的 CE 损失提高了 2.9 AP。对于表 1b 中的实验,为了公平比较,我们为每个 γ 找到了最好的 α。我们观察到较低的 α 被选择用于较高的 γ(因为简单的负数被降低,所以需要较少强调正数)。然而,总体而言,改变 γ 的好处要大得多,实际上最好的 α 的范围仅为 [.25,.75](我们测试了 α ∈ [.01, .999])。对于所有实验,我们使用 γ = 2.0 和 α = .25,但 α = .5 的效果几乎一样(低于 0.4 AP)。

焦点损失分析:为了更好地理解焦点损失,我们分析了收敛模型损失的经验分布。为此,我们采用默认的 ResNet101 600 像素模型,使用 γ = 2(具有 36.0 AP)进行训练。我们将此模型应用于大量随机图像,并对~107 个负窗口和~105 个正窗口的预测概率进行采样。接下来,分别针对正面和负面,我们计算这些样本的 FL,并将损失归一化,使其总和为 1。给定归一化损失,我们可以将损失从最低到最高排序,并绘制其正样本和负样本以及 γ 的不同设置的累积分布函数 (CDF)(即使模型是用 γ = 2 训练的)。
在这里插入图片描述
正样本和负样本的累积分布函数如图 4 所示。如果我们观察正样本,我们会看到对于不同的 γ 值,CDF 看起来非常相似。例如,大约 20% 的最难的正样本约占正损失的一半,随着 γ 的增加,更多的损失集中在前 20% 的示例中,但影响很小。 γ 对负样本的影响是截然不同的。对于 γ = 0,正 CDF 和负 CDF 非常相似。然而,随着 γ 的增加,更多的权重集中在难的负样本上。事实上,当 γ = 2(我们的默认设置)时,绝大多数损失来自一小部分样本。可以看出,FL 可以有效地降低易负例的影响,将所有注意力集中在难负例上

Online Hard Example Mining (OHEM):[31] 提出通过使用高损失示例构建小批量来改进两阶段检测器的训练。具体来说,在 OHEM 中,每个示例都根据其损失进行评分,然后应用非最大抑制 (NMS),并使用损失最高的示例构建小批量。 nms 阈值和批量大小是可调参数。与焦点损失一样,OHEM 更强调错误分类的示例,但与 FL 不同,OHEM 完全丢弃了简单示例。我们还实现了 SSD [22] 中使用的 OHEM 变体:在将 nms 应用于所有示例之后,构建小批量以强制正负之间的比例为 1:3,以帮助确保每个小批量有足够的正数。我们在具有大类不平衡的单阶段检测设置中测试了这两种 OHEM 变体。原始 OHEM 策略和选定批次大小和 nms 阈值的“OHEM 1:3”策略的结果如表 1d 所示。这些结果使用 ResNet-101,我们使用 FL 训练的基线在此设置下达到了 36.0 AP。相比之下,OHEM 的最佳设置(没有 1:3 的比例,批量大小 128,0.5 的 nms)达到 32.8 AP。这是 3.2 AP 的差距,表明 FL 在训练密集检测器方面比 OHEM 更有效。我们注意到我们为 OHEM 尝试了其他参数设置和变体,但没有取得更好的结果。

折页损失(Hinge Loss):最后,**在早期的实验中,我们尝试在 pt 上使用折页损失 [13] 进行训练,它将高于 pt 的值的损失设置为 0 **。然而,这是不稳定的,我们没有设法获得有意义的结果。探索替代损失函数的结果在附录中。

5.2. Model Architecture Design

锚点密度:单阶段检测系统中最重要的设计因素之一是它覆盖可能的图像框空间的密集程度。**两阶段检测器可以使用区域池化操作 [10] 对任何位置,比例和纵横比的框进行分类。**相比之下,由于单阶段检测器使用固定的采样网格,在这些方法中实现高覆盖率的一种流行方法是:在每个空间位置使用多个“锚点”[28] 来覆盖各种比例和纵横比的盒子

我们扫描了 FPN 中每个空间位置和每个金字塔级别使用的比例和纵横比锚点的数量。我们考虑的情况从每个位置的单个方形锚点到每个位置的 12 个锚点,跨越 4 个子倍频程尺度(2k/4,对于 k ≤ 3)和 3 个纵横比 [0.5, 1, 2]。使用 ResNet-50 的结果如表 1c 所示。仅使用一个方形锚就可以实现令人惊讶的好 AP (30.3)。但是,当每个位置使用 3 个比例和 3 个纵横比时,AP 可以提高近 4 个点(达到 34.0)。我们将此设置用于这项工作中的所有其他实验。

最后,我们注意到增加超过 6-9 个锚点并没有显示出进一步的收益。因此,虽然两阶段系统可以对图像中的任意框进行分类,但相对于密度的性能饱和意味着两阶段系统的更高潜在密度可能不会提供优势。

速度与准确性:较大的骨干网络产生更高的准确性,但推理速度也较慢。对于输入图像比例(由较短的图像侧定义)也是如此。我们在表 1e 中展示了这两个因素的影响。在图 2 中,我们绘制了 RetinaNet 的速度/准确度权衡曲线,并将其与最近使用 COCO test-dev 上的公众号的方法进行了比较。该图显示,由我们的焦点损失启用的 RetinaNet 形成了所有现有方法的上包络,不考虑低准确度的机制。具有 ResNet-101-FPN 和 600 像素图像比例的 RetinaNet(为简单起见,我们将其表示为 RetinaNet-101-600)与最近发布的 ResNet101-FPN Faster R-CNN [20] 的精度相匹配,同时运行时间为 122 ms图像与 172 毫秒相比(均在 Nvidia M40 GPU 上测量)。使用更大的尺度允许 RetinaNet 超越所有两阶段方法的准确性,同时仍然更快。对于更快的运行时间,只有一个操作点(500 像素输入)使用 ResNet-50-FPN 比 ResNet-101-FPN 有所改进。解决高帧率机制可能需要特殊的网络设计,如 [27] 中所示,并且超出了这项工作的范围。我们注意到,在发表后,现在可以通过 [12] 中的 Faster R-CNN 的变体获得更快,更准确的结果。

5.3. Comparison to State of the Art

在这里插入图片描述
我们在具有挑战性的 COCO 数据集上评估 RetinaNet,并将测试开发结果与最近最先进的方法(包括一阶段和两阶段模型)进行比较。表 2 给出了我们使用尺度抖动(scale jitter)训练的 RetinaNet-101-800 模型的结果,并且比表 1e 中的模型长 1.5 倍(给出 1.3 AP 增益)。与现有的一阶段方法相比,我们的方法与最接近的竞争对手 DSSD [9] 实现了健康的 5.9 点 AP 差距(39.1 与 33.2),同时也更快,参见图 2。与最近的两阶段方法相比, RetinaNet 比基于 Inception-ResNet-v2-TDM [32] 的性能最佳的 Faster R-CNN 模型高出 2.3 个百分点。插入 ResNeXt32x8d-101-FPN [38] 作为 RetinaNet 骨干网络,进一步提高了 1.7 AP 的结果,超过了 COCO 上的 40 AP。
在这里插入图片描述

6. Conclusion

在这项工作中,我们将类别不平衡确定为阻止单阶段目标检测器超越性能最佳的两阶段方法的主要障碍。为了解决这个问题,我们提出了将调节项应用于交叉熵损失的焦点损失,以便将学习重点放在难的负样本上。我们的方法简单而高效。我们通过设计一个完全卷积的单阶段检测器来证明它的功效,并报告了广泛的实验分析,表明它达到了最先进的精度和速度。

猜你喜欢

转载自blog.csdn.net/weixin_39653948/article/details/124684549