摘要
迄今为止最高精度的物体检测器是由两级组成的检测器,典型代表是R-CNN,其中R-CNN的分类器被应用于有很少元素的预选框集。相反,一级检测器被更加广泛地使用,密集的区域预选使网络有可能变得更快更简单,但到目前为止,其检测的准确性仍落后于两级检测器。在本文中,我们讨论了为什么会出现这样的情况。我们发现在训练密集检测器的过程中遇到的极端的前景 - 背景类不平衡是造成一级检测器准确性较差的主要原因。我们提出解决这一类不平衡问题的方法:通过重塑标准交叉熵损失,以降低分配给分类良好的样本的损失。在训练阶段,我们新颖的Focal Loss专注于那些很少但很难被分类的样本上,以防止大量的容易被分类的负样本在训练期间主导检测器的训练。为了评估我们损失函数的有效性,我们设计并训练了一个简单的密集检测器,我们称之为RetinaNet。我们的结果表明,在用焦点损失训练时,RetinaNet能够匹配以前的一级检测器的速度,同时精度超过所有现有的最先进的两级检测器。
一、介绍
当前最优秀的目标检测器使用的都是一种由 proposal 驱动的 two-stage 机制。和在 R-CNN 框架中一样,第一个阶段生成一个候选目标位置组成的稀疏样本集,第二个阶段使用一个卷积神经网络将各候选位置归至 foreground 类别或 background 类别。随着这些文字的改进[10,28,20,14],two-stage 框架可以在难度极高的 COCO benchmark 上一直保持很高的准确度。
既然 two-stage 检测器的结果这么好,那么一个很自然的问题是:简单的 one-stage 检测器是否也能实现类似的准确度? one-stage 检测器主要应用在由目标位置(object locations)、尺度(scales)和长宽比(aspect ration)组成的规则密集样本集上。最近对 one-stage 检测器(如 YOLO 和 SSD)进行的试验都得出了优秀的结果,相比最优秀的 two-stage 方法,one-stage 检测器速度更快,而且能实现 10%- 40% 的准确度。
本文进一步提高了 one-stage 检测器的性能:我们设计出了一个 one-stage 目标检测器,并首次达到了更复杂的 two-stage 检测器所能实现的最高 COCO 平均精度,例如FPN(特征金字塔网络,Feature Pyramid Network) 或 Mask R-CNN(Faster R-CNN的变体)。我们发现训练过程中的类别失衡是阻碍单阶段检测器实现这个结果的主要障碍,并提出了一种新的损失函数来消除这个障碍。
R-CNN 检测器通过两阶段的级联(cascade)和启发式采样(sampling heuristics)解决类别失衡问题。Proposal 阶段(如Selective Search、EdgeBoxes 、DeepMask 和 RPN)可以快速地将候选目标位置的数目缩至更小(例如 1000-2000),过滤掉大多数背景样本。在接下来的分类阶段中,应用启发式抽样法(sampling heuristics),例如一个固定的前景样本背景样本比(1:3),或者在线困难样本挖掘法(online hard example mining),在 foreground 样本和 background 样本之间维持可控的平衡。
相反,one-stage 检测器则必须处理一个由图像中规则分布的候选目标位置组成的大样本集。在实践中,目标位置的总数目通常可达 10 万左右,并且密集覆盖空间位置、尺度和长宽比。虽然还可以应用类似的抽样启发法,但是这些方法在易分类的背景样本支配训练过程的情况下依然会失效。这种失效是目标识别中的一个典型问题,通常使用 bootstrapping 或困难样本挖掘来解决。
在本文中,我们提出了一个新的损失函数,它可以替代以往用于解决类别失衡问题的方法。这个损失函数是一个动态缩放的交叉熵损失函数,随着正确分类的置信度增加,函数中的比例因子缩减至零,见图1。在训练过程中,这个比例因子可以自动地减小简单样本的影响,并快速地将模型集中在困难样本上。试验证明,Focal Loss 函数可以使我们训练出准确度很高的 one-stage 检测器,并且在性能上超越使用抽样启发法或困难样本挖掘法等以往优秀方法训练出的 one-stage 检测器。最后,我们发现 Focal Loss 函数的确切形式并不重要,并且证明了其他实例(instantiations)也可以实现类似的结果。
图1:我们提出了一种新的损失函数 Focal Loss(焦点损失),这个损失函数在标准的交叉熵标准上添加了一个因子 (1- pt) γ 。设定 γ > 0 可以减小分类清晰的样本的相对损失(pt > .5),使模型更加集中于困难的错误分类的样本。试验证明,在存在大量简单背景样本(background example)的情况下,我们提出的 Focal Loss 函数可以训练出准确度很高的密集对象检测器。
为了证明这个 Focal Loss 函数的有效性,我们设计了一个简单的 one-stage 目标检测器—RetinaNet,它会对输入图像中目标位置进行密集抽样。这个检测器有一个高效的 in-network 特征金字塔(feature pyramid),并使用了锚点盒(anchor box)。我们在设计它时借鉴了很多种想法[22,6,28,20]。RetinaNet 的检测既高效又准确。我们最好的模型基于 ResNet-101- FPN 骨干网,在 5fps 的运行速度下,我们在 COCO test-dev 上取得了 39.1 AP 的成绩,如图2 所示,超过目前公开的单一模型在 one-stage 和 two-stage 检测器上取得的最好成绩。
图2:横坐标是检测器在COCO test-dev 上的检测速度(ms),纵坐标是准确度(AP: average precision)的比值。在 Focal Loss 的作用下,我们简单的 one-stage RetinaNet 检测器打败了先前所有的 one-stage 检测器和 two-stage 检测器,包括目前成绩最好的 Faster R-CNN系统。我们在图 2 中按 5 scales(400-800 像素)分别用蓝色圆圈和橙色菱形表示了 ResNet-50-FPN 和 ResNet-101-FPN 的 RetinaNet 变体。忽略准确度较低的情况(AP < 25),RetinaNet 的表现优于当前所有的检测器,训练时间更长时的检测器达到了 39.1 AP 的成绩。
二、相关工作
经典的目标检测器: 滑动窗口范例,在稠密的图像网格上应用一个分类器,有着悠久而丰富的历史。最早的成功之一是LeCun等人的经典工作,他们将卷积神经网络应用于手写数字识别[19,36]。Viola和Jones[37]使用了增强的物体探测器来检测人脸,导致了这类模型的广泛采用。[4]介绍了HOG和积分通道的特点,[5]产生了有效的行人检测方法。DPMs[8]帮助将稠密检测器扩展到更一般的对象类别,并且多年来在PASCAL[7]上都获得了最好的结果。虽然滑动窗口方法是经典计算机视觉中领先的检测范式,但随着深度学习[18]的兴起,接下来描述的两级检测器很快占据了目标检测的主导地位。
两阶段探测器: 现代目标探测的主导范式是基于两阶段方法。正如在选择性搜索工作[35]中所开创的,第一阶段生成一个稀疏的候选建议集,它应该包含所有的对象,同时过滤掉大部分的负面位置,第二阶段将建议分类到前景类/背景类。R-CNN[11]将第二阶段分类器升级为卷积网络,准确率大幅提高,迎来了目标检测的现代时代。R-CNN在过去几年里得到了改进,无论是在速度方面[15,10]还是通过使用学习对象proposal[6,24,28]。区域建议网络(Region Proposal Networks, RPN)将提案生成与第二阶段分类器集成到一个单一卷积网络中,形成速度更快的RCNN框架[28]。对该框架的许多扩展已被提出,例如[20,31,32,16,14]。
一阶段探测器: OverFeat[30]是第一个现代的基于深度