【翻译】Focal Loss for Dense Object Detection(RetinaNet)

【翻译】Focal Loss for Dense Object Detection(RetinaNet)

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

1、Introduction
当前最先进的物体检测器基于两阶段的提议驱动机制。 正如在 R-CNN 框架 [11] 中普及的那样,第一阶段生成一组稀疏的候选对象位置,第二阶段使用卷积神经网络将每个候选位置分类为前景类之一或背景。 通过一系列进展 [10, 28, 20, 14],这个两阶段框架在具有挑战性的 COCO 基准测试中始终达到最高准确率 [21]。
尽管两级检测器取得了成功,但一个自然而然的问题是:一个简单的单级检测器能否达到类似的精度? 一级检测器应用于对象位置、尺度和纵横比的规则、密集采样。 最近对单级检测器(例如 YOLO [26, 27] 和 SSD [22, 9])的研究显示出有希望的结果,与最先进的两级检测器相比,检测器速度更快,精度在 10-40% 以内。
这篇论文更进一步:我们提出了一个单级目标检测器,它第一次与更复杂的两级检测器的最先进的 COCO AP 相匹配,例如特征金字塔网络 (FPN) [20 ] 或 Mask R-CNN [14] 变体 Faster R-CNN [28]。为了实现这一结果,我们将训练期间的类别不平衡确定为阻碍单级检测器实现最先进精度的主要障碍,并提出了一种新的损失函数来消除这一障碍。
类不平衡在类 R-CNN 检测器中通过两级级联和采样启发式算法解决。提议阶段(例如,选择性搜索 [35]、EdgeBoxes [39]、DeepMask [24, 25]、RPN [28])迅速将候选对象位置的数量缩小到少数(例如,1-2k),过滤掉大部分背景样本。在第二个分类阶段,执行采样启发式,例如固定的前景与背景比率(1:3)或在线难样本挖掘(OHEM)[31],以保持前景和背景之间的可管理平衡。
相比之下,单级检测器必须处理在图像中定期采样的一组更大的候选对象位置。在实践中,这通常相当于枚举大约 10 万个位置,这些位置密集地覆盖了空间位置、尺度和纵横比。虽然也可以应用类似的采样启发式方法,但它们效率低下,因为训练过程仍然由易于分类的背景示例主导。这种低效率是目标检测中的一个经典问题,通常通过自举 [33, 29] 或困难样本挖掘 [37, 8, 31] 等技术来解决。
在本文中,我们提出了一种新的损失函数,它可以更有效地替代以前处理类不平衡的方法。损失函数是一个动态缩放的交叉熵损失,其中缩放因子随着对正确类别的置信度增加而衰减为零,见图 1。直观地,该缩放因子可以在训练期间自动降低简单示例的贡献并快速聚焦困难例子的模型。实验表明,我们提出的 Focal Loss 使我们能够训练出一种高精度的单级检测器,该检测器的性能显着优于使用采样启发式或困难示例挖掘的训练替代方案,这是以前用于训练单级检测器的最先进技术.最后,我们注意到Focal Loss的确切形式并不重要,我们展示了其他实例可以达到类似的结果。
【翻译】Focal Loss for Dense Object Detection(RetinaNet)
图1 我们提出了一种新的损失,我们称之为 Focal Loss,它在标准交叉熵标准上增加了一个因子 (1 − pt)^γ。 设置 γ > 0 减少了分类良好的示例的相对损失(pt > .5),将更多的注意力放在难以分类的错误分类示例上。 正如我们的实验将证明的那样,所提出的焦点损失能够在存在大量简单背景示例的情况下训练高度准确的密集物体检测器。
为了证明所提出的焦点损失的有效性,我们设计了一个简单的单级目标检测器,称为 RetinaNet,以其对输入图像中目标位置的密集采样命名。它的设计具有高效的网络内特征金字塔和锚框的使用。它借鉴了 [22, 6, 28, 20] 中的各种最新想法。 RetinaNet 高效准确;我们的最佳模型基于 ResNet-101-FPN 主干,在以 5 fps 运行时实现了 39.1 的 COCO test-dev AP,超过了之前发布的单级和两级检测器的最佳单模型结果,见图 2 .
【翻译】Focal Loss for Dense Object Detection(RetinaNet)图2 COCO test-dev 上的速度 (ms) 与准确度 (AP)。 通过焦距损失,我们简单的单级 RetinaNet 检测器优于所有先前的单级和两级检测器,包括来自 [20] 的最佳报道的 Faster R-CNN [28] 系统。 我们展示了具有 ResNet-50-FPN(蓝色圆圈)和 ResNet-101-FPN(橙色菱形)的 RetinaNet 变体在五个尺度(400-800 像素)。 忽略低准确度机制(AP<25),RetinaNet 形成所有当前检测器的上包络,改进的变体(未显示)达到 40.8 AP。 详细信息在 Section 5 中给出。

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) 将提议生成与第二阶段分类器集成到单个卷积网络中,形成了 Faster 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] 引入的“锚点”概念以及 SSD [22] 和 FPN [20] 中特征金字塔的使用。 我们强调,我们的简单检测器取得最佳结果不是基于网络设计的创新,而是由于我们新颖的损失。
类不平衡:经典的单阶段对象检测方法,如增强检测器 [37, 5] 和 DPMs [8],以及更新的方法,如 SSD [22],在训练期间都面临较大的类不平衡。这些检测器评估每张图像 10k-100k个候选位置,但只有少数位置包含对象。这种不平衡会导致两个问题:(1)训练效率低下,因为大多数位置都是容易否定的,没有提供有用的学习信号; (2) 总的来说,容易的否定会压倒训练并导致模型退化。一个常见的解决方案是执行某种形式的硬负挖掘 [33, 37, 8, 31, 22],在训练或更复杂的采样/重新加权方案 [2] 期间对难示例进行采样。相比之下,我们表明我们提出的焦点损失自然地处理了单级检测器面临的类别不平衡,并允许我们在没有采样的情况下有效地训练所有示例,并且没有容易的负面影响压倒损失和计算梯度。
鲁棒性估计:人们对设计鲁棒损失函数(例如 Huber loss [13])很感兴趣,该函数通过降低具有大错误的示例(硬示例)的损失来减少异常值的贡献。相比之下,我们的焦点损失不是解决异常值,而是旨在通过降低内部值(简单示例)的权重来解决类不平衡问题,这样即使它们的数量很大,它们对总损失的贡献也很小。换句话说,焦点损失与稳健损失的作用相反:它将训练集中在一组稀疏的困难示例上。

