论文
迄今为止,最高精度的对象检测器基于R-CNN推广的两阶段方法,其中将分类器应用于稀疏的候选对象位置集。 相比之下,应用于可能物体位置的规则,密集采样的一级检测器可能会变得更快,更简单,但到目前为止,其精度已经落后于二级检测器。 在本文中,我们调查了为什么会这样。 我们发现,在密集探测器的训练过程中遇到的极端前景-背景类别失衡是主要原因。 我们建议通过重塑标准交叉熵损失来解决此类不平衡问题,从而降低分配给分类良好的示例的损失。 我们的新提出的交叉损失将培训重点放在了稀疏的困难示例上,并防止了在培训过程中大量的简单负片使检测器重负。 为了评估损失的有效性,我们设计并训练了一个简单的密集检测器,称为RetinaNet。 我们的结果表明,经过聚焦损失训练后,RetinaNet能够与以前的一级检测器的速度相匹配,同时超过所有现有的最先进的二级检测器的精度。
当前最先进的对象检测器基于两阶段的提案驱动机制。 正如在R-CNN框架中流行的那样[11],第一阶段生成稀疏的候选对象位置集,第二阶段使用卷积神经网络将每个候选位置分类为前景类之一或背景类别。 通过一系列进展[10,28,20,14],此两阶段框架始终在具有挑战性的COCO基准测试中实现最高准确性[21]。
尽管两级检测器取得了成功,但一个自然的问题是:一个简单的一级检测器能否达到类似的精度? 将一级检测器应用于对象位置,比例和纵横比的定期密集采样。 YOLO [26,27]和SSD [22,9]等一级检测器的最新工作证明了令人鼓舞的结果,相对于最新的两级方法,该检测器的速度更快,准确度在10-40%以内。本文进一步推动了这一领域的发展:我们提出了一种单级目标检测器,该检测器首次与更复杂的两级探测器的最新COCO AP相匹配,例如功能金字塔网络(FPN)[20]或Faster R-CNN [28]的变体:Mask R-CNN [14]。为了获得此结果,我们将训练期间的类不平衡确定为阻碍一级检测器实现最新精度的主要障碍,并提出了消除这种障碍的新损失函数。
类R-CNN探测器中的类不平衡是通过两级级联和采样启发法解决的。 提议阶段(例如,选择性搜索[35],EdgeBoxes [39],DeepMask [24、25],RPN [28])将候选对象位置的数量迅速缩小为少量(例如1-2k),过滤掉大多数背景样本。 在第二个分类阶段,执行采样试探法,例如固定的前景与背景之比(1:3)或在线硬示例挖掘(OHEM)[31],以维持前景和背景之间的可管理平衡。
相反,一级检测器必须处理在整个图像上定期采样的大量候选对象位置。 实际上,这通常需要枚举约100k个位置,这些位置密集地覆盖了空间位置,比例和纵横比。 尽管也可以使用类似的采样启发法,但是它们效率低下,因为训练过程仍然由容易分类的背景示例主导。 这种效率低下是对象检测中的经典问题,通常会通过自举[33,29]或硬示例挖掘[37,8,31]等技术解决。
在本文中,我们提出了一个新的损失函数,该函数可以作为替代以前用于处理类不平衡问题的方法的更有效的替代方法。 损失函数是动态缩放的交叉熵损失,其中,随着对正确类别的置信度增加,缩放因子会衰减为零,请参见图1。直观地讲,该缩放因子可以自动降低简单示例的权重。 训练并迅速将模型集中在困难的例子上。 实验表明,我们提出的“焦点损失”使我们能够训练一种高精度的一级检测器,该方法在采样启发式方法或辛苦的示例挖掘(过去最先进的训练技术)方面明显优于其他训练方法 一级检测器。 最后,我们注意到焦点损失的确切形式并不重要,并且我们显示了其他实例化也可以实现类似的结果。
为了证明所提出的焦点损失的有效性,我们设计了一个简单的称为RetinaNet的单阶段物体检测器,该检测器以其在输入图像中对物体位置的密集采样而命名。其设计具有高效的网络内特征金字塔和锚框的使用。 它借鉴了[22,6,28,20]中的各种最新观点。RetinaNet是高效且准确的;我们基于ResNet-101FPN骨干网的最佳模型在以5 fps的速度运行时,可达到39.1的COCO测试开发AP,超过了先前发布的最好的一阶段和两阶段检测器的单模型结果,请参见 图2。
经典对象检测器:滑动窗口范例,其中将分类器应用于密集的图像网格,具有悠久而丰富的历史。 最早的成就之一是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 R CNN框架[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]和DPM [8],以及最新方法,如SSD [22],在训练过程中都面临着很大的类不平衡。这些检测器每个图像评估 1 0 4 − 1 0 5 10^4-10^5 104−105个候选位置,但是只有少数几个位置包含对象。 这种不平衡会导致两个问题:(1)培训效率低下,因为大多数位置都是简单的否定词,没有任何有用的学习信号; (2)整体而言,简单的负样本(easy negative example)会淹没训练并导致模型退化。 常见的解决方案是执行某种形式的硬性否定挖掘[33、37、8、31、22],这种形式在训练或更复杂的采样/称重方案[2]期间会采样一些困难的例子。 相反,我们表明,我们提出的焦损自然可以处理一级检测器所面临的类不平衡,并使我们能够有效地训练所有示例,而无需进行采样,并且没有容易的negative example使损失和计算出的梯度不堪重负的情况。
稳健估计:人们对设计稳健损失函数(如Huber损失[13])非常感兴趣,该函数通过降低具有较大误差的实例(硬实例)的损失权重来减少异常值的贡献。相反,我们的焦点损失不是处理异常值,而是通过降低内联(简单示例)的权重来处理类不平衡,这样即使它们的数量很大,它们对总损失的贡献也很小。换言之,焦点损失扮演着与稳健损失相反的角色:它将训练集中在一组稀疏的硬例子上.
焦点损失旨在解决在训练过程中前景和背景类别之间存在极端不平衡的一阶段对象检测场景(例如1:1000)。我们从二元分类的交叉熵(CE)损失开始介绍焦点损失:
在上面的y∈{±1}中,指定了真相类别,而p∈[0,1]是模型对带有标签y = 1的类别的估计概率。为方便起见,我们定义 p t p_{t} pt:
并重写 C E ( p , y ) = C E ( p t ) = − l o g ( p t ) CE(p,y)= CE(p_{t})=-log(p_{t}) CE(p,y)=CE(pt)=−log(pt)
CE损失在图1中可以看成是蓝色(顶部)曲线。这种损失的一个显着特性(在其图上可以很容易看出)是,即使是容易分类的示例( p t p_{t} pt>> .5) )带来不小的幅度的损失。如果将大量简单的示例相加,这些小的损耗值可能会使稀有类别不堪重负。
解决类不平衡问题的常用方法是为类1引入加权因子α∈[0,1],为类-1引入加权因子1-α。 在实践中,α可以通过逆类频率设置,也可以视为通过交叉验证设置的超参数。 为了符号上的方便,我们类似于定义pt的方式定义αt。 我们将α平衡CE损失写为:
C E ( p t ) = − α t l o g ( p t ) (3) CE(p_{t}) = - \alpha_{t} log(p_{t}) \tag{3} CE(pt)=−αtlog(pt)(3)
这种损失是对CE的简单扩展,我们认为这是我们提议的焦点损失的实验基准
正如我们的实验将显示的那样,在密集探测器的训练过程中遇到的大量类失衡压倒了交叉熵损失。 容易分类的负值构成了损耗的大部分,并主导了梯度。 尽管α平衡了正面/负面例子的重要性,但它并未区分简单/困难例子。 相反,我们建议将损失函数重塑为轻量化的简单示例,从而将训练重点放在硬例子上。
更正式地说,我们建议在交叉熵损失上添加一个调制因子 ( 1 − p t ) γ (1-p_{t})^γ (1−pt)γ,并且可调聚焦参数γ≥0。我们将聚焦损失定义为:
F L ( p t ) = − ( 1 − p t ) γ l o g ( p t ) (4) FL(p_{t}) = -(1-p_{t})^γlog(p_{t})\tag{4} FL(pt)=−(1−pt)γlog(pt)(4)
对于图1中的γ∈[0,5]的几个值,可以看到聚焦损耗。我们注意到聚焦损耗(Focal Loss)的两个属性:(1)当示例分类错误且pt较小时,调制因子接近1,并且损失不受影响。 当pt→1时,因子接近为为0,并且对分类良好的示例的损失进行了降低加权。(2)聚焦参数γ平滑地调整了简单示例的权重。当γ= 0时,FL等效于CE,并且随着γ的增加,调制因子的作用也会增加(我们发现γ= 2在我们的实验中效果最好)。
直观地,调制因子从简单的示例中减少了损失贡献,并扩展了示例获得低损失的范围。 例如,在γ= 2的情况下,与CE相比,分类为pt = 0.9的示例的损失将降低100倍,而对于pt≈0.968的示例,其损失将降低1000倍。 这反过来增加了纠正错误分类示例的重要性(对于pt≤0.5和γ= 2,其损失最多缩小4倍)。
实际上,我们使用焦点损失的α平衡变体:
我们在实验中采用这种形式,因为与非α平衡形式相比,它产生的精度略有提高。 最后,我们注意到损耗层的实现将用于计算p的Sigmoid运算与损失计算结合在一起,从而带来了更大的数值稳定性。
虽然在我们的主要实验结果中,我们使用了上面的焦点损失定义,但其精确形式并不重要。 在附录中,我们考虑了焦点损失的其他实例,并证明了这些实例同样有效。
默认情况下,将二进制分类模型初始化为具有相等的概率输出y = -1或1的概率。 在这样的初始化下,在类别失衡的情况下,由于类频繁而造成的损失可能占总损失的大部分,并导致早期训练的不稳定。 为了解决这个问题,我们在训练开始时就引入了“先验”的概念,即稀有类别(前景)的模型所估计的p值。 我们用π表示先验,并对其进行设置,以使模型对稀有类别示例的估计p是低的,例如 0.01。 我们注意到这是模型初始化(参见第4.1节)的变化,而不是损失函数的变化。 我们发现这可以在重类失衡的情况下提高交叉熵和焦点损失的训练稳定性。
通常在不使用α平衡或我们建议的损耗的情况下,利用交叉熵损耗训练两级检测器。取而代之的是,它们通过两种机制来解决类不平衡问题:(1)两阶段级联和(2)偏差小批量采样。 第一个级联阶段是对象建议机制[35、24、28],它将可能对象位置的几乎无限集合减少到一千或两千。重要的是,选定的提议不是随机的,而是可能对应于真实的对象位置,从而消除了大多数容易产生的负面影响。 在训练第二阶段时,通常使用偏差采样来构建包含例如正例与否定例之比为1:3的微型批次。 该比率类似于通过采样实现的隐式平衡因子。 我们建议的焦点损失旨在通过损失函数直接在一级检测系统中解决这些机制。
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表示金字塔级别( P l P_{l} Pl的分辨率比输入的分辨率低 2 l 2^l 2l)。 与[20]中一样,所有金字塔等级都有C = 256个通道。 金字塔的详细信息通常会在[20]中有一些适度的差异。尽管许多设计选择都不是至关重要的,但我们强调FPN主干的使用是关键。 仅使用最终ResNet层的功能进行的初步实验产生的AP较低。
锚:我们使用类似于[20]中RPN变体的平移不变锚框。 锚点分别在金字塔级别P3至P7上具有 3 2 2 32^2 322至 51 2 2 512^2 5122的区域。 如[20]中所示,在每个金字塔级别,我们使用三个纵横比{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个锚点,并且相对于网络的输入图像,每个级别覆盖的比例范围为32813像素。
每个锚点被分配一个长度为K的分类目标热矢量,其中K为对象类别的数量,以及一个4维框回归目标矢量。 我们使用RPN [28]中的分配规则,但对多类检测进行了修改,并调整了阈值。 具体地说,使用超过并集(IoU)阈值0.5的交集将锚分配给真值对象框;如果其IoU在[0,0.4]中,则将锚分配给背景。 由于每个锚点最多分配给一个对象框,因此我们将其长度K标签向量中的相应条目设置为1,将所有其他条目设置为0。如果未分配锚,则锚可能在[0.4,0.5)中重叠,则在训练过程中将被忽略。 框回归目标被计算为每个锚点与其分配的对象框之间的偏移量;如果没有分配,则将其省略。
分类子网:分类子网针对A个定位点和K个对象类别的每个空间位置预测对象存在的概率。 该子网是连接到每个FPN级别的小型FCN。 该子网的参数在所有金字塔级别之间共享。 它的设计很简单。 从给定的金字塔级别获取具有C个通道的输入要素图,子网将应用四个3×3卷积层,每个层具有C过滤,每个层都具有ReLU激活,然后是具有KA滤镜的3×3转换层。最后,将S型激活附加到每个空间位置以输出KA二进制预测值,请参见图3(c)。 在大多数实验中,我们使用C = 256和A = 9。
与RPN [28]相反,我们的对象分类子网更深,仅使用3×3转换,并且不与框回归子网共享参数(如下所述)。 我们发现这些较高级别的设计决策比超参数的特定值更重要。
盒子回归子网:与对象分类子网平行,我们将另一个小型FCN附加到每个pyramid层,目的是将每个锚定盒子的偏移量回归到附近的真实对象(如果存在)。盒子回归子网的设计与分类子网相同,不同之处在于它在每个空间位置以4A线性输出端接,请参见图3(d)。 对于每个空间位置的A个锚点,这4个输出预测了锚点与地面真值框之间的相对偏移(我们使用R CNN [11]中的标准框参数化)。 我们注意到,与最近的工作不同,我们使用与类无关的包围盒回归器,该回归器使用较少的参数,并且发现同样有效。 尽管对象分类子网和Box回归子网具有相同的结构,但它们使用单独的参数。
推论:RetinaNet形成一个由ResNet-FPN主干,分类子网和框式回归子网组成的单个FCN,请参见图3。因此,推论只涉及通过网络前向传播图像。 为了提高速度,我们仅在将检测器置信度设为0.05阈值后,才从每个FPN级别最多1k最高得分预测中解码出框预测。 合并所有级别的最高预测,并应用阈值0.5的非最大抑制来产生最终检测结果。
焦点损失:我们使用这项工作中引入的焦点损失作为分类子网输出的损失。 正如我们将在§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子网中,除最后一层外,所有新的conv层均使用偏差b = 0初始化,并且使用σ= 0.01的高斯权重填充。 对于分类子网的最终卷积层,我们将偏差初始化设置为b = -log((1-π)/π),其中π指定为:开始训练时,应将每个锚点标记为前景,置信度约为π。 在所有实验中,我们使用π= 0.01,尽管结果对精确值具有鲁棒性。 如第3.3节所述,此初始化可防止大量背景锚在训练的第一次迭代中生成较大的破坏稳定的损失值。
优化:RetinaNet经过随机梯度下降(SGD)培训。 我们在8个GPU上使用了同步SGD,每个小批量总共16张图像(每个GPU 2张图像)。除非另有说明,否则所有模型的初始学习率均为0.01,然后进行90k迭代训练,然后在60k中除以10,然后在80k迭代中除以10。 除非另有说明,否则我们将水平图像翻转用作数据增强的唯一形式。 使用0.0001的重量衰减和0.9的动量。 训练损失是用于框回归的焦点损失和标准平滑L1损失之和[10]。 表1e中模型的训练时间介于10到35小时之间。
我们在具有挑战性的COCO基准测试[21]的边界框检测轨迹上展示了实验结果。对于训练,我们遵循惯例[1,20],并使用COCO trainval35k分割(来自训练的80k图像和来自40k图像分割的35k图像子集的联合)。 我们通过评估最小分裂(来自val的剩余5k图像)来报告病变和敏感性研究。 对于我们的主要结果,我们报告了test-dev分组中的COCO AP,该分组没有公共标签,需要使用评估服务器。
我们运行了许多实验来分析用于密集检测的损失函数的行为以及各种优化策略。 对于所有实验,我们将深度50或101 ResNets [16]与顶部构造的特征金字塔网络(FPN)[20]一起使用。 对于所有消融研究,我们使用600像素的图像比例进行训练和测试。
网络初始化:我们训练RetinaNet的首次尝试是使用标准交叉熵(CE)损失,而无需对初始化或学习策略进行任何修改。 这很快就会失败,并且在训练期间网络会发散。但是,只需初始化模型的最后一层,以使检测到物体的先验概率为π= .01(请参阅第4.1节),便可以进行有效的学习。 使用ResNet-50对RetinaNet进行培训,并且此初始化已在COCO上产生了可预期的30.2 AP。 结果对π的确切值不敏感,因此我们对所有实验都使用π= 0.01。
平衡交叉熵:我们改善学习的下一个尝试涉及使用第3.1节中所述的α平衡CE损失。 表1a中显示了各种α的结果。 设置α= 0.75可获得0.9点AP的增益。
焦点损失:使用我们建议的焦点损失的结果在表1b中显示。 聚焦损耗引入了一种新的超参数,即聚焦参数γ,它控制调制项的强度。 当γ= 0时,我们的损耗等于CE损耗。 随着γ的增加,损耗的形状也会发生变化,从而使低损耗的“简单”示例得到进一步的折扣,请参见图1。随着γ的增大,FL显示出比CE大的增益。 当γ= 2时,与α平衡的CE损耗相比,FL的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可以有效地抵消简单否定词的影响,将所有注意力都集中在困难的否定例子上。
在线硬示例挖掘(OHEM):[31]提出通过使用高损耗示例构建微型批处理来改进两级检测器的训练。 具体而言,在OHEM中,每个示例均按其损失评分,然后应用非最大抑制(nms),然后使用损失最大的示例构建一个最小批量。 nms阈值和批次大小是可调参数。 像焦点损失一样,OHEM更加强调错误分类的示例,但是与FL不同,OHEM完全放弃了简单的示例。 我们还实现了SSD中使用的OHEM的一种变体[22]:在将nms应用于所有示例之后,微型批次的构造是强制正负之间的比例为1:3,以帮助确保每个微型批次具有足够的正电荷。
我们在一级不平衡的一级检测设置中测试了这两种OHEM变体。 表1d显示了原始OHEM策略和选定批次大小和nms阈值的“ OHEM 1:3”策略的结果。 这些结果使用ResNet-101,经过FL训练的基线在此设置下达到36.0 AP。 相比之下,OHEM的最佳设置(无1:3的比例,批量大小128,nms为0.5)达到32.8 AP。 这是3.2 AP的差距,表明FL在训练密集检测器方面比OHEM更有效。
我们注意到,我们为OHEM尝试了其他参数设置和变体,但没有获得更好的结果。
铰链损耗:最后,在早期的实验中,我们尝试使用pt上的铰链损耗[13]进行训练,该函数将pt的损耗值设置为高于某个值pt。 但是,这是不稳定的,我们未能获得有意义的结果。 探索替代损失函数的结果在附录中。
锚点密度:在一个阶段的检测系统中,最重要的设计因素之一是其覆盖可能的图像框空间的密度。 两级检测器可以使用区域合并操作[10]将框按任何位置,比例和纵横比进行分类。 相反,由于一级检测器使用固定的采样网格,因此在这些方法中实现框的高覆盖率的一种流行方法是在每个空间位置使用多个“锚点” [28]来覆盖各种比例和纵横比的框。
我们遍历了FPN中每个空间位置和每个金字塔级别使用的杂音的比例和纵横比的数量。 我们考虑了从每个位置的单个方锚到每个位置的12个锚的情况,这些锚跨越4个子倍频程标度(2 k / 4,k≤3)和3个纵横比[0.5,1,2]。 使用ResNet-50的结果如表1c所示。 仅使用一个方形锚即可获得令人惊讶的良好AP(30.3)。但是,当每个位置使用3个比例和3个纵横比时,AP可以提高近4点(至34.0)。 在这项工作中,我们将此设置用于所有其他实验。
最后,我们注意到锚点数超过6-9并没有显示出进一步的增长。 因此,尽管两级系统可以对图像中的任意框进行分类,但性能的饱和度为w.r.t。 密度意味着两阶段系统的较高潜在密度可能无法提供优势。
速度与准确性:较大的骨干网可获得较高的准确性,但推理速度也较慢。 对于输入图像比例(由较短的图像侧定义)也是如此。我们在表1e中显示了这两个因素的影响。 在图2中,我们绘制了Reti naNet的速度/精度折衷曲线,并将其与在COCO test-dev上使用公共数字啤酒的最新方法进行了比较。 该图显示,由于我们的焦距损失,RetinaNet构成了所有现有方法的上限,低估了低精度体制。 带有ResNet-101-FPN的RetinaNet和600像素的图像比例尺(为简单起见,我们由RetinaNet-101-600表示)与122上运行的ResNet101-FPN Faster R-CNN [20]的准确性相匹配。 每张图片的毫秒数为172毫秒(两者均在Nvidia M40 GPU上测量)。 使用更大的比例尺,RetinaNet可以超越所有两阶段方法的准确性,同时仍会更快。 为了更快的运行时间,只有一个工作点(500像素输入)比使用ResNet-101-FPN可以更好地使用ResNet-50-FPN。 如[27]所述,解决高帧速率机制可能需要特殊的网络设计,这超出了这项工作的范围。 我们注意到,发布后,现在可以通过[12]的Faster R-CNN变体获得更快,更准确的结果。
我们在具有挑战性的COCO数据集上评估RetinaNet,并将测试开发结果与包括一阶段和两阶段模型在内的最新技术进行比较。表2列出了使用比例抖动训练的RetinaNet-101-800模型的结果,其结果比表1e中的模型长1.5倍(获得1.3 AP增益)。 与现有的一阶段方法相比,我们的方法与最接近的竞争对手DSSD [9]相比,健康的AP差距达到了5.9点(39.1 vs. 33.2),而且速度更快,请参见图2。与最近的两阶段方法相比 在基于Inception-ResNet-v2-TDM的[32]方法上,RetinaNet比性能最高的Faster R-CNN模型高出2.3个点。 随着RetinaNet主干网进一步完善,插入ResNeXt32x8d-101-FPN [38]可进一步提高结果1.7 AP,超过COCO 40 AP。
在这项工作中,我们将类别不平衡确定为防止一级对象检测器超越性能最高的二级方法的主要障碍。 为了解决这个问题,我们提出了焦距损失,该焦距损失将调制项应用于交叉熵损失,以便将学习重点放在困难的负面例子上。 我们的方法简单有效。 我们通过设计一个完全卷积的一级检测器来证明其功效,并报告了广泛的实验分析,结果表明该方法达到了最新的准确性和速度。 源代码可从https://github.com/facebookresearch/Detectron [12]获得。
焦点损失的确切形式并不重要。 现在,我们显示具有类似特性的焦距的替代实例,并产生可比较的结果。 以下还提供了更多关于焦点损失特性的见解。
我们首先以与正文稍有不同的形式来考虑交叉熵(CE)和焦点损失(FL)。 具体来说,我们定义数量 x t x_{t} xt如下:
x t = y x , (6) x_{t} = yx,\tag{6} xt=yx,(6)
其中y∈{±1}像以前一样指定了真相类别。然后,我们可以写成pt =σ(xt)(这与公式2中pt的定义兼容)。 当xt> 0时正确分类,在这种情况下pt> .5。
现在,我们可以根据xt定义焦距的另一种形式。 我们将 p t ∗ 和 F L ∗ p^ ∗_{ t}和FL^ ∗ pt∗和FL∗定义如下:
FL ∗具有两个参数γ和β,它们控制损耗曲线的陡度和偏移。 我们在图5中与CE和FL一起绘制了γ和β的两个选定设置的FL ∗。 可以看出,像FL一样,具有选定参数的FL ∗减少了分配给分类充分的示例的损失。
我们使用与以前相同的设置对RetinaNet-50-600进行了训练,但是我们用选定的参数将FL替换为FL*。 这些模型获得的AP与使用FL训练的AP几乎达到相同的AP,请参见表3。换句话说,FL*是FL的合理替代方案,在实践中效果很好。
我们发现,各种γ和β设置均可提供良好的结果。在图7中,我们显示了带FL∗的RetinaNet-50-600的各种参数的结果。 损耗图用颜色编码,有效设置(收敛模型且AP超过33.5)以蓝色显示。 为简单起见,我们在所有实验中均使用α= .25。 可以看出,减少分类良好的示例(xt> 0)的权重的损失是有效的。
更普遍地,我们期望具有与FL或FL *类似特性的任何损失函数同样有效。
作为参考,得出CE,FL和FL∗关于x的偏导数:
所选设置的曲线如图6所示。对于所有损失函数,对于高置信度预测,导数趋于-1或0。 但是,与CE不同,对于FL和FL ∗的有效设置,只要xt> 0,导数就很小。