https://arxiv.org/pdf/1708.02002.pdf
RetinaNet是继SSD和YOLO V2公布后,YOLO V3诞生前的一款目标检测模型,何恺明

密集物体检测的焦点损失

文章目录

  • Abstract
    • two-stage approach
    • one-stage detectors
    • 类class不平衡
    • 解决此class失衡问题
      • 提出了一种叫做Focal Loss的损失函数
    • 提出了RetinaNet
    • 结果表明
  • 1. Introduction
    • two-stage detector
      • pro-posal stage
      • second classification stage
    • one-stage detector
    • 我们提出了一个新的损失函数focal loss
    • RetinaNet
  • 2. Related Work
    • Classic Object Detectors 滑动窗口
    • Two-stage Detectors: 两级检测器:
    • One-stage Detectors
      • 加快单阶段
    • Class Imbalance
      • 不平衡会导致两个问题
      • 一种常见的解决方案
      • 相比之下,我们
    • 稳健估计
      • 相比之下
  • 3. Focal Loss
    • 3.1. Balanced Cross Entropy(focal loss的实验基准)
    • 3.2. Focal Loss Definition
    • 3.3. Class Imbalance and Model Initialization
    • 3.4. Class Imbalance and Two-stage Detectors 不使用α平衡或我们建议的损失。
    • 我们提出的焦点损失旨在通过损失函数直接在一级检测系统中解决这些机制。
  • 4. RetinaNet Detector
    • 金字塔网络主干功能:
      • 收益
      • Anchors 这改善了AP
    • Classification Subnet
    • Box Regression Subnet
    • 4.1. Inference and Training
      • Focal Loss
    • Initialization
    • Optimization
  • 5. Experiments
    • 5.1. Training Dense Detection
      • Network Initialization
      • Analysis of the Focal Loss
      • Online Hard Example Mining (OHEM)
      • Hinge Loss
    • 5.2. Model Architecture Design
      • Anchor Density
      • Speed versus Accuracy
    • 5.3. Comparison to State of the Art
  • 6. Conclusion
  • Appendix A: Focal Loss*
  • Appendix B: Derivatives 衍生品

Abstract

two-stage approach

最高精度的对象检测器基于R-CNN推广的 two-stage approach

  • 其中将分类器应用于稀疏的候选对象位置集
  • sparse set of candidate 稀疏的候选对象

第一阶段生成卷积的候选对象位置,
第二阶段使用卷积神经网络将每个候选位置分类为前景类之一或背景类。

一系列进展[10,28,20,14]

[11]  Rich fea-ture hierarchies for accurate object detection and semanticsegmentation. InCVPR, 2014
[10]  Fast R-CNN. InICCV, 2015.
[14]  Mask  R-CNN. InICCV, 2017.
[20]  Feature pyramid networks for object detection.InCVPR, 2017.
[28] Faster R-CNN: To-wards  real-time  object  detection  with  region  proposal  net-works. InNIPS, 2015.

one-stage detectors

具有更快,更简单,但到目前为止已经落后于two-stage detectors 的精度。

  • a regular, dense sampling of possible object locations 密集采样

  • 应用于目标的位置,比例和纵横比

一级检测器(例如YOLO [26,27]和SSD [22,9])的最新工作证明了很有希望的结果,相对于最新的两级检测方法,可生产出速度更快的检测器,其准确度在10%至40%之内。

[22] SSD: Single shot multibox detector. InECCV, 2016
[9]  DSSD:Deconvolutional  single  shot  detector.arXiv:1701.06659,2016.
[26] Youonly  look  once:   Unified,  real-time  object  detection.InCVPR, 2016.
[27] YOLO9000:   Better,  faster,stronger. InCVPR, 2017.

类class不平衡

我们发现,在密集探测器dense detectors的训练过程中遇到:

  • 极端的地面背景类 ground-background class 不平衡是主要原因。
  • 前景(positive)和背景(negatives)类别的不平衡问题

解决此class失衡问题

通过重塑标准的交叉熵损失,

  • 它降低了分配给分类良好的示例的损失(it down-weights the loss assigned to well-classified examples)。

提出了一种叫做Focal Loss的损失函数

Focal Loss 将训练重点放在稀疏的困难例子集上

  • 防止产生大量 easy negatives
  • 用来降低大量easy negatives在标准交叉熵中所占权重
  • 提高hard negatives所占权重

提出了RetinaNet

为了评估损失的有效性,我们设计并训练了一个简单的密集检测器,我们称之为RetinaNet。

结果表明