3、Focal Loss
Focal Loss 旨在解决单阶段对象检测场景,在该场景中,在训练期间前景类和背景类之间存在极度不平衡(例如,1:1000)。 我们从二元分类的交叉熵 (CE) 损失开始引入焦点损失:
【翻译】Focal Loss for Dense Object Detection(RetinaNet)在上面中指的是真实类和是模型对标签为y = 1的类的估计概率。为了符号方便,我们定义 pt:
【翻译】Focal Loss for Dense Object Detection(RetinaNet)

并重写 CE(p, y) = CE(pt) = − log(pt)。
CE 损失可以看作是图 1 中的蓝色(顶部)曲线。此损失的一个显着特性(在其图中可以很容易地看出)是,即使是易于分类的示例也会导致损失 具有非平凡的量级。 当对大量简单示例求和时,这些小的损失值可能会压倒稀有类。

3.1 Balanced Cross Entropy
解决类别不平衡的常用方法是引入加权因子对类1和1−α对类-1。 在实践中,α 可以通过逆类频率设置,也可以作为超参数通过交叉验证来设置。 为了符号方便,我们定义 αt 类似于我们定义 pt 的方式。 我们将 α 平衡的 CE 损失写为:
【翻译】Focal Loss for Dense Object Detection(RetinaNet)
这种损失是对 CE 的简单扩展,我们将其视为我们提出的焦点损失的实验基线。

