参考 Focal Loss for Dense Object Detection(文献阅读) - 云+社区 - 腾讯云
迄今为止,精度最高的目标检测器是基于R-CNN推广的两阶段方法,其中分类器应用于稀疏候选目标位置。相比之下,对可能的目标位置进行常规、密集采样的单级检测器器有可能更快、更简单,但迄今仍落后于两阶段检测器的精度。在本文中,我们将探讨为什么会出现这种情况。我们发现,在密集检测器训练过程中所遇到的极端的前景和背景不平衡是其主要原因。我们建议通过重新构造标准的交叉熵损失来解决这个类的不平衡,这样它就可以降低分配给分类良好的示例的损失。我们新的Focal Loss训练集中在一组稀疏的难例上,防止大量简单的负样本在训练时淹没检测器。为了评估我们的损失的有效性,我们设计并训练了一个简单的密集检测器,我们称之为Retinanet。我们的结果表明,当使用Focal Loss训练时,Retinanet连能够在超过现有所有最先进的两级检测器精度的同时,与以前的单级检测器速度相匹配
目前最先进的目标检测器是基于一个两阶段,建议驱动机制。正如R-CNN框架所推广的,第一阶段生成稀疏的候选目标位置集合,第二阶段使用卷积神经网络将每个候选位置分类为前景或背景类之一。通过一系列的改进,这个两阶段的框架始终能够在COCO Challenge基准上达到最高的精度。
尽管两阶段取得了成功,一个自然的问题是:一个简单的单阶段检测器能达到类似的精度吗?单阶段检测器应用于目标位置、尺度和宽高比的常规、密集采样。最近在YOLO和SSD等单阶段检测器的研究显示出了很有前景的结果,与最先进的两级方法相比,能产生精度在10-40%以内的更快的检测器。
本文进一步推进了这一领域的研究:我们首次提出了一种单阶段目标检测器,它与更复杂的两阶段检测(如特征金字塔网络(FPN)或Faster R-CNN的变体Mask R-CNN)的最先进的COCO AP相匹配。为了实现这一结果,我们确定了训练过程中的类不平衡是阻碍单阶段测器达到最高精度的主要障碍,并提出了一种新的损失函数来消除这一障碍。
类不平衡问题是通过两阶段级联和采样启发式算法来解决的。建议阶段(如选择性搜索,EdgeBoxes, DeepMask, RPN)快速将候选目标位置的数量缩减到一个小的数量(如1-2k),过滤掉大部分背景样本。在第二个分类阶段,执行采样启发式,例如固定的前背景比(1:3)或在线难例挖掘(OHEM),以保持前景和背景之间的可管理的平衡。
相比之下,单阶段检测器必须处理一组更大的候选目标位置,这些候选目标位置定期在图像中采样。在实践中,这通常相当于枚举约100k个位置,这些位置密集地覆盖了空间位置、尺度和宽高比。虽然也可以使用类似的抽样启发法,但是效率很低,因为训练过程仍然由容易分类的背景示例控制。这种低效率是目标检测中的一个经典问题,通常通过bootstraping或OHEM等技术来解决。
在本文中,我们提出了一个新的损失函数,它比以往处理类不平衡的方法更有效。损失函数是一个动态缩放的交叉熵损失,当对正确类的置信度增加时,比例因子衰减为零,见图1。直观地,这个比例因子可以自动降低训练过程中简单示例的权重,并快速地将模型集中在难例上。实验表明,我们提出的Focal Loss能够训练一个高精度的单阶段检测器,该检测器的性能显著优于使用采样启发或难例挖掘(以前最先进的单阶段检测器训练技术)训练的替代方案。最后,我们注意到Focal Loss的确切形式并不重要,我们还展示了其他实例化可以获得类似的结果。
为了证明所提出的Focal Loss的有效性,我们设计了一个简单的单阶段目标检测器,称为Rentianet,它的名字来源于对输入图像中目标位置的密集采样。它的设计特点是高效的网络内特征金字塔和锚框的使用。RetinaNet高效、准确;我们的最佳模型基于ResNet-101-FPN主干,在运行速度为5 fps的情况下,实现了COCO test-dev AP 39.1,超过了之前发布的单模型最好的单阶段检测器和两阶段检测器的结果,见图2。
将分类器应用于密集图像网格的滑动窗口范式有着悠久而丰富的历史。 最早的成功之一是LeCun等人的经典工作,他们将卷积神经网络应用于手写数字识别。 维奥拉和琼斯使用增强目标检测器进行人脸检测,导致了这类模型的广泛采用。 HOG和积分通道特征的引入产生了有效的行人检测方法。 DPMs帮助将密集检测器扩展到更一般的目标类别,多年来在PASCAL上取得了最好的结果。 虽然滑动窗口方法是经典计算机视觉中的领先检测范式,但随着深度学习的复苏,两级检测器迅速成为目标检测的主导。
现代目标检测的主导范式是基于两阶段方法。 作为选择性搜索[35]工作的先驱,第一阶段生成一组稀疏的候选建议,其中应该包含所有目标,同时过滤掉大多数负面位置,第二阶段将这些建议分类为前景类/背景类。 R-CNN将第二阶段分类器升级为卷积网络,在精度上获得了很大的增益,并迎来了目标检测的现代时代。 多年来,R-CNN在速度和使用学习目标建议方面都得到了改进。 区域建议网络(RPN)将建议生成和第二阶段分类器集成到一个卷积网络中,形成了Faster R-CNN框架[28]。
OverFeat是第一个基于深度网络的现代单级目标检测器。 最近,SSD和YOLO重新引起了人们对单阶段法的兴趣。 这些检测器已经根据速度进行了调整,但它们的准确性落后于两阶段方法。 SSD的AP降低了10-20%,而YOLO则专注于更极端的速度/精度权衡。 参见图2。 最近的工作表明,两级检测器可以简单地通过减少输入图像分辨率和建议数量来实现快速,但单级方法在精度上落后,即使有更大的计算预算。 相比之下,这项工作的目的是了解在以相似或更快的速度运行时,单级检测器是否能达到或超过两级检测器的精度。
RetinaNet检测器的设计与以前的密集检测器有许多相似之处,特别是RPN引入的“锚”概念,以及SSD和FPN中使用的特征金字塔。 我们强调,我们的简单检测器取得的顶级结果不是基于网络设计的创新,而是由于我们的新奇损失。
无论是经典的一级目标检测方法(如增强检测器和DPM),还是最新的方法(如SSD),在训练过程中都面临较大的类不平衡。 这些检测器评估每幅图像104-105个候选位置,但只有少数位置包含物体。 这种不平衡导致了两个问题:(1)训练效率低下,因为大多数地点都是简单的负能量,没有提供有用的学习信号; (2)总体而言,这些简单的消极因素会压倒训练,导致精神崩溃。 生成模型。 一种常见的解决方案是执行某种形式的硬负挖掘,即在训练过程中采样硬示例或更复杂的采样/重称重方案。 相反,我们表明,我们提出的Focal Loss自然地处理了单级检测器面临的类不平衡,并允许我们有效地训练所有的例子,而不需要采样,也不需要容易的负抵消损失和计算梯度。
人们对设计可靠的损失函数(例如,Huber损失)非常感兴趣。 通过降低误差大的例子(难例)的损失权重来减少离群值的贡献。 相反,我们的焦点损失不是解决离群值,而是通过向下加权内嵌(简单的例子)来解决类的不平衡,这样即使它们的数量很大,它们对总损失的贡献也很小。 换句话说,焦点损失执行与鲁棒损失相反的角色:它将训练集中在一组稀疏的难的例子上。
Focal loss的设计是为了解决一个阶段的目标检测场景,在训练阶段有一个极端不平衡的前景和背景类。从二分类的交叉熵开始引出Focal loss,
在上述式子中指定了标签类,并且是当标签y=1时模型对类的估计概率。为了便于标注,定义:
并且重写。
CE是上图中的蓝色曲线,这种损失的一个值得注意的性质是,即使是容易分类的例子也会造成不小的损失,这一点在其图中很容易看出。当对大量简单的实例进行求和时,这些小的损失值可能会淹没很少的类。
解决类不平衡问题的常见方法是引入一个因子,对正样本,对负样本。在实践中α可以设置通过逆类概率或视为通过交叉验证设置的超参数。为了便于标记,把 CE损失写为:
这个损失是CE损失的一个简单延伸,为我们提出的Focal loss考虑一个实验的baseline。
实验结果表明,在密集检测器训练过程中所遇到的较大的类不平衡抵消了交叉熵损失。容易分类的负样本构成了大部分的损失,并主导梯度。而α平衡正/负实例的重要性,不区分容易/难的例子。相反,我们建议重塑损失函数,减少简单例子的权重,从而将训练重点放在难负样本。更一般的,我们提出对交叉熵损失增加一个调制因子,利用可调焦虑的参数,将Focal Loss定义为:
Focal loss可以用若干个值来表示,如最上图所示。注意Focal loss的两个性质:(1)当一个例子被误分类并且比较小的时候,调制系数接近1并且损失无影响。因为趋近于1,并且因子趋近于0,分类良好的实例的损失是向下加权的。(2)Focal Loss参数平滑的调整速度,在这种情况下,简单的例子就会被减权。
当 = 0时,FL相当于CE,当γ增加调制的影响因素是同样增加(在实验中发现是最佳的)。
直观地说,调制因子减少了来自简单示例的损失贡献,并扩展了实例接受低损失的范围。例如,使用,时例子的分类相比于CE损失降低了100倍,时损失降低了1000倍。这反过来又增加了纠正错误分类示例的重要性,对和,损失最多降低了4倍。
在实际中使用Focal loss的变体:
在实验中采用这种方法和非相比精度有略微的提升。最后,我们注意到,损失层的实现结合了计算p的sigmoid操作和损失计算,使得数值更加稳定。
虽然在我们的主要实验结果中我们使用了上面的焦损定义,但它的精确形式并不重要。在附录中,我们考虑了Focal Loss的其他实例,并证明这些实例同样有效。
默认情况下,二值分类模型初始化为输出y = - 1或1的概率相等。在这样的初始化下,在类不平衡的情况下,由于类概率而造成的损失会主导全局损失,导致早期训练的不稳定。为了解决这一问题,在训练开始时引入了“先验”的概念,即稀有类(前景)的模型估计的p值。我们通过π表示先验,这样模型的估计p稀有类的例子很低,例如0.01。我们注意到这是模型初始化的一个变化(参见4.1),而不是损失函数的变化。我们发现,在严重严重不平衡的情况下,这种方法可以提高交叉熵和Focal Loss的训练稳定性。
两阶段检测器通常通常用交叉熵损失来训练,不用或Focal loss。相反,两阶段检测器通过两种机制来解决类不平衡问题:(1)两级级联(2)有偏的小批量抽样。第一个级联阶段是一个目标建议机制,它将几乎无限的可能目标位置集减少到1000或2000个。重要的是,所选择的建议不是随机的,而是可能与真实的目标位置相对应的,这消除了绝大多数容易产生的负面影响。在训练第二阶段时,偏置抽样通常用于构建包含正、负样本比例为1:3的mini-batch。这个比例是一个隐式实现通过抽样因素。我们提出的Focal Loss设计是为了在一个单阶段检测器系统直接通过损失函数解决这个问题。
Focal Loss的确切形式并不重要。 现在,我们展示了Focal Loss的另一个实例,它具有类似的性质,并产生了可比的结果。 下面也给出了更多关于Focal Loss特性的见解。 我们首先考虑交叉熵和焦损失(FL),其形式与之前略有不同。 具体来说,我们定义一个量如下:
其中和之前一样指定了ground-truth类。 我们可以写成(与式(2)中的定义一致)。 当> 0时,一个例子被正确地分类,在这种情况下, >0.5。 我们现在可以用定义Focal Loss的另一种形式。 我们定义和Focal Loss* ()如下:
有两个参数,和,控制损失曲线的陡度和位移。 图3中沿着CE和EL,我们为和两个选定的集合绘制。可以看到,与FL一样,在选定的参数下减小了分配给分类良好的例子的损失。
作为参考,CE、FL和FL w.r.t. x的导数为:
Retinanet是由一个主干网和两个特定于任务的子网组成的单一、统一的网络。主干负责计算整个输入图像上的卷积特征图,是一个自定义卷积网络。第一子网对骨干网的输出进行卷积目标分类;第二个子网络执行卷积边界框回归。这两个子网具有一个简单的设计,我们特别针对单阶段密集检测提出了这个设计,如下图所示。虽然对于这些组件的细节有许多可能的选择,但是大多数设计参数对实验中显示的精确值并不特别敏感。接下来我们将描述Retinanet的各个组成部分。
FPN骨干网:我们采用特征金字塔网络(FPN)作为支持网络的骨干网络。简而言之,FPN通过自顶向下的路径和横向连接扩展了一个标准的卷积网络,使得该网络能够有效地从一个分辨率输入图像构建一个丰富的多尺度特征金字塔,如图5a-5b所示。金字塔的每一层都可以用来检测不同尺度的物体。FPN改进了全卷积网络(FCN)的多尺度预测,从RPN和DeepMask-style建议,以及Fast R-CNN或Mask R-CNN两级检测器的性能可以看出。
我们在ResNet架构之上构建FPN。我们构建了一个从级到级的金字塔,其中表示金字塔级(的分辨率比输入低)。所有金字塔级别都有C = 256个通道。金字塔的细节通常遵循FPN,只有一些细微的差别。虽然很多设计选择并不重要,但我们强调使用FPN主干网是至关重要的;仅使用最后一层ResNet的特征进行的初步实验获得了较低的AP。
Anchor:我们使用平移不变的锚框,类似于的RPN变体。在~ 层,锚点的面积分别为。就像在FPN中一样,在每个金字塔级别,我们使用三个宽高比(1:2,1:1,2:1)的锚。对于比FPN更密集的尺度覆盖,在每一层我们都添加了3个宽高比锚的尺寸的锚。这在我们的设置中改进了AP。每层总共有9个锚点,它们覆盖网络输入图像的32 -813像素范围。每个锚点都有一个长度为K的分类目标的one-hot向量,其中K为目标类的数量,一个box regression目标的4个向量。我们使用了来自RPN的赋值规则,但针对多类检测和阈值调整进行了修改。具体来说,锚点使用Intersection-over-union (IoU)阈值0.5分配到ground-truth目标框;如果他们的IoU在[0,0.4]中,则退一步。由于每个锚点最多分配给一个目标框,我们将其长度K label向量中的对应条目设置为1,所有其他条目设置为0。如果一个锚没有被分配,这可能发生在重叠的[0.4,0.5),它在训练期间被忽略。盒回归目标计算为每个锚与其分配的目标框之间的偏移量,如果没有分配,则省略。
分类子网络:分类子网为每个A锚和K类目标预测目标在每个空间位置出现的概率。这个子网是一个小的FCN附加到每个FPN级;此子网的参数在所有金字塔级别上共享。它的设计很简单。子网从一个给定的金字塔级获取一个带有C通道的输入特征图,应用4个3×3 conv层,每个层都有C个滤波器,每个滤波器后面都有ReLU激活,然后是一个带有K*A过滤器的3×3 conv层。最后,sigmoid激活被附加到每个空间位置的KA二进制预测输出中,见图5c。我们在大多数实验中使用c = 256和A = 9。
与RPN相比,我们的目标分类子网更深,只使用3×3 convs,并且不与box regression子网共享参数(下面将介绍)。我们发现这些高层次的设计决策比超参数的特定值更重要。
回归子网络:与目标分类子网并行,我们将另一个小FCN附加到每个金字塔级别,以便将每个锚框的偏移量回归到附近的ground-truth目标(如果存在的话)。框的设计回归子网与分类相同子网除了它终止在4A线性输出/空间位置,参见图3 (d)。对于每个锚/空间位置,这四个输出预测真实锚和框之间的相对偏移量(我们的盒使用标准R-CNN的参数)。我们注意到,与最近的工作不同,我们使用了一个类无关的边界框回归器,它使用较少的参数,并且我们发现同样有效。目标分类子网和框回归子网虽然具有相同的结构,但使用不同的参数。
推论:RetinaNet形成一个单独的FCN,由一个ResNet-FPN主干、一个分类子网和一个框回归子网组成,见图5。因此,推理只涉及通过网络转发图像。为了提高速度,我们在阈值检测器置信度为0.05后,只对每个FPN级别的最高1k得分预测进行解码。将各个级别的最高预测进行合并,并使用阈值为0.5的非最大抑制来产生最终的检测结果。
Focal loss:我们使用本文引入的Focal Loss作为分类子网输出的损失函数。我们发现γ= 2时在实际中效果比较好,RetinaNet对比较鲁棒。我们强调,当训练RetinaNet时,Focal Loss失应用于每个采样图像中的所有∼100k锚点。这与通常使用启发式抽样(RPN)或硬示例挖掘(OHEM, SSD)来为每个小批选择一组锚(例如,256)的做法形成了对比。图像的总Focal Loss计算为所有∼100k锚点上的Focal Loss之和,由分配给ground-truth框的锚点数量标准化。由于绝大多数锚都是易负性的,且在Focal Loss下损失值可以忽略不计,所以我们用所分配的锚的个数而不是总锚的个数来进行归一化。最后我们注意α权重分配到罕见的类,也有一个稳定的范围,但它与γ使得有必要选择这两个在一起(见表1 a和1 b)。一般α应该稍微降低γ增加(γ= 2,α= 0.25的效果最好)。
初始化:我们用ResNet-50-FPN和ResNet-101-FPN骨干进行了实验。在ImageNet1k上对基础ResNet-50和ResNet-101模型进行预训练;我们使用残差网络的模型。在残差网络中初始化为FPN添加的新层。RetinaNet中除了最后一层外,新的卷积层都用bias=0,和权重的高斯函数来优化。对于分类子网的最后一个conv层,我们将偏置初始化设置为,指定训练的每一个锚都应该标记为前景的置信度∼π。我们在所有的实验中使用π= . 01,尽管结果是强劲的精确值。正如3.3节所解释的,这种初始化可以防止大量的背景锚在训练的第一次迭代中产生较大的、不稳定的损失值。
优化:RetinaNet采用随机梯度下降(SGD)训练。我们在8个GPU上使用同步SGD,每个小批处理共有16个图像(每个GPU 2个图像)。除非另有说明,所有模型都经过90k迭代训练,初始学习率为0.01,然后在60k时除以10,在80k迭代时再除以10。除非另有说明,否则我们使用水平图像翻转作为唯一的数据增强形式。重量衰减为0.0001,动量为0.9。训练损失是box回归中Focal Loss与标准smooth-L1损失之和。表1e模型的训练时间范围为10 - 35小时。
给出了具有挑战性的COCO基准边界框检测轨迹的实验结果。对于训练,我们遵循常规,并使用COCO trainval35k split(结合来自训练集的80k图像和来自40k图像val split的随机35k子集)。我们报告病变和敏感性的研究,通过评估minival split(其余5k图像从val)。对于我们的主要结果,我们报告了关于test-dev split的COCO AP,它没有公共标签,并且需要使用评估服务器。
我们进行了大量的实验来分析密集检测的损失函数的行为,以及各种优化策略。在所有的实验中,我们使用深度为50或101的ResNets,并在其上构建一个特征金字塔网络(FPN)。对于所有消融研究,我们使用600像素的图像尺度进行训练和测试。
网络初始化:我们第一次尝试使用标准交叉熵损失(CE)训练Retinanet,而不修改初始化或学习策略。这种方法很快就会失败,因为在训练过程中网络会发生分化。然而,仅仅初始化我们的模型的最后一层,这样检测物体的先验概率是π= . 01(见§4.1)支持有效的学习。使用ResNet-50对RetinaNet进行训练,这个初始化已经在COCO上生成了一个可观的AP 30.2。结果对π的精确值,所以我们使用π=.01实验。
平衡Cross Entropy:我们下一个尝试提高学习涉及使用α-balanced CE§3.1中描述的损失。各种α的结果如表1所示。设置能使AP增加0.9点。
Focal Loss:使用我们提出的Focal Loss的结果如表1b所示。Focal Loss引入了一个新的超参数损失,聚焦参数γ,控制的强度调制。当γ= 0时,我们的损失相当于CE损失。随着γ增加,损失的形状变化,这样“简单”的例子与低损失得到进一步折中,参见图1。随着的增加,相比于CE,FL显示了巨大的增益。设置,相对于 CE损失,FL产生2.9%的AP提升。
表1b中的实验,一个公平的比较,我们发现最好的α和γ。我们观察到高的值选择低的值比较好(由于容易的负面影响被低估了,因此不太需要强调正面影响)。总体而言,改变γ的作用更大,实际上最好的α的范围在[0.25,0.75](我们测试了)。 (AP低了0.4)。在所有实验中我们使用和,但是几乎和效果近似(AP低了0.4)。
Focal Loss的分析:为了更好地理解Focal Loss,我们分析了一个收敛模型的损失经验分布。为此,我们采取默认ResNet-101 600像素模型训练,并且γ= 2(AP为36.0)。我们将此模型应用于大量随机图像,并对∼负框和∼正框的预测概率进行采样。接下来,分别对正负样本,计算这些样本的FL值,并将损失归一化,使其和为1。考虑到规范化的损失,我们可以从低到高排序损失和并且画出对不同的设置正样本和负样本的的累积分布函数(CDF)(尽管模型用来训练)。
正、负样本的累积分布函数如图6所示。如果我们观察到正样本,我们看到CDF不同γ的值看起来非常相似。例如,大约20%的最积极的样本占大约一半的积极损失,随着γ增加更多的损失会集中在前20%的例子,但这种影响是微不足道的。
γ在负样本的效果是截然不同的。γ= 0时正样本和负样本的CDFs非常相似。然而,随着γ的增加,更多的重量就集中在负面的例子。事实上,随着γ= 2(默认设置),绝大多数的损失来自于一小部分样本。可以看出,FL可以有效地降低容易否定的影响,将所有的注意力集中在难负的样本上。
在线难例挖掘:Shrivastava等人提出利用高损失的样例构造小批量,提高两阶段检测器的训练水平。具体地说,在OHEM中,每个样例都根据其损失进行评分,然后应用非最大抑制(Non-Maximum Suppression, NMS),并使用损失最大的示例构建一个 mini-batch处理。NMS阈值和批大小是可调参数。像FL一样,OHEM更强调错误分类的例子,但不像FL, OHEM完全抛弃了简单的例子。我们还实现了在SSD中使用的OHEM的变体:在将NMS应用于所有实例之后,构造mini-batch来强制执行正负比为1:3,以帮助确保每个mini-batch有足够的正负比。
我们测试了两个OHEM变异在我们的设置一个阶段的检测,其中有很大的类不平衡。原始OHEM策略和选定批次大小和NMS阈值的“OHEM 1:3”策略的结果如表1d所示。这些结果使用ResNet-101,我们的baseline训练与FL达到36.0 AP为这一设置。相比之下,OHEM的最佳设置(no . 1:3 ratio, batch size 128, nms .5)达到了32.8 AP,这是3.2 AP的差距,说明FL比OHEM更适用于密集检测器的训练。我们注意到,我们尝试了OHEM的其他参数设置和变体,但没有获得更好的结果。
Hinge Loss:最后,在早期的实验中,我们尝试用Hinge Loss对进行训练,使损失在一定值以上为0,但是这是不稳定的,我们没有得到有意义的结果。
我们使用与之前相同的设置训练RetinaNet-50-600,但我们使用选定的参数将FL换为FL*(见3.5节)。 这些模型获得的AP几乎与使用FL训练的模型相同,见表2。 换句话说,FL是在实践中运行良好的FL的一个合理的替代。
我们发现不同的和设置都有很好的结果。 在图7中,我们展示了RetinaNet-50-600在大范围参数下的FL结果。 损失图用颜色编码,有效设置(模型收敛且AP大于33.5)用蓝色表示。 在所有的实验中我们用了。 可以看出,减少分类良好的示例(> 0)权重的损失是有效的。 更一般地,我们期望任何具有与FL或fl相似性质的损失函数都是同样有效的。
Anchor密度:在单阶段检测系统中,最重要的设计因素之一是它覆盖可能的图像框空间的密集程度。两阶段可以使用区域池化操作对任何位置、比例和宽高比的框进行分类。相比之下,由于单阶段检测器使用固定的采样网格,这些方法中实现框高覆盖率的一种流行方法是在每个空间位置使用多个“锚”来覆盖不同尺度和长宽比的盒子。
在FPN中,我们遍历了在每个空间位置和每个金字塔级别上使用的比例尺和宽高比锚的数量。我们考虑了4个ovtave尺度()和3个宽高比(0.5,1,2)的情况,从每个位置的一个方形锚到每个位置的12个锚。使用ResNet-50的结果如表1c所示。一个非常好的AP(30.3)只需要一个方形锚就可以实现。然而,当使用3个比例尺和每个位置的3个宽高比时,AP可以提高近4个点(到34.0)。我们在这项工作的所有其他实验中都使用了这种设置。
最后,我们注意到超过6-9个锚点并没有显示出进一步的增长。因此,虽然两阶段系统可以对图像中的任意盒子进行分类,但性能关于密度的饱和意味着更高的两阶段系统密度可能不会带来优势。
速度和精度:
较大的骨干网络具有更高的精度,但推理速度也较慢。同样,对于输入图像缩放(由较短的图像边定义)。我们在表1e中显示了这两个因素的影响。在图2中,我们绘制了RetinaNet的速度/精度折中的曲线,并将其与最近使用COCO test-dev上的公开数量的方法进行了比较。图中显示,RetinaNet由我们的Focal Loss所支持,在所有现有的方法上形成了一个上包络线,忽略了低精度的情况。ResNet-101-FPN为骨干的ResNet和600像素的尺度(我们表示RetinaNet-101 -600为简单起见)匹配的准确性最近发表ResNet - 101 FPN的R-CNN,同时运行在122 ms /图像相比,172 ms(衡量一个Nvidia M40 GPU)。使用更大的尺度可以使RetinaNet的精度超过所有两阶段的方法,同时仍然更快。对于更快的运行时,使用ResNet-50-FPN仅在一个操作点(500像素输入)上优于ResNet-101-FPN。解决高帧速率的机制可能需要特殊的网络设计,就像在中一样,并且超出了这项工作的范围。我们注意到,在发表后,现在可以从中获得更快、更准确的结果的一个变种Faster R-CNN。
我们在具有挑战性的COCO数据集上评估了RetinaNet,并将测试开发结果与最新的最先进的方法(包括单阶段和两阶段模型)进行了比较。我们使用scale抖动训练的RetinaNet-101-800模型的结果如表2所示,其时间比表1e中的模型长1.5倍(AP增益为1.3)。与现有的单阶段方法相比,我们的方法与最接近的竞争对手DSSD的AP差距达到了5.9点(39.1 vs. 33.2),同时也更快,见图2。与目前的两阶段方法相比,RetinaNet比性能最好的基于Inception-ResNet-v2-TDM的Fast R-CNN模型高出2.3个点。插入ResNeXt-32x8d-101-FPN作为支持网络主干,进一步提高了1.7 AP的效果,超过了COCO上的40 AP。
在这项工作中,我们确定类不平衡是阻止单阶段目标检测器超越性能最好的两级方法的主要障碍。为了解决这个问题,我们提出了Focal Loss,它应用一个调制项的交叉熵损失,以便集中学习难负例子。我们的方法简单而高效。我们通过设计一个全卷积单级检测器来证明其有效性,并报告了大量的实验分析,结果表明,它达到了最先进的精度和速度。
Focal Loss的确切形式并不重要。现在,我们展示了焦损失的另一个实例,它具有类似的属性,并产生类似的结果。下面还对焦损的性质提供了更多的了解。我们首先考虑交叉熵(CE)和焦损耗(FL),它们的形式与正文略有不同。具体来说,我们定义一个量如下:
其中和之前一样指的是ground truth类,最后。当时,一个样例分类正确,其中。以的形式定义Focal Loss的替换形式。定义和的形式如下,
有γ和β两个参数,控制损失曲线陡度和转变。在CE旁边选择γ和β两个参数来绘制,我们选择。可以看到,像FL,所选参数减少损失分配给好分类的例子。我们使用与之前相同的设置训练了RetinaNet-50-600,但是我们将FL替换为带有所选参数的FL。这些模型获得的AP与使用FL训练的AP几乎相同,见表3。换句话说,对于在实践中工作良好的FL, FL是一个合理的选择。
我们发现不同γ和β设置了好结果。在图7中,我们显示了针对广泛参数集使用FL作为辅助剂的RetinaNet-50-600的结果。损失图是用颜色编码的,因此有效的设置(模型收敛,AP大于33.5)用蓝色表示。我们使用α= 0.25在所有实验中为了简单起见可以看出,对分类良好的例子(> 0)进行降权的损失是有效的。更一般地,我们希望具有类似于FL或FL属性的任何损失函数都是同样有效的。
作为参考,CE、FL、FL*对x的微分分类为:
图6显示了所选设置的图。对于所有的损失函数,高置信度预测的导数都趋于-1或0。但是,与CE不同的是,对于FL和FL的有效设置,只要,导数就很小。