经过focal loss 训练后

  • 速度:RetinaNet能够与之前的一级检测器相似
  • 精度:RetinaNet超过所有现有的最先进的二级检测器的精度

1. Introduction

我们提出了一种单阶段目标检测器

与更复杂的两阶段检测器

  • 特征金字塔网络(FPN)[20]
  • MaskR -CNN [14]
  • Faster R-CNN [28]的变体

性能相似

为了达到这个结果,我们将训练中的类不平衡确定为阻碍一级检测器达到主要精度的主要障碍,并提出了消除这种障碍的新损失函数。

two-stage detector

R-CNN检测器通过两级级联( two-stage cascade)和采样启发法(sampling heuristics)解决类不平衡问题。

pro-posal stage

  • Selective Search [35],
  • EdgeBoxes [39],
  • DeepMask [24, 25],
  • RPN [28]

将候选对象位置的数量迅速缩小为少量(例如1-2k) ,过滤掉大多数背景样本。

second classification stage

  • sampling heuristics

执行采样启发法sampling heuristics,例如

  • 固定的前景与背景之比(1:3)
  • 在线难示例挖掘online hard example mining(OHEM)[31]

以保持前景和背景之间的可管理平衡。

one-stage detector

一级检测器必须处理整个图像中定期采样的大量候选对象位置。

  • 实际上,这通常总计约100k
  • 空间位置,比例和长宽比。

尽管也可以使用类似的采样启发法,但是它们效率低下,

  • 因为训练过程仍然由容易分类的背景示例主导。

这种效率低下是对象检测中的经典问题,通常会通过诸如:

  • boot strapping 引导捆绑 [33,29]
  • 硬示例挖掘hard example mining [37,8,31]

之类的技术来解决。

我们提出了一个新的损失函数focal loss

该函数可以更有效地替代以前处理 class imbalance的方法。

损失函数是动态缩放的交叉熵损失,其中随着对正确类别的置信度增加,缩放因子减小为零,请参见图1。

将更多的注意力放在错误的,分类错误的例子上。正如我们的实验将证明的那样,在大量简单的背景示例存在的情况下,所提出的焦点损失能够训练出高精度的密集物体检测器

  • 直观地讲,该缩放因子可以在训练过程中自动权衡简单示例的贡献,并将模型迅速集中于困难示例。

实验表明,我们提出的Focal Lossenables可训练我们的高精度,one-stage detector 性能明显优于使用 "sampling heuristics or hard example mining"的方案。

最后,我们注意到焦点损失的确切形式并不重要,并且我们展示了其他实例可以达到类似的结果。

RetinaNet

为了证明所提出的focal loss 的有效性,我们设计了一个简单的单阶段物体检测器,称为RetinaNet,以在输入图像中对物体位置的密集采样而命名。

其设计具有:

  • 高效的网络内特征金字塔 feature pyramid
  • 锚框anchor boxes

它借鉴了[22,6,28,20]中的各种最新观点。


[6]    Scalable object detection using deep neural networks. InCVPR, 2014.
[28]  Faster R-CNN: To-wards  real-time  object  detection  with  region  proposal  net-works. InNIPS, 2015.
[22] SSD: Single shot multibox detector. InECCV, 2016. 1, 2, 3,6, 7, 8
[20]  Feature pyramid networks for object detection.InCVPR, 2017.

我们的最佳模型基于ResNet-101-FPN骨干,while running at 5 fps

超过了以前最好的一阶段和两阶段检测器发布的单模型结果,请参见 图2

2. Related Work

Classic Object Detectors 滑动窗口

经典物体检测器:

滑动窗口:

  • 将分类器应用于密集图像网格的滑动窗口范例具有悠久而丰富的历史。

  • 最早的成功之一是LeCunet等人的经典著作。 他将卷积神经网络应用于手写数字识别[19,36]。

  • Vi-ola和Jones [37]使用增强型物体检测器进行面部检测,从而导致此类模型的广泛采用。

  • HOG [4]和整体通道特征[5]的引入提出了行人检测的有效方法。

  • DPM [8]帮助将密集检测器扩展到更多常规对象类别,并且在任何年间的PASCAL [7]中均取得了最佳结果。

尽管滑动窗口方法是经典计算机视觉中领先的检测范例,但随着深度学习的兴起[18],接下来描述的两阶段检测器很快成为控制对象检测的主要方法。

Two-stage Detectors: 两级检测器:

现代物体检测中的主导范式是基于两阶段方法的。

正如“Selective Search work”工作[35]所说的那样

  • 第一阶段生成了一组稀疏的候选,包含所有对象,同时过滤掉大多数负样本negative locations
  • 第二阶段将候选分类为前景类/ 背景 foreground classes / background.