3.2. Focal Loss Definition
正如我们的实验将显示的那样,在密集检测器的训练过程中遇到的大类不平衡超过了交叉熵损失。 容易分类的负数构成了大部分损失并主导了梯度。 虽然 α 平衡了正/负示例的重要性,但它不区分简单/困难示例。 相反,我们建议重塑损失函数以减轻简单示例的权重,从而将训练重点放在硬负例上。
更正式地说,我们建议在交叉熵损失中添加一个调制因子 (1 − pt)^γ,可调聚焦参数 γ ≥ 0。我们将焦点损失定义为:
【翻译】Focal Loss for Dense Object Detection(RetinaNet)
对于 在图 1 中。我们注意到焦点损失的两个属性。 (1)当一个样本被误分类并且pt很小时,调制因子接近1,loss不受影响。 作为 pt->1,因子变为 0,并且分类良好的示例的损失被降低权重。 (2) 聚焦参数 γ 平滑地调整了简单示例的权重下降率。 当 γ = 0 时,FL 等价于 CE,并且随着 γ 的增加,调节因子的影响同样增加(我们发现 γ = 2 在我们的实验中效果最好)。
直观地说,调制因子减少了简单样本的损失贡献,并扩大了样本获得低损失的范围。 例如,当 γ = 2 时,分类为 pt = 0:9 的样本与 CE 相比损失低 100 倍,而 pt ≈ 0:968 则损失低 1000 倍。 这反过来又增加了纠正错误分类示例的重要性(对于 pt ≤ :5 和 γ = 2,其损失最多减少 4 倍)。
在实践中,我们使用焦距损失的 α 平衡方差:【翻译】Focal Loss for Dense Object Detection(RetinaNet)
我们在实验中采用这种形式,因为它比非 α 平衡形式的精度略有提高。 最后,我们注意到损失层的实现将计算 p 的 sigmoid 操作与损失计算相结合,从而获得更大的数值稳定性。
虽然在我们的主要实验结果中我们使用了上面的focal loss定义,但其精确形式并不重要。 在附录中,我们考虑了focal loss的其他实例,并证明它们同样有效。

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

3.4. Class Imbalance and Two-stage Detectors
两级检测器通常使用交叉熵损失进行训练,而不使用 α 平衡或我们提出的损失。 相反,它们通过两种机制解决类不平衡问题:(1)两阶段级联和(2)有偏小批量采样。 第一个级联阶段是一个对象提议机制 [35, 24, 28],它将几乎无限的可能对象位置集减少到一两千。 重要的是,所选择的提议不是随机的,而是可能对应于真实的对象位置,这消除了绝大多数容易的否定。在训练第二阶段时,通常使用有偏采样来构建包含例如 1:3 比例的正负示例的小批量。 这个比率就像是通过采样实现的隐式 α 平衡因子。 我们提出的焦点损失旨在通过损失函数直接解决单阶段检测系统中的这些机制。
【翻译】Focal Loss for Dense Object Detection(RetinaNet)图 3. 一级 RetinaNet 网络架构在前馈 ResNet 架构 [16] (a) 之上使用特征金字塔网络 (FPN) [20] 主干,以生成丰富的多尺度卷积特征金字塔 (b)。 在这个主干 RetinaNet 上附加了两个子网络,一个用于对锚框进行分类(c),另一个用于从锚框回归到真实对象框(d)。 网络设计非常简单,这使这项工作能够专注于一种新颖的焦点损失函数,该函数消除了我们的单级检测器与最先进的两级检测器(如具有 FPN 的 Faster R-CNN)之间的精度差距 [ 20]同时以更快的速度运行。

4、RetinaNet Detector
RetinaNet 是一个单一的、统一的网络,由一个骨干网和两个特定任务的子网组成。 主干负责计算整个输入图像的卷积特征图,是一个非自用的卷积网络。 第一个子网对主干的输出执行卷积对象分类; 第二个子网执行卷积边界框回归。 这两个子网络具有我们专门为单阶段密集检测提出的简单设计,见图 3。虽然这些组件的细节有很多可能的选择,但大多数设计参数对精确值并不特别敏感,如图 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 的分辨率比输入低 2^l)。与 [20] 中一样,所有金字塔级别都有 C = 256 个通道。金字塔的细节通常遵循 [20],但有一些适度的差异。虽然许多设计选择并不重要,但我们强调使用 FPN 主干是;仅使用来自最终 ResNet 层的特征的初步实验产生了低 AP。
Anchors: 我们使用与 [20] 中的 RPN 变体类似的平移不变锚框。锚点在金字塔层 P3 到 P7 上的面积分别为 32^2 到 512^2。与 [20] 中一样,在每个金字塔级别,我们使用三个纵横比的锚点{1:2, 1:1、2:1}。对于比 [20] 中更密集的覆盖范围,在每个级别我们添加大小为 {20、21/3、2^2/3} 的锚点,这些锚点是原始的 3 个纵横比锚点集。这在我们的设置中提高了 AP。每层总共有 A = 9 个锚点,跨层它们覆盖了相对于网络输入图像的 32-813 像素的尺度范围。
每个锚点被分配一个长度为 K 的分类目标的单热向量,其中 K 是对象类的数量,以及一个 4 向量的框回归目标。我们使用 RPN [28] 中的分配规则,但针对多类检测进行了修改并调整了阈值。具体来说,使用 0.5 的交集交叉 (IoU) 阈值将锚点分配给真实对象框;如果他们的 IoU 在 [0, 0.4) 中,则背景。由于每个锚点最多分配给一个对象框,我们将其长度 K 标签向量中的相应条目设置为 1,所有其他条目设置为 0。它在训练期间被忽略。框回归目标计算为每个锚点与其分配的对象框之间的偏移量,如果没有分配则省略。
Classification Subnet: 分类子网预测每个 A 锚点和 K 个对象类的每个空间位置的对象存在概率。 这个子网是一个小 FCN 附加到每个 FPN 级别; 此子网的参数在所有金字塔级别之间共享。 它的设计很简单。 从给定的金字塔级别获取具有 C 个通道的输入特征图,子网应用四个 3 3 conv 层,每个层都有 C 个过滤器,每个层后跟 ReLU 激活,然后是一个 3 3 conv 层和 KA 过滤器。 最后,附加 sigmoid 激活以输出每个空间位置的 KA 二进制预测,参见图 3 ©。 我们在大多数实验中使用 C = 256 和 A = 9。
与 RPN [28] 相比,我们的对象分类子网更深,仅使用3*3卷积,并且不与框回归子网共享参数(如下所述)。 我们发现这些更高级别的设计决策比超参数的特定值更重要。
Box Regression Subnet: 与对象分类子网并行,我们将另一个小的 FCN 附加到每个金字塔级别,目的是将每个锚框的偏移量回归到附近的真实对象(如果存在)。框回归子网的设计与分类子网,除了它以每个空间位置的 4A 线性输出终止,参见图 3 (d)。 对于每个空间位置的每个 A 锚点,这 4 个输出预测锚点和地面实况框之间的相对偏移(我们使用来自 RCNN [11] 的标准框参数化)。 我们注意到,与最近的工作不同,我们使用了一个与类别无关的边界框回归器,它使用的参数更少,而且我们发现同样有效。 对象分类子网和框回归子网虽然共享相同的结构,但使用不同的参数。