关于正样本与负样本的含义解释见:
https://blog.csdn.net/djfjkj52/article/details/116229641

R-CNN [11]将第二级分类器升级为卷积网络,从而在准确性上获得了巨大的收益,并迎来了目标检测的现代时代。

多年来,R-CNN在速度[15,10]和使用学习的对象建议[6,24,28]方面均得到了改善。 区域提案网络(RPN)将提案生成与第二阶段分类器集成到单个卷积网络中,从而形成了Faster R-CNN框架[28]。 已经提出了对该框架的许多扩展,例如。 [20、31、32、16、14]。

One-stage Detectors

OverFeat [30]是最早的基于深度网络的现代单级目标检测器之一。最近,SSD [22,9]和YOLO [26,27]重新引起了人们对单级方法的兴趣。
这些检测器的速度已经过调整,但其精度却落后于两步法。 SSD的AP降低了10-20%,而YOLO则着眼于更极端的速度/精度权衡。

加快单阶段

最近的工作表明,仅通过降低输入图像的分辨率和提议的数量就可以快速实现两阶段检测器,

但是即使在具有较大的计算预算的情况下,一阶段方法的准确性仍然落后[17]。

相比之下,这项工作的目的是了解在以相似或更快的速度运行时,一级检测器是否可以匹配或超过二级检测器的精度。

Class Imbalance

训练过程中都面临着巨大的分类失衡。

这些检测器评估每个图像的104−10510^4-10^5104−105个候选位置,但是只有少数几个位置包含物体。

不平衡会导致两个问题

  • (1)训练效率低下,因为大多数位置都是easy negative,没有任何有用的学习信号;
  • (2)整体而言,容易产生的负面影响会使训练不堪重负,并导致模型退化。

一种常见的解决方案

hard negative mining [33, 37, 8, 31, 22]

  • 在训练过程中会抽样一些hard negative,或更复杂的抽样/重新称重方案[2]。

相比之下,我们

相比之下,我们表明,我们提出的 focal loss 可以处理由一级检测器所面临的class不平衡问题,并使我们能够有效地训练所有示例,而无需进行采样, 也不会因为大量的easy negative 压垮损失和梯度的计算

稳健估计

健壮的损失函数(例如,Huber损失[13]),通过降低具有较大误差的示例损失(hard examples)的权重来减少离群值的贡献。

相比之下

相比之下,我们的focus loss 不是通过解决异常值,而是通过降低加权值(easy examples)来解决class 不平衡问题,

  • 因此即使它们的数量很大,它们对总损失的贡献也很小。
  • 换句话说,focus loss 表现出强大的损失:它将训练集中在稀疏的困难示例集上。

3. Focal Loss

focal Loss 旨在解决一阶段的目标检测情况,在这种情况下,训练期间前景foreground 和背景 background 类别之间存在极大的不平衡(例如1:1000)。 我们从二元分类的交叉熵(CE)(the cross entropy (CE) loss for binary classification)损失开始介绍focal loss:


在上面的y∈{±1}中,指定了ground-truth 类别,而p∈[0,1]是模型对带有y = 1标签的类别的估计概率。

可以写作:CE(p,y)=CE(pt)=−log(pt)CE(p,y) =CE(p_t) =−log(p_t)CE(p,y)=CE(pt​)=−log(pt​)


CE loss 可以看成图中的蓝色(顶部)曲线。

这种损失的一个显着特性是,即使在容易分类的情况下(pt >> .5),也会产生不小的幅度的损失,这很容易在其图上看到。

  • 如果将大量 easy examples 例相加,则这些小的损耗值可能会使稀有类别 被吞没。

将focal loss 扩展到多类情况很简单,并且效果很好。 为了简单起见,我们将重点放在这项工作中的二进制损失上。

3.1. Balanced Cross Entropy(focal loss的实验基准)

解决类不平衡问题的常用方法是为类1引入权重因子α∈[0,1],

  • class 1引入权重因子α∈[0,1]。
  • class -1 为1-α

α 可以作为 inverse class frequency (类别频率的逆),也可以将其视为通过交叉验证设置的超参数。

我们将α平衡CE损失写为:

CE(pt)=−αtlog(pt)CE(p_t) =−α_tlog(p_t)CE(pt​)=−αt​log(pt​)

这种损失是对CE的简单扩展,我们认为这是focal loss的实验基准。

3.2. Focal Loss Definition

正如我们的实验将显示的那样,在dense detectors 的训练过程中遇到的大型不平衡现象使交叉熵损失不堪重负。