4.1. Inference and Training
Inference: RetinaNet 形成由 ResNet-FPN 主干、分类子网和框回归子网组成的单个 FCN,见图 3。因此,推理涉及简单地通过网络转发图像。 为了提高速度,在将检测器置信度阈值设置为 0.05 后,我们仅从每个 FPN 级别最多 1k 个得分最高的预测中解码框预测。 合并所有级别的最高预测,并应用阈值为 0.5 的非最大抑制以产生最终检测。
Focal Loss: 我们使用这项工作中引入的焦点损失作为分类子网输出的损失。正如我们将在 Section 5 中展示的那样,我们发现在实践中效果很好,并且RetinaNet在具有较好的鲁棒性。我们强调,在训练 RetinaNet 时,焦点损失应用于每个采样图像中的所有 100k 锚点。这与使用启发式采样 (RPN) 或困难示例挖掘 (OHEM、SSD) 为每个小批量选择一小组锚点(例如,256)的常见做法形成对比。图像的总焦点损失计算为所有 10 万个锚点的焦点损失总和,通过分配给ground-truth box的anchor数量进行归一化。我们通过分配的anchor的数量而不是总的anchor进行归一化,因为绝大多数锚点都是容易否定的,并且在焦点损失下接收到的损失值可以忽略不计。最后我们注意到,分配给稀有类的权重也有一个稳定的范围,但它相互作用使得必须同时选择两者(见表 1a 和 1b)。一般来说,应该随着增加而略微减少(对于, 效果最好)。
Initialization: 我们对 ResNet-50-FPN 和 ResNet-101-FPN 主干 [20] 进行了实验。 基础 ResNet-50 和 ResNet-101 模型在 ImageNet1k 上进行了预训练; 我们使用 [16] 发布的模型。 为 FPN 添加的新层在 [20] 中初始化。 除了 RetinaNet 子网中的最后一层之外,所有新的 conv 层都使用偏差 b = 0 和高斯权重填充进行初始化。 对于分类子网的最后一个卷积层,我们将偏差初始化设置为,其中指在训练开始时,每个锚点都应该被标记为前景,置信度为. 我们在所有实验中都使用,尽管结果对于精确值是稳健的。 如 section 3.3 中所述,此初始化可防止大量背景锚在第一次训练迭代中产生较大的不稳定损失值。
Optimization: RetinaNet 使用随机梯度下降 (SGD) 进行训练。我们在 8 个 GPU 上使用同步 SGD,每个 minibatch 总共 16 张图像(每个 GPU 2 张图像)。 除非另有说明,所有模型都训练 90k 次迭代,初始学习率为 0.01,然后在 60k 次除以 10,在 80k 次迭代时再次除以。 除非另有说明,我们使用水平图像翻转作为数据增强的唯一形式。 使用 0.0001 的重量衰减和 0.9 的动量。 训练损失是用于框回归 [10] 的focal loss和标准平滑 L1 损失的总和。 表 1e 中模型的训练时间在 10 到 35 小时之间。

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

5.1. Training Dense Detection
我们运行了大量实验来分析用于密集检测的损失函数的行为以及各种优化策略。 对于所有实验,我们使用深度为 50 或 101 的 ResNet [16],并在顶部构建了一个特征金字塔网络 (FPN) [20]。 对于所有消融研究,我们使用 600 像素的图像比例进行训练和测试。
Network Initialization: 我们第一次尝试训练 RetinaNet 使用标准交叉熵 (CE) 损失,而没有对初始化或学习策略进行任何修改。 这很快就会失败,因为网络在训练期间会发散。 然而,简单地初始化我们模型的最后一层,使得检测对象的先验概率(参见Section 4.1)可以实现有效的学习。 使用 ResNet-50 训练 RetinaNet 并且此初始化已经在 COCO 上产生了 30.2 的可观AP。 结果对的确切值不敏感,因此我们对所有实验使用。
Balanced Cross Entropy: 我们的下一次尝试使用Section 3.1中描述的α平衡 CE 损失来改进学习。 各种结果如表1a所示。 设置α=.75可获得 0.9 点 AP。
Focal Loss: 使用我们提出的焦点损失的结果如表 1b 所示。 焦点损失引入了一个新的超参数,即聚焦参数,它控制调制项的强度。 当时,我们的损失相当于 CE 损失。 随着增加,损失的形状发生变化,因此具有低损失的“简单”示例得到进一步折扣,参见图 1。 FL 显示随着增加而超过 CE 的巨大收益。 当时,FL 比平衡 CE 损失产生 2.9 的 AP 改进。
【翻译】Focal Loss for Dense Object Detection(RetinaNet)
表 1. RetinaNet 和 Focal Loss (FL) 的消融实验。 除非另有说明,否则所有模型都在 trainval35k 上训练并在 minival 上进行测试。 如果未指定,默认值为:γ = 2; 3 个比例和 3 个纵横比的锚点; ResNet-50-FPN 骨干网; 以及 600 像素的训练和测试图像比例。 (a) 具有 α 平衡 CE 的 RetinaNet 最多达到 31.1 AP。 (b) 相比之下,使用具有相同精确网络的 FL 可获得 2.9 AP 增益,并且对精确的 γ/α 设置相当稳健。 © 使用 2-3 比例和 3 纵横比锚点会产生良好的结果,之后点性能饱和。 (d) FL 优于在线困难示例挖掘 (OHEM) [31, 22] 的最佳变体超过 3 个 AP。 (e) RetinaNet 在 test-dev 上针对各种网络深度和图像尺度的准确度/速度权衡(另请参见图 2)

对于表 1b 中的实验,为了公平比较,我们为每个找到了最好的。 我们观察到,较低的被选为较高的(因为容易的负面因素被降低了权重,所以需要较少地强调正面因素)。 然而,总的来说,改变的好处要大得多,实际上最好的范围只有(我们测试了)。 我们在所有实验中使用和,但的效果几乎一样(低 0.4 AP)。
Analysis of the Focal Loss: 为了更好地理解焦点损失,我们分析了收敛模型损失的经验分布。 为此,我们采用默认的 ResNet-101 600 像素模型训练,(具有 36.0 AP)。 我们将此模型应用于大量随机图像,并对 10^7 个负窗口和 10^5 个正窗口的预测概率进行采样。 接下来,分别对于正样本和负样本,我们计算这些样本的 FL,并将损失归一化,使其总和为 1。 给定归一化损失,我们可以从最低到最高对损失进行排序,并为正样本和负样本以及不同设置(即使模型是用训练的)绘制其累积分布函数 (CDF)。
图 4 显示了正样本和负样本的累积分布函数。如果我们观察正样本,我们会发现对于不同的值,CDF 看起来非常相似。 例如,大约 20% 的最难的正样本约占正损失的一半,随着的增加,更多的损失集中在前 20% 的示例中,但影响很小。
对负样本的影响是显着不同的。 对于,正负 CDF 非常相似。 然而,随着增加,更多的权重集中在困难的负面例子上。 事实上,当(我们的默认设置)时,绝大多数损失来自一小部分样本。 可以看出,FL 可以有效地降低简单负例的影响,将所有注意力集中在难负例上。
Online Hard Example Mining (OHEM): [31] 提出通过使用高损失示例构建小批量来改进两阶段检测器的训练。具体来说,在 OHEM 中,每个示例都按其损失评分,然后应用非最大抑制 (nms),并使用损失最高的示例构建小批量。 nms 阈值和批量大小是可调参数。与焦点损失一样,OHEM 更强调错误分类的示例,但与 FL 不同的是,OHEM 完全丢弃了简单的示例。我们还实现了 SSD [22] 中使用的 OHEM 变体:在将 nms 应用于所有示例后,构建小批量以强制正负之间的比例为 1:3,以帮助确保每个小批量具有足够的正数。
我们在具有较大类别不平衡的单阶段检测设置中测试了两种 OHEM 变体。原始 OHEM 策略和“OHEM 1:3”策略对选定批次大小和 nms 阈值的结果如表 1d 所示。这些结果使用 ResNet-101,我们用 FL 训练的基线在此设置下达到 36.0 AP。相比之下,OHEM 的最佳设置(没有 1:3 的比例,批量大小为 128,nms 为 0.5)达到 32.8 AP。这是 3.2 AP 的差距,表明 FL 在训练密集检测器方面比 OHEM 更有效。我们注意到我们为 OHEM 尝试了其他参数设置和变体,但没有取得更好的结果。
Hinge Loss: 最后,在早期的实验中,我们尝试在 pt 上使用铰链损失 [13] 进行训练,这将损失设置为 0 高于某个 pt 值。 然而,这是不稳定的,我们没有设法获得有意义的结果。 探索替代损失函数的结果在附录中。