Easily classified negatives 构成了 loss 的大部分,并主导了梯度。

尽管α平衡了positive/negative examples 的重要性, 但它并未区分easy/hard examples。

相反,我们建议将损失函数重塑为down-weight easy examples ,从而将训练重点放在hard negatives上

更正式地说,我们建议将调制因子(1−pt)γ(1-p_t)^γ(1−pt​)γ添加到交叉熵损失中,且可调聚焦参数 γ≥0γ≥0γ≥0。 我们将焦点损失定义为:

FL(pt)=−(1−pt)γlog(pt)FL(p_t) =−(1−p_t)^γlog(p_t)FL(pt​)=−(1−pt​)γlog(pt​)

对于图1中的γ∈[0,5]的几个值,可以看到 focal loss 。我们注意到focal loss 的两个属性。

  • (1)当示例分类错误且pt较小时,调制因子接近1,并且 损失不受影响。 当pt→1时,因子变为0,并且对分类良好的示例的损失进行了加权。
  • 2)focusing 参数γ平滑地调整了easy examples 的权重降低率。 当γ= 0时,FL等效于CE,并且随着γ的增加,调制因子的影响也同样增加(我们发现γ= 2在我们的实验中效果最好)。

直观地,调制因子从easy examples 中减少了损失的贡献,并扩展了得到的低损失的范围。

例如,在γ= 2的情况下,以pt = 0.9进行分类的示例与CE相比,损失降低了100倍;当pt≈0.968时,损耗将降低1000倍。

这反过来增加了纠正错误分类的示例的重要性(对于pt≤.5和γ= 2,其损失最多缩减4倍)。

实际上,我们使用 focal loss 的 α-balanced 变体:
FL(pt)=−αt(1−pt)γlog(pt)FL(p_t) =−α_t(1−p_t)^γlog(p_t)FL(pt​)=−αt​(1−pt​)γlog(pt​)

我们在实验中采用了这种形式,因为与非α平衡形式相比,它产生的精度略有提高。

最后,我们注意到,我们注意到loss layer 的实现将用于计算p的 sigmoid 运算与损失计算结合在一起,从而带来了更大的数值稳定性

虽然在我们的主要实验结果中,我们使用上面的focal loss 公式 :

  • 但这不是他确定的形式,可以很灵活(后来的单阶段中该FL 确实运用广泛,且公式形式灵活多样)
  • 在附录中,我们考虑了FL的其他实例,并证明了这些实例同样有效。

3.3. Class Imbalance and Model Initialization

默认情况下,对二进制分类模型进行初始化,以使其具有相等的输出y = -1或1的概率。

在这样的初始化下,在class 失衡的情况下,

  • 由于 占大部分比例的class 产生的损失可能占总损失的大部分
  • 并导致早期训练的不稳定

为了解决这个问题,我们在培训开始时就引入了“先验”的概念,以表示占比较少的class(foreground)模型所预测的价值。

我们用π表示先验,并对其进行设置,以使模型的占比较少的class的估计p低,例如0.01。

我们注意到,这是模型初始化(参见第4.1节)的变化,而不是损失函数的变化。 我们发现这可以提高重度class失衡情况下ross entropy and focal loss的训练稳定性

3.4. Class Imbalance and Two-stage Detectors 不使用α平衡或我们建议的损失。

两阶段检测器通常经过交叉熵损失训练

不使用α平衡或我们建议的损失。

相反,他们通过两种机制来解决阶级失衡:

  • (1)两阶段的级联和

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

第一个级联阶段是对象提议机制[35、24、28],它将可能的对象位置的几乎无限的集合减少到一千或两千。重要的是,选定的提议不是随机的,而是可能对应于真实的对象位置, 消除了大多数容易产生的负面影响。

在训练第二阶段时,通常使用偏差采样来构建包含例如正例与否定例之比为1:3的微型批次。 该比率就像通过采样实现的隐式α平衡因子。

我们提出的焦点损失旨在通过损失函数直接在一级检测系统中解决这些机制。

4. RetinaNet Detector

RetinaNet是由骨干网和两个特定于任务的子网组成的单个统一网络。

骨干网负责计算整个输入图像上的卷积功能图,并且是一个非常规的卷积网络。

第一个子网对骨干网的输出进行卷积object classification 。 第二个子网执行卷积box regression 。

金字塔网络主干功能:

Feature Pyramid Network Backbone:

我们采用[20]中的特征金字塔网络(FPN)作为RetinaNet的骨干网络。