5.2. Model Architecture Design
Anchor Density: 一级检测系统中最重要的设计因素之一是它覆盖可能的图像框空间的密度。两阶段检测器可以使用区域池操作 [10] 对任何位置、尺度和纵横比的框进行分类。相比之下,由于一级检测器使用固定采样网格,在这些方法中实现框高覆盖率的一种流行方法是在每个空间位置使用多个“锚点”[28] 来覆盖各种尺度和纵横比的框。
我们在FPN每一层的每个空间位置使用不同个数的尺寸和长宽比anchors。在ResNet-50从使用1个方形anchor到12个anchors(尺寸为2^{k/4},k ≤ 3,长宽比为 [0.5, 1, 2],见Table 1c)。令人惊讶的是只使用1个anchor情况下AP就有30.3;当使用3中尺寸和3中长宽比时可以到达34.0。我们将此设置用于这项工作中的所有其他实验。
最后,我们注意到增加超过 6-9 个锚点并没有显示出进一步的收益。因此,虽然两阶段系统可以对图像中的任意框进行分类,但性能的饱和度 w.r.t.密度意味着两级系统的更高潜在密度可能不会提供优势。
Speed versus Accuracy: 更大的骨干网络产生更高的准确性,但推理速度也更慢。同样对于输入图像比例(由较短的图像侧定义)。我们在表 1e 中显示了这两个因素的影响。在图 2 中,我们绘制了 RetinaNet 的速度/准确性权衡曲线,并将其与最近使用 COCO test-dev 上的公众的方法进行比较。该图显示,在我们的焦点损失的支持下,RetinaNet 形成了所有现有方法的上限,忽略了低准确率的情况。带有 ResNet-101-FPN 和 600 像素图像比例的 RetinaNet(为了简单起见,我们用 RetinaNet-101-600 表示)与最近发布的 ResNet-101-FPN Faster R-CNN [20] 的准确性相匹配,同时运行在 122 ms 每张图像与 172 ms 相比(均在 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,并将测试开发结果与最近最先进的方法(包括单阶段和两阶段模型)进行比较。 我们的 RetinaNet-101-800 模型使用缩放抖动训练,并且比表 1e 中的模型长 1.5 倍(AP 增益为 1.3),结果如表 2 所示。 与现有的单阶段方法相比,我们的方法与最接近的竞争对手 DSSD [9] 实现了 5.9 点的 AP 差距(39.1 对 33.2),同时速度也更快,参见图 2。与最近的两阶段方法相比, RetinaNet 在基于 Inception-ResNet-v2-TDM [32] 的性能最佳的 Faster R-CNN 模型之上实现了 2.3 点的差距。 插入 ResNeXt-32x8d-101-FPN [38] 作为 RetinaNet 主干进一步提高了结果 1.7 个 AP,超过了 COCO 上的 40 个 AP。
【翻译】Focal Loss for Dense Object Detection(RetinaNet)
表2。对象检测单模型结果(边界框AP),与最先进的COCO测试开发。我们展示了我们的Retinanet-101-800模型的结果,该模型经过尺度抖动训练,比表1e中的相同模型长1.5×。我们的模型取得了最好的结果,表现优于单阶段和两阶段的模型。关于速度与精度的详细细分,请参见表1e和图2。

6、Conclusion
在这项工作中,我们将类别不平衡确定为阻止单阶段目标检测器超越性能最佳的两阶段方法的主要障碍。 为了解决这个问题,我们提出了focal loss,它对交叉熵损失应用了一个调制项,以便将学习重点放在困难的负例上。 我们的方法简单而高效。 我们通过设计一个完全卷积的单级检测器证明了它的功效,并报告了广泛的实验分析,表明它实现了最先进的准确性和速度。 源代码可在 https://github.com/facebookresearch/Detectron [12]
7、

上一篇:LLVM 新一代 JIT API:ORC


下一篇:appium手势运行报错AttributeError: 'int' object has no attribute 'id'