简而言之,FPN通过自上而下的路径和横向连接增强了标准卷积网络,因此该网络可以有效地从单分辨率输入图像构建丰富的多尺度特征金字塔,请参见图3(a)-(b)。

金字塔的每个级别都可以用于检测不同比例的物体。

收益

如它在RPN [28]和DeepMask样式proposals [24] 以及两级检测器(例如Fast R-CNN [10]或Mask R-CNN [14])中的收益所示。

按照[20],我们在ResNet体系结构[16]的顶部构建FPN。 我们构造了一个金字塔,其级别为P3到P7,其中l表示金字塔级别(PlP_lPl​ 的分辨率比输入的分辨率低2l2^l2l)。

与[20]中一样,所有金字塔等级都具有C = 256个通道。

金字塔的详细信息通常如下[20],但也略有差异。

尽管许多设计选择都不是至关重要的,但我们强调FPN主干网的使用是关键。( 仅使用最终ResNet层的功能进行的初步实验产生的AP较低。 )

RetinaNet使用要素金字塔等级P3至P7,其中P3至P5是使用自上而下的方式从相应的ResNet残余级(C3至C5)的输出中计算的, 横向连接就像在[20]中一样,

通过C5上的3×3步幅2转换获得P6,

P7是通过应用ReLU,然后在P6上进行3×3 stride-2转换来计算的。

这与[20]略有不同:

(1)由于计算原因,我们不使用高分辨率金字塔等级P2,

(2)P6是通过跨步卷积而不是下采样来计算的,

(3)包含P7以改善大型物体的检测。这些较小的修改可提高速度,同时保持精度

Anchors 这改善了AP

我们使用与[20]中RPN变体类似的平移不变锚框。 锚点分别在金字塔级别P3至P7上具有322至512232^2至512^2322至5122 的区域。

如[20]中所示,在每个金字塔级别,我们使用三种纵横比{1:2,1:1,2:1}的锚点。

对于比[20]中更密集的比例覆盖范围,在每个级别上,我们添加原始集的锚点(3个)的大小为20,21/3,22/3{2^0,2^{1 / 3},2^{2 / 3}}20,21/3,22/3的锚点。

所以一共是9个,每个级别总共有A = 9个锚点,并且在各个级别上,它们相对于网络的输入图像覆盖了32 -813像素的比例范围。

每个锚点都分配有一个长度为K的 one-hot 分类目标向量,其中K是对象类的数目,以及一个4的框回归目标向量。

我们使用RPN [28]中的分配规则,但对多类检测进行了修改,并调整了阈值。

具体来说,使用(IoU)阈值为0.5来将锚分配给地面真实对象箱;如果他们的IoU在[0,0.4),则返回背景。

由于每个锚点最多分配给一个对象框,因此我们将其长度K标签向量中的相应条目设置为1,将所有其他条目设置为0。如果未分配锚点,则重叠[0.4,0.5)可能会发生 在训练过程中被忽略。

框回归目标被计算为每个锚点与其分配的对象框之间的偏移量;如果没有分配,则将其省略。

Classification Subnet

分类子网针对A个锚点和K个对象类别的每个空间位置预测对象存在的可能性。 该子网是一个附加在每个FPN级别上的小型FCN。 该子网的参数在所有金字塔级别之间共享。

它的设计很简单。

从给定的金字塔级别获取具有C个通道的输入要素图,子网将应用四个3×3conv层,每个层具有C滤镜,每个层均具有ReLU激活,然后是具有K A滤镜的3×3 conv层。

最后,将sigmoid 激活附加到每个空间位置输出K A二进制预测值,请参见图3(c)。 在大多数实验中,我们使用C = 256和A = 9

与RPN [28]相比,我们的对象分类子网更深,仅使用3×3转换,并且不与框回归子网共享参数(如下所述)。 我们发现这些高级设计决策比超参数的特定值更重要。

Box Regression Subnet

与对象分类子网并行,我们将另一个小型FCN附加到每个金字塔中层,目的是将每个锚定框的偏移量回归到附近的地面真实对象(如果存在)。

盒子回归子网的设计与分类子网相同,不同之处在于它在每个空间位置以4A线性输出端接,请参见图3(d)。

对于每个空间位置的A个锚点,这4个输出预测了锚点和地面真值框之间的相对偏移(我们使用R-CNN [11]中的标准框参数化)。

我们注意到,与最近的工作不同,我们使用与类无关的bbox回归器,该回归器使用较少的参数,并且发现同样有效。

尽管对象分类子网和Box回归子网具有相同的结构,但它们使用单独的参数

4.1. Inference and Training

RetinaNet形成了一个由ResNet-FPN主干,分类子网和Box回归子网组成的单个FCN,请参见图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效果最好)。

Initialization

我们使用ResNet-50-FPN和ResNet-101-FPN主干进行实验[20]。 基本的ResNet-50和ResNet-101模型已在ImageNet1k上进行了预训练; 我们使用[16]发布的模型。

为FPN添加的新层如[20]中所述被初始化。

在RetinaNet子网中,除最后一层外,所有新的conv层均使用biasb = 0初始化并使用σ= 0.01的高斯权重填充进行初始化。

对于分类子网的最后卷积层,我们将偏差初始化设置为b = -log((1-π)/π),其中π表示在训练开始时每个锚点都应标记为前景,置信度为〜 π。

在所有实验中,我们使用π= .01,尽管结果对精确值具有鲁棒性。 如第3.3节所述,此初始化可防止大量背景锚在训练的第一次迭代中生成较大的破坏稳定的损失值。

Optimization

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

5. Experiments

对于所有消融研究,我们使用600像素的图像比例进行训练和测试

5.1. Training Dense Detection

  • For all experiments we use depth50 or 101 ResNets [16] with a Feature Pyramid Network(FPN) [20] constructed on top.
  • For all ablation studies we use an image scale of 600 pixels for training and testing

Network Initialization

  • 1、Our first attempt to train Reti-naNet uses standard cross entropy (CE) loss without anymodifications to the initialization or learning strategy.
  • 2、Our next attempt to improvelearning involved using theα-balanced CE loss describedin§3.1.
  • 3、using our proposed focal loss areshown in Table 1b. The focal loss introduces one new hy-perparameter, the focusing parameterγ, that controls thestrength of the modulating term.
    • When γ= 0, our loss is equivalent to the CE loss. As γ increases, the shape of the loss changes so that “easy” examples with low loss get fu-ther discounted, see Figure 1.
    • FL shows large gains ove rCE as γ is increased. With γ= 2, FL yields a 2.9 AP im-provement over theα-balanced CE loss.

Analysis of the Focal Loss

为了更好地了解焦点损失,我们分析了聚合模型损失的经验分布。

  • 为此,我们采用默认的ResNet-101 600像素模型,该模型使用γ= 2(具有36.0AP)进行训练。
  • 我们将此模型应用于大量随机图像,并采样了约10 ^ 7个负窗口和〜10 ^ 5个正窗口的预测概率。
  • 接下来,分别针对正值和负值,我们为这些样本计算FL,并对损失进行归一化,使其总和为1。 给定归一化的损失,我们可以从最低到最高对损失进行排序,并绘制正样本和负样本以及针对γ的不同设置的累积分布函数(CDF)(即使模型是使用γ= 2训练的)

正样本和负样本的累积分布函数如图4所示。如果观察正样本,对于不同的γ值,CDF看起来非常相似。

  • 例如,最强的阳性样本中约20%约占正损失的一半,因为在前20%的示例中,γ增加的损失更多,但影响很小。

γ对阴性样品的影响差异很大。 对于γ= 0,正和负CDF非常相似。 但是,随着γ的增加,更多的重量集中在坚硬的阴性样本上。 实际上,在γ= 2(我们的默认设置)的情况下,大部分损失来自一小部分样本。 可以看出,FL可以有效地抵消简单否定词的影响,将所有注意力集中在困难的否定例子上

Online Hard Example Mining (OHEM)

[31]提出通过构造小批量来改进两阶段检测器的训练, using high-loss examples.

具体而言,在OHEM中,每个示例均按其损失评分,然后应用非最大抑制(nms),然后使用损失最高的示例构建一个微型批处理。 nms阈值和批次大小是可调参数。

  • 像焦点损失一样,OHEM更加强调错误分类的示例,

  • 但是与FL不同,OHEM完全放弃了简单的示例。

我们还实现了SSD中使用的OHEM的一种变体[22]:在将nms应用于所有示例之后,微型批次被构造为在正负之间强制执行1:3的比例,以帮助确保每个微型批次具有足够的正。

我们在一级不平衡的一级检测设置中测试了这两种OHEM变体。 Ta-ble 1d中显示了原始OHEM策略和选定批次大小和nms阈值的“ OHEM 1:3”策略的结果。

  • FL在训练密集检测器方面比OHEM更有效。

Hinge Loss

最后,在早期的实验中,我们尝试在pt上训练Hinge Loss[13],该损耗将pt的某个值之上的损耗设置为0。 但是,这是不稳定的,我们未能获得有意义的结果。 附录中探讨了替代损失函数的结果

5.2. Model Architecture Design

Anchor Density

锚点密度:在一个阶段的检测系统中,最重要的设计因素之一是其覆盖可能的图像盒空间的密度。

  • 两级检测器可以使用区域池化操作[10]对框在任何位置,比例和纵横比上进行分类。

相反,由于一级检测器使用固定的采样网格,因此在这些方法中实现框的高覆盖率的一种流行方法是:

  • 在每个空间位置使用多个“锚点” [28]来覆盖各种比例和纵横比的框。

我们将遍历FPN中每个空间位置和每个金字塔级别使用的比例和长宽比固定点的数量。 我们考虑了从每个位置的单个方形锚到每个位置的12个锚的情况,这些锚跨越4个子八度音阶(2k / 4,k≤3)和3个宽高比[0.5、1、2]。

最后,我们注意到锚点数超过6-9并没有显示出进一步的增长。 因此,尽管两级系统可以对图像中的任意盒子进行分类,但性能的饱和度为w.r.t。 密度意味着两阶段系统较高的潜在密度可能无法提供优势。

Speed versus Accuracy

较大的骨干网产生较高的准确性,但推理速度也较慢。对于输入图像比例(由较短的图像侧定义)也是如此。

我们在表1e中显示了这两个因素的影响。

在图2中,我们绘制了Reti-naNet的速度/精度折衷曲线,并将其与使用COCOtest-dev上的公共数字的最新方法进行了比较。

  • 该图显示,由于我们的焦距损失,RetinaNet构成了现有方法的上限

  • 带有ResNet-101-FPN的RetinaNet和600像素的图像比例(我们将RetinaNet-101-600表示为简单性)与最近发布的ResNet-101-FPN Faster R-CNN [20]的准确性相匹配。

我们注意到,发布后,现在可以通过[12]的Faster R-CNN的变体来获得更快,更准确的结果。
[12] Detectron.https://github.com/facebookresearch/detectron, 2018. 8

5.3. Comparison to State of the Art

与现有的一阶段方法相比,我们的方法在最接近的竞争对手DSSD的情况下达到了健康的5.9点AP差距(39.1 vs. 33.2),而且速度更快,请参见图2。

与最近的两阶段方法相比 在基于Inception-ResNet-v2-TDM [32]的情况下,RetinaNet的方法比性能最高的Faster R-CNN模型高2.3点。

随着RetinaNet主干网的进一步改进,插入ResNeXt-32x8d-101-FPN [38]可再增加1.7 AP

6. Conclusion

我们提出了焦点损失,该焦点损失将调制项应用于交叉熵损失,以便将学习重点放在困难的负面例子上。 我们的方法简单有效。 我们通过设计完全卷积的一级检测器来证明其功效,并报告了广泛的实验分析,结果表明该方法达到了最新的准确性和速度

Detectron:https://github.com/facebookresearch/detectron

Appendix A: Focal Loss*

焦点损失的确切形式并不重要。 现在,我们显示具有类似特性并产生可比较结果的焦距的替代实例。 以下还提供了更多关于焦点损失特性的见解。

我们首先考虑交叉熵(CE)和焦点损失(FL)两种形式,其形式与主要内容略有不同。

具体来说,我们定义数量xtx_txt​如下

xt=yx,y∈±1x_t=yx , y∈ {±1}xt​=yx,y∈±1

然后,我们可以写pt=σ(xt)p_t =σ(x_t)pt​=σ(xt​)。 当xt>0x_t> 0xt​>0时正确分类为一个示例,在这种情况下pt>.5p_t> .5pt​>.5。

现在,我们可以定义xtx_txt​的焦点损失项的另一种形式。 我们将pt∗和FL∗p^{*}_t和FL^{*}pt∗​和FL∗定义如下:

FL *具有两个参数γ和β,它们控制损耗曲线的陡度和偏移。

可以看出,像FL,FL *一样,具有选定的参数可以减少分配给分类充分的示例的损失

我们使用与之前相同的设置对RetinaNet-50-600进行了训练,但是我们使用选定的参数将FL替换为FL *。 这些模型获得的AP与使用FL训练的AP几乎达到相同的AP,请参见表3。换句话说,FL *是FL的合理选择,在实践中效果很好

更普遍地,我们期望具有与FL或FL *相似特性的任何损失函数同样有效

Appendix B: Derivatives 衍生品


对于所有损失函数,对于高置信度预测,导数趋向于-1或0。

但是,与CE不同,对于FL和FL ∗的有效设置,只要xt>0x_t> 0xt​>0,导数就很小。

【损失函数】Focal Loss for Dense Object Detection And RetinaNet相关推荐

  1. 目标检测--Focal Loss for Dense Object Detection

    Focal Loss for Dense Object Detection ICCV2017 https://arxiv.org/abs/1708.02002 本文算是用简单的方法解决复杂的问题了,好 ...

  2. 目标检测 | RetinaNet:Focal Loss for Dense Object Detection

    论文分析了 one-stage 网络训练存在的类别不平衡问题,提出能根据 loss 大小自动调节权重的 focal loss,使得模型的训练更专注于困难样本.同时,基于 FPN 设计了 RetinaN ...

  3. Focal Loss for Dense Object Detection(整理后转载)

    @[TOC](Focal Loss for Dense Object Detection 论文目标 核心思想 focal loss的提出 交叉熵损失函数 focal loss的重要性质 focal l ...

  4. RetinaNet——《Focal Loss for Dense Object Detection》论文翻译

    <Focal Loss for Dense Object Detection> 摘要 迄今为止最高精度的对象检测器基于由R-CNN推广的 two-stage 方法,其中分类器应用于稀疏的候 ...

  5. RetinaNet论文详解Focal Loss for Dense Object Detection

    一.论文相关信息 ​ 1.论文题目:Focal Loss for Dense Object Detection ​ 2.发表时间:2017 ​ 3.文献地址:https://arxiv.org/pdf ...

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

    [翻译]Focal Loss for Dense Object Detection(RetinaNet) 目录 摘要 1.介绍 2.相关工作 3.Focal Loss 3.1 平衡的交叉熵损失 3.2 ...

  7. Focal Loss for Dense Object Detection(RetinaNet)(代码解析)

    转自:https://www.jianshu.com/p/db4ccd194109 转载于:https://www.cnblogs.com/leebxo/p/10485740.html

  8. 如何理解 “Dense object detection“中的dense?

    第一大类是 从非Deep时代就被广泛应用的dense detector ,例如DPM,YOLO,RetinaNet,FCOS.在dense detector中,大量的object candidates ...

  9. Focal Loss和它背后的男人RetinaNet

    说起Focal Loss,相信做CV的都不会陌生,当面临正负样本不平衡时可能第一个想到的就是用Focal Loss试试.但是怕是很多人会不知道这篇论文中所提出的one stage目标检测模型Retin ...

  10. Mutual Supervision for Dense Object Detection

    Mutual Supervision for Dense Object Detection 作者用这幅图来描述分类和回归头的inconsistency,指出现有在目标检测中存在的问题. FCOS的分类 ...

最新文章

  1. java final关键字_终于明白 Java 为什么要加 final 关键字了!
  2. SimUDuck 策略模式
  3. 构造函数和析构函数能否声明为虚函数?
  4. 2020-09-11
  5. ORA-00018: maximum number of sessions exceeded 超出最大会话数
  6. mac怎么安装python开发环境搭建_Mac OS搭建Python开发环境
  7. 计算机怎样辅助与美工结合,环保教案:幼儿园环保美工与信息技术整合案例
  8. adroid 中公里除时间_全长210.72公里!这条高速有望年底通车…(视频图文)
  9. Kubernetes迁移指北 | 凌云时刻
  10. How can I add a site title refiner
  11. python读取二进制文件_python中读写二进制文件
  12. 什么是PLC可编程控制器,理论基础知识讲解QY-KC801
  13. 美国计算机金融排名大学排名,2018usnews美国大学金融专业研究生top30排名
  14. 2022-2028全球与中国钢琴艺术培训市场现状及未来发展趋势
  15. killer Linux驱动下载,The Linux Killer
  16. 搭建Springboot单体项目
  17. win11系统备份和还原
  18. 斯坦福大学校工程学院计算机,加州大学洛杉矶分校:受大脑启发的计算机视觉的对象发现和检测...
  19. 猿人学之js混淆源码乱码
  20. js 模块defin化讲解

热门文章

  1. 利用ArcGIS Pro进行时空数据挖掘和可视化呈现
  2. python链接MySQL数据库
  3. js实现全排列组合算法
  4. php 或取域名的ip,php如何获取域名IP地址代码函数
  5. 实习成长之路:MySQL十三: count(*)这么慢,我该怎么办?为什么那么慢?
  6. linux下压缩解压缩见解
  7. c++之static的一些用法
  8. Android 代码关于重构的一点体会
  9. 解决问题 1474 个,Flink 1.11 究竟有哪些易用性上的改善?
  10. 重磅!Apache Flink 1.11 功能前瞻来啦