SSD:单镜头多盒检测器
目录
摘要
我们提出了一种利用单一的深度神经网络来检测图像中的目标的方法。我们的方法名为SSD,它将不同的高宽比和比例的边界框的输出空间离散为一组默认框。在预测时,网络为每个默认框中每个对象类别的存在生成分数,并对该框进行调整,以更好地匹配对象形状。此外,该网络结合了来自不同分辨率的多个特征地图的预测,以自然地处理不同大小的对象。相对于需要对象建议的方法,SSD很简单,因为它完全消除了建议生成和后续的像素或特征重采样阶段,并将所有计算封装在单个网络中。这使得SSD易于训练,并可以直接集成到需要一个检测组件的系统中。在PASCAL VOC、COCO和ILSVRC数据集上的实验结果证实,SSD与使用额外对象建议步骤的方法具有竞争性的准确性,而且速度要快得多,同时为训练和推理提供了一个统一的框架。对于300×300输入,SSD在NvidiaTitanX上以59FPS测试VOC2007上达到74.3%的mAP1,对于512×512输入,SSD达到76.9%的mAP,超过了最先进的、更快的R-CNN模型。与其他单级方法相比,SSD即使在输入图像尺寸较小的情况下也有更好的精度。Code:https://github.com/weiliu89/caffe/tree/ssd
关键词:实时目标检测;卷积神经网络
一、介绍
目前最先进的对象检测系统是以下方法的变体:假设边界框,为每个框重新采样像素或特征,并应用一个高质量的分类器。由于选择性搜索通过目前关于PASCAL VOC、COCO和ILSVRC检测的领先结果进行了[1]工作,这些检测都基于更快的R-CNN[2],尽管具有更深层次的特征,如[3]。虽然这些方法很准确,但对于嵌入式系统来说计算过于密集,即使对于高端硬件,对于实时应用程序来说也太慢。这些方法的检测速度通常以每帧秒(SPF)来衡量,即使是最快的高精度检测器,更快的R-CNN,也只能以每秒7帧(FPS)的速度运行。已经有许多通过攻击检测流水线的每个阶段来构建更快的检测器的尝试(参见第2 . 3节中的相关工作)。4),但到目前为止,速度的显著提高只是以检测精度的显著降低为代价的。
本文介绍了第一个基于深度网络的对象检测器,它不为边界框假设和重新采样像素或特征,并且与其他方法一样准确。这使得高精度检测的速度显著提高(在VOC2007测试中,mAP为74.3%时为59 FPS,相比之下,R-CNN为7 FPS,mAP为73.2%,YOLO为45 FPS,mAP为63.4%)。速度上的根本改进来自于消除边界框提议和随后的像素或特征重采样阶段。我们并不是第一个这样做的人(参见[4,5]),但是通过增加一系列的改进,我们设法比以前的尝试大大提高了精确度。我们的改进包括使用小卷积滤波器来预测对象类别和边界框位置中的偏移,对不同的纵横比检测使用单独的预测器(滤波器),以及将这些滤波器应用于来自网络后期阶段的多个特征图,以便在多个尺度上执行检测。通过这些修改——特别是使用多层进行不同尺度的预测——我们可以使用相对较低分辨率的输入实现高精度,从而进一步提高检测速度。虽然这些贡献可能看起来很小,但我们注意到,由此产生的系统将PASCAL VOC的实时检测精度从YOLO的63.4% mAP提高到我们SSD的74.3%。与最近非常引人注目的残差网络工作相比,这在检测准确性方面是一个较大的相对改进[3]。此外,显著提高高质量检测的速度可以扩大计算机视觉有用的设置范围。
我们将我们的贡献总结如下:
- 我们引入了SSD,这是一种用于多个类别的单次检测器,比之前的单次检测器(YOLO)更快,更准确,实际上与执行显式区域建议和合并的较慢技术(包括更快的R-CNN)一样准确。
- SSD的核心是使用应用于特征地图的小型卷积过滤器来预测一组固定默认边界框的类别分数和框偏移量。
- 为了实现高检测精度,我们从不同比例的特征地图中生成不同比例的预测,并通过纵横比明确地分离预测。
- 这些设计特性带来了简单的端到端训练和高精度,即使在低分辨率输入图像上也是如此,进一步改善了速度与精度之间的平衡。 实验包括在PASCAL
- VOC、COCO和ILSVRC上对不同输入大小的模型进行时序和准确性分析,并与一系列最新的方法进行比较。
二、单触发探测器(SSD)
本节描述了我们提出的SSD检测框架(Sec 2.1)和相关的培训方法(Sec 2.2).之后,Sec 3展示了特定于数据集的模型细节和实验结果。
图1: SSD框架。(a) SSD在训练期间只需要每个对象的输入图像和地面实况框。在卷积方式中,我们在具有不同比例(例如(b)和©中的8×8和4×4)的几个特征图中的每个位置评估一小组(例如4个)不同纵横比的默认框。对于每个默认框,我们预测所有对象类别的形状偏移和置信度
(
(
c
1
,
c
2
,
.
.
.
,
c
p
)
)
((c_1,c_2,... ,c_p))
((c1,c2,...,cp))。在训练时,我们首先将这些默认框与基础真值框进行匹配。例如,我们将两个默认框与猫匹配,一个与狗匹配,它们被视为阳性,其余的被视为阴性。模型损失是定位损失(例如平滑
L
1
[
6
]
L1 [6]
L1[6])和置信度损失(例如Softmax)之间的加权和。
2.1模型
SSD方法基于前馈卷积网络,该网络产生固定大小的边界框和这些框中对象类实例存在的分数的集合,随后是非最大抑制步骤以产生最终检测。早期的网络层基于用于高质量图像分类的标准架构(在任何分类层之前被截断),我们称之为基础网络。然后,我们将辅助结构添加到网络中,以产生具有以下关键特征的检测:
- 用于检测的多尺度特征地图:我们在截断的基础网络的末端添加卷积特征层。这些层的尺寸逐渐减小,并允许在多个尺度上进行探测预测。用于预测检测的卷积模型对于每个要素图层而言都是不同的(参见在单比例要素地图上操作的超差[4]和YOLO[5])。
- 卷积预测器:每个添加的特征层(或可选地是来自基础网络的现有特征层)都可以使用一组卷积滤波器生成一组固定的检测预测。这些都显示在图2中的SSD网络架构的顶部对于大小为 m × n m×n m×n的具有 p p p通道的特征层,预测潜在检测参数的基本元素是 3 × 3 × p 3×3×p 3×3×p小内核,它产生一个类别的分数,或相对于默认框坐标的形状偏移。在应用内核的每个 m × n m×n m×n位置,它产生一个输出值。边界框偏移输出值是相对于相对于每个特征图位置的默认框位置来测量的(参见YOLO[5]的架构,它在此步骤中使用中间全连接层而不是卷积滤波器)。
- 默认框和纵横比对于网络顶部的多个特征地图:我们将一组默认边界框与每个特征地图单元相关联。默认框以卷积方式平铺要素地图,因此每个框相对于其对应像元的位置是固定的。在每个要素地图单元中,我们预测相对于单元中默认方框形状的偏移,以及指示每个方框中存在类实例的每个类的分数。具体来说,对于给定位置的
k
k
k个盒子中的每一个,我们计算c类分数和相对于原始默认盒子形状的4个偏移。这导致总共
(
c
+
4
)
k
(c + 4)k
(c+4)k个滤波器被应用于特征图中的每个位置周围,产生
m
×
n
m × n
m×n特征图的
(
c
+
4
)
k
m
n
(c + 4)kmn
(c+4)kmn输出。关于默认框的图示,请参考图1。我们的默认框类似于快速R-CNN [2]中使用的锚框,但是我们将它们应用于不同分辨率的几个特征地图。在几个要素地图中允许不同的默认盒子形状使我们能够有效地离散化可能的输出盒子形状的空间。
图2:两种单次检测模型之间的比较:SSD和YOLO [5]。我们的SSD模型在基本网络的末端添加了几个特征层,这些特征层预测不同比例和纵横比的默认框的偏移以及它们相关的置信度。在VOC2007测试中, 300 × 300 300 × 300 300×300输入大小的SSD在准确性方面明显优于其 448 × 448 448 × 448 448×448 YOLO对手,同时也提高了速度。
2.2培训
训练SSD和训练一个使用区域建议的典型检测器之间的关键区别在于,地面真实信息需要被分配给固定的检测器输出集中的特定输出。在YOLO[5]的培训和在更快的R-CNN[2]和MultiBox[7]的区域提案阶段也需要一些版本。一旦确定了这个赋值,损失函数和反向传播将被到末端应用。训练还包括选择默认的盒子和尺度进行检测,以及硬负挖掘和数据增强策略。
匹配策略:在训练过程中,我们需要确定哪些默认框对应于地面真实检测,并相应地训练网络。对于每个地面真实框,我们从不同位置、高宽比和比例的默认框中进行选择。我们首先将每个地面真实框与具有最佳跳跃重叠的默认框进行匹配(如MultiBox[7])。与MultiBox不同的是,我们然后匹配默认框与任何jaccard重叠高于阈值(0.5)。这简化了学习问题,允许网络预测多个重叠的默认框的高分,而不是要求它只选择具有最大重叠的默认框。
训练目标SSD训练目标来自于多盒目标[7,8],但被扩展到处理多个对象类别。设
x
i
j
p
=
1
,
0
x^p_{ij}={1,0}
xijp=1,0作为将第i个默认框与类别p的第j个地面真实框相匹配的指示器。在上述匹配策略中,我们可以有
∑
i
x
i
j
p
⩾
1
\sum_ix^p_{ij}\geqslant1
∑ixijp⩾1。总体目标损失函数是局部损失(loc)和置信损失(conf)的加权和:
其中,N是匹配的默认方框的数量。如果
N
=
0
N=0
N=0,则湿法将损失设为0。局部损失是预测框(l)和地面真实框
(
g
)
(g)
(g)参数之间的平滑L1损失[6]。与更快的R-CNN[2]类似,我们回归到默认边界框
(
d
)
(d)
(d)的中心
(
c
x
,
c
y
)
(cx,cy)
(cx,cy)及其宽度
(
w
)
(w)
(w)和高度
(
h
)
(h)
(h)的偏移量
置信度损失是对多个类置信度
(
c
)
(c)
(c)的软最大损失
通过交叉验证,权重项
α
\alpha
α设为1
选择默认框的比例和纵横比:为了处理不同的对象比例,一些方法[4,9]建议处理不同大小的图像,然后结合结果。然而,通过利用单个网络中来自多个不同层的特征图进行预测,我们可以模拟相同的效果,同时也可以在所有对象尺度上共享参数。[10,11]之前的工作已经表明,使用来自较低层的特征图可以提高语义分割的质量,因为较低的层可以捕获更多的输入对象的细节。类似地,[12]表明,添加从特征图中汇集的全局上下文可以帮助平滑分割结果。受这些方法的启发,我们同时使用上下特征图来进行检测。图1显示了在框架中使用的两个范例特征图( 8 × 8 8×8 8×8和 4 × 4 4×4 4×4)。在实践中,我们可以使用较小的计算开销使用更多。
已知来自网络中不同层次的特征图具有不同的(经验的)接受场大小[13]。幸运的是,在SSD框架中,默认的方框不需要对应于每一层的实际接受域。我们设计默认框的平铺,以便特定的特征映射学习对对象的特定比例做出响应。假设我们想使用m个特征映射来进行预测。每个特征映射的默认方框的比例计算为:
其中
s
m
i
n
s_{min}
smin为
0.2
0.2
0.2,
s
m
a
x
s_{max}
smax为
0.9
0.9
0.9,即最低层的比例为
0.2
0.2
0.2,最高层的比例为
0.9
0.9
0.9,介于两者之间的所有层都有规律地间隔。我们对默认方框施加不同的高宽比,并将它们表示为
a
r
∈
{
1
、
2
、
3
、
12
、
13
}
a_r∈\{1、2、3、12、13\}
ar∈{1、2、3、12、13}。我们可以计算每个默认方框的宽度
(
w
k
a
=
s
k
a
r
)
(w^a_k=s_k\sqrt{a_r})
(wka=skar)和高度
(
h
k
a
=
s
k
/
a
r
)
(h^a_k=s_k/\sqrt{a_r})
(hka=sk/ar)。对于高宽比为1,我们还添加了一个默认框,其比例为
s
k
′
=
s
k
s
k
+
1
s^{\prime}_k=\sqrt{s_ks_{k+1}}
sk′=sksk+1,导致每个特征地图位置有6个默认框。我们将每个默认框的中心设置为
(
i
+
0.5
∣
f
k
∣
,
j
+
0.5
∣
f
k
∣
)
(\frac{i+0.5}{|f_k|},\frac{j+0.5}{|f_k|})
(∣fk∣i+0.5,∣fk∣j+0.5),其中
∣
f
k
∣
|f_k|
∣fk∣是第k个平方特征图的大小,
i
,
j
∈
[
0
,
∣
f
k
∣
)
i,j∈[0,|f_k|)
i,j∈[0,∣fk∣)。在实践中,还可以设计一个默认框的分布,以最适合特定的数据集。如何设计最优的瓷砖也是一个有待解决的问题。
通过结合来自许多特征图的所有位置的所有具有不同尺度和纵横比的默认框的预测,我们有了一组不同的预测,涵盖了不同的输入对象大小和形状。例如,在图1中,狗与4×4特征图中的一个默认框匹配,但不与8×8特征图中的任何默认框匹配。这是因为这些盒子有不同的尺度,与狗的盒子不匹配,因此在训练中被认为是消极的。
硬负数挖掘:在匹配步骤之后,大多数默认框都是负数的,特别是当可能的默认框的数量很大时。这就引入了积极和消极训练例子之间的显著不平衡。我们没有使用所有负的负面例子,而是使用每个默认框的最高置信损失对它们进行排序,并选择顶部的,使负和正之间的比率最多为3:1。我们发现,这会导致更快的优化和更稳定的训练。
数据增强:为了使模型对不同输入对象大小和形状的鲁棒性,每个训练图像都通过以下选项之一进行随机采样:
- 使用整个原始输入图像。
- 采样一个补丁,使最小间隙与对象重叠为0.1、0.3、0.5、0.7或0.9
- 随机抽取一个补丁样本。
每个采样补丁的大小为原始图像大小的[0.1,1],长宽比在 1 2 \frac{1}{2} 21到2之间。如果地面真值盒的中心在采样补丁中,我们保留它的重叠部分。在上述采样步骤之后,每个采样的补丁被调整到固定的大小,并以0.5的概率水平翻转,除了应用一些类似于[14]中描述的光度量畸变。
三、实验结果
基线网:我们的实验都是基于VGG16[15],它是在ILSVRCCLS-LOC数据集[16]上预训练的。与DeepLab-LargeFOV[17]类似,我们将fc6和fc7转换为卷积层,fc6和fc7的子样本参数,将池5从 2 × 2 − s 2 2×2−s2 2×2−s2改为 3 × 3 − s 1 3×3−s1 3×3−s1,并使用算法[18]来填补“漏洞”。我们删除了所有的dropout层和fc8层。我们使用SGD对结果模型进行了微调,初始学习速率为 1 0 − 3 10^−3 10−3, 0.9 0.9 0.9动量, 0.0005 0.0005 0.0005权重衰减,批处理大小为 32 32 32。每个数据集的学习速率衰减策略略有不同,我们将在稍后详细描述。完整的培训和测试代码建立在Caffe[19]上,并且是开源的:https://github.com/weiliu89/caffe/tree/ssd。
3.1 PASCAL VOC2007
在这个数据集上,我们与FastR-CNN[6]和FasterR-CNN[2]在VOC2007测试上(4952张图像)进行了比较。所有方法都在同一预训练的VGG16网络上进行微调。
图2显示了SSD300模型的体系结构细节。我们使用conv4 3、conv7(fc7)、conv8 2、conv9 2、conv10 2和conv11 2 来预测位置和置信度。我们在conv4 33 上设置了比例为0.1的默认框。我们使用“xavier”方法[20]初始化所有新添加的卷积层的参数。对于conv4 3、conv10 2 和conv11 2,我们在每个特征图的位置上只关联了4个默认方框——省略了13和3的高宽比。对于所有其他层,我们放了6个默认框。2.2.由于正如[12]中指出的,conv4 3 与其他层具有不同的特征尺度,我们使用[12]中引入的L2归一化技术将特征图中每个位置的特征规范缩放到20,并在反向传播过程中学习尺度。我们使用 1 0 − 3 10^−3 10−3的学习率进行40k次迭代,然后继续用 1 0 − 4 10^−4 10−4和 1 0 − 5 10^−5 10−5训练10k次迭代。在VOC2007训练上进行训练时,表1显示,我们的低分辨率SSD300模型已经比FastR-CNN更准确。当我们在更大的512×512输入图像上训练SSD时,它甚至更准确,比更快的R-CNN多出1.7%。如果我们用更多(即07+12)数据训练SSD,我们会看到SSD300已经比R-CNN好1.1%,SSD512好3.6%。如果我们采用经过COCO训练的模型。3.4并使用SSD512对07+12数据集进行微调,我们得到了最好的结果:81.6%的mAP。
为了更详细地了解我们的两个SSD模型的性能,我们使用了来自[21]的检测分析工具。图3显示,SSD可以检测出高质量(较大的白色区域)的各种对象类别。它的大部分可靠的检测结果都是正确的。召回率约为85-90%,在“弱”(0.1美元重叠)的标准下,召回率要高得多。与R-CNN[22]相比,SSD的定位误差更小,说明SSD可以更好地定位对象,因为它直接学习回归对象的形状和对对象类别进行分类,而不是使用两个解耦的步骤。然而,SSD与类似的对象类别(尤其是动物)有更多的困惑,部分原因是我们为多个类别共享位置。图4显示了SSD对边界框的大小非常敏感。
换句话说,它在较小的物体上比较大的物体表现得差得多。这并不奇怪,因为这些小物体甚至可能在最顶层没有任何信息。增加输入大小(例如,从300×300到512×512)可以帮助改善对小物体的检测,但仍有很大的改进空间。在积极的方面,我们可以清楚地看到,SSD在大型物体上表现得非常好。而且它对不同的对象高宽比非常健壮,因为我们使用每个特征映射位置的不同高宽比的默认框。
表1:PASCAL VOC2007检测检测结果。快速和快速的R-CNN都使用最小维数为600的输入图像。这两种SSD模型有完全相同的设置,除了它们有不同的输入大小(300×300和512×512)。很明显,更大的输入大小会带来更好的结果,而更多的数据总是有帮助的。数据:“07”:VOC2007培训,“07+12”:VOC2007和VOC2012培训的结合。“07+12+COCO”:第一次乘坐COCO列车35k,然后在07+12上进行微调。
3.2 模型分析
为了更好地理解SSD,我们进行了控制实验,以检查每个组件如何影响性能。对于所有的实验,我们使用相同的设置和输入大小(300×300),除了指定的更改设置或组件(s)。
表2:各种设计选择和组件对SSD性能的影响。
数据增强至关重要。快速、更快的R-CNN使用原始图像和水平翻转来进行训练。我们使用了一个更广泛的抽样策略,类似于YOLO[5]。表2显示,我们使用该抽样策略可以提高8.8%的mAP。我们不知道我们的采样策略对快速和更快的R-CNN有多少好处,但它们可能受益更少,因为它们在分类期间使用了一个特征池步骤,该步骤对设计上的对象翻译相对健壮。
图3:VOD2007测试中SSD512在动物、车辆和家具上的性能可视化。最上面一行显示了由于定位不良(Loc)、与类似类别(Sim)、与其他类别(Oth)或与背景(BG)混淆而导致的正确(Cor)或假阳性检测的累积分数。红色实线反映了随着检测次数的增加,具有强标准(0.5 jaccard 重叠)的召回率的变化。红色虚线使用了弱标准(0.1 jaccard 重叠)。最下面一行显示了排名最高的假阳性类型的分布情况。
图4:使用[21]的不同对象特性对VOC2007测试集的灵敏度和影响。左边的图显示了每个类别的BBox面积的影响,右边的图显示了长宽比的影响。键:BBox区域:XS=超小;S=小;M=中;L=大;XL=超大。宽高比:XT=超高/窄尺寸;T=高;M=中等尺寸;W=宽;XW=超宽尺寸。
更默认的框形状更好。如第2.2节所述,默认情况下,每个位置使用6个默认框。如果我们去掉具有 1 3 \frac{1}{3} 31和3的长宽比的方框,性能就会下降0.6%。通过进一步去除具有 1 2 \frac{1}{2} 21和2的长宽比的方框,性能又下降了2.1%。使用各种默认的框形状似乎使网络预测框的任务更容易。
Atrous更快。如第3节所述,我们使用了一个下的VGG16,遵循DeepLab-LargeFOV[17]。如果我们使用完整的VGG16,保持池5有 2 × 2 − s 2 2×2−s2 2×2−s2,而不是fc6和fc7的子采样参数,并添加conv5_3 进行预测,结果大致相同,而速度慢约20%。
表3:使用多个输出层的效果。
在不同分辨率下的多个输出层效果更好。SSD的一个主要贡献是在不同的输出层上使用不同规模的默认框。为了衡量所获得的优势,我们逐步删除层并比较结果。为了进行公平的比较,每次我们删除一个图层时,我们都会调整默认的盒子平铺,以保持与原始版本的盒子总数相似(8732)。这是通过在剩余的层上堆叠更多的盒子比例来实现的,并在需要时调整盒子的比例。我们没有彻底优化每个设置。表3显示,随着层数的减少,精度有所下降,从74.3单调下降到62.4。当我们在一个层上堆叠多个尺度的盒子时,许多都在图像边界上,需要仔细处理。我们尝试了在FasterR-CNN[2]中使用的策略,忽略了边界上的方框。我们观察到一些有趣的趋势。例如,如果我们使用非常粗糙的特征映射(例如conv11_2(1×1)或conv10_2 (3×3)),它会很大程度地影响性能。原因可能是我们没有足够的大盒子来覆盖大的物体。当我们主要使用更精细的分辨率映射时,性能开始再次提高,因为即使在修剪了足够数量的大盒子之后,性能仍然存在。如果我们只使用conv7来进行预测,那么性能是最差的,这就加强了在不同的层上扩展不同规模的盒子是至关重要的信息。此外,由于我们的预测不像在[6]中那样依赖于ROI池化,所以我们在低分辨率特征图[23]中没有出现折叠箱的问题。SSD架构结合了来自不同分辨率的特征图的预测,以实现与更快的R-CNN相当的精度,同时使用更低分辨率的输入图像。
3.3 PASCAL VOC2012
除了使用VOC2012训练和2007VOC2007训练和测试(21503张图像)外,我们使用了与上述VOC20C2007实验相同的设置。我们用 1 0 − 3 10^{−3} 10−3的学习率训练模型进行60k迭代,然后用 1 0 − 4 10^{−4} 10−4的速率训练20k迭代。表4显示了我们的SSD300和SSD5124模型的结果。我们看到了与我们在VOC2007测试中观察到的相同的性能趋势。我们的SSD300比更快/更快的RCNN提高了准确性。通过将训练和测试图像大小增加到512×512,我们的准确率比快速的R-CNN高4.5%。与YOLO相比,SSD明显更准确,这可能是由于在训练过程中使用了来自多个特征映射的卷积默认框和我们的匹配策略。当对COCO训练的模型进行微调时,我们的SSD512达到了80.0%的mAP,比FasterR-CNN高出4.1%。
表4:PASCAL VOC2012检测检测结果。快速更快的R-CNN使用最小尺寸为600的图像,而YOLO的图像大小为448×448。数据:“07++12”:VOC2007训练与测试和VOC2012训练的结合。“07++12+COCO”:第一次乘坐COCO列车35k,然后在07++12上进行微调。
3.4 COCO
为了进一步验证SSD框架,我们在COCO数据集上训练了我们的SSD300和SSD512架构。由于COCO中的对象往往比帕斯卡VOC小,所以我们对所有层使用更小的默认框。我们遵循Sec 2.2中提到的策略,但现在我们最小的默认框的比例是0.15,而不是0.2,conv4 3 上的默认框的比例是0.07(例如,一个300×300的图像为21像素)。
我们使用trainval35k[24]进行训练。我们首先用10−3学习率训练模型进行160k迭代,然后继续训练 1 0 − 4 10^{−4} 10−4的40k迭代和 1 0 − 5 10^{−5} 10−5的40k迭代。表5显示了test-dev2015的结果。与我们在pascal VOC数据集上观察到的相似,SSD300在[email protected]和mAP@[0.5:0.95]中都优于FastR-CNN。SSD300与ION[24]和R-CNN[25]的mAP相似,但在[email protected]中更差。通过将图像大小增加到512×512,我们的SSD512在这两个标准上都优于快速的R-CNN[25]。有趣的是,我们观察到SSD512在[email protected]中较好5.3%,而在[email protected]中仅较好1.2%。我们还观察到,大物体的AP(4.8%)和AR(4.6%)更好,但小物体的AP(1.3%)和AR(2.0%)的改善相对较小。与ION相比,大、小物体的AR改善更为相似(5.4%vs.3.9%)。我们推测,更快的R-CNN在使用SSD的较小的对象上更有竞争力,因为它在RPN部分和快速R-CNN部分执行了两个盒子细化步骤。在图5中,我们展示了一些使用SSD512模型进行COCO测试开发的检测示例。
表5:COCO测试-dev2015检测结果。
3.5初步的ILSVRC结果
我们将与COCO相同的网络架构应用于ILSVRCDET数据集[16]。我们使用ILSVRC2014DET列车和在[22]中使用的val1来训练一个SSD300模型。我们首先用10−3学习率对模型进行320k迭代训练,然后继续训练10−4的80−迭代和10−5的40k迭代。我们可以在val2集[22]上达到43.4mAP。再次,它验证了SSD是一个高质量实时检测的通用框架。
3.6针对小对象精度的数据增强
如果没有像FasterR-CNN那样的后续特征重采样步骤,SSD的小对象的分类任务相对困难,如我们的分析所示(见图4)。第二节中描述的数据增强策略。2.2有助于显著提高性能,特别是在小数据集上,如pascal VOC。由该策略产生的随机作物可以被认为是一种“放大”操作,并可以生成许多更大的训练示例。为了实现一个“缩小”操作,创建更多的小训练示例,我们首先将一幅图像随机放置在一个 16 × 16× 16×的画布上,然后进行任何随机裁剪操作。因为通过引入这种新的“扩展”数据增强技巧,我们有了更多的训练图像,所以我们必须加倍训练迭代。我们已经看到,在多个数据集上的mAP持续增加了2%-3%,如表6所示。具体来说,图6显示了新的增强技巧显著地提高了在小对象上的性能。这一结果强调了数据增强策略对最终模型准确性的重要性。
改进SSD的另一种方法是设计一个更好的默认方框,使其位置和规模更好地与特征地图上每个位置的接受域对齐。我们把这个问题留给以后的工作了。
图5:使用SSD512模型进行COCO测试开发的检测示例。我们显示了分数高于0.6的检测结果。每种颜色都对应于一个对象类别
表6:当我们添加图像扩展数据增强技巧时,在多个数据集上的结果。SSD300和SSD512是使用新数据增强进行训练的模型。
图6:使用[21]增强新数据对VOC2007测试集的敏感度和影响。最上面一行显示了原始SSD300和SSD512模型的每个类别的BBoxArea的效果,最下面一行对应于使用新的数据增强技巧训练的SSD300和SSD512模型。很明显,新的数据增强技巧有助于显著地检测小物体。
3.7 推理时间
考虑到我们的方法生成了大量的盒子,在推理过程中有效地执行非最大抑制(nms)是必要的。通过使用0.01的证据阈值,我们可以过滤掉大多数盒子。然后,我们应用每一个类的jaccard重叠的nms,并保持每幅图像的前200个检测值。对于SSD300和20个VOC类别,这一步每张图像的花费约为1.7毫秒,这接近于在所有新添加的层上花费的总时间(2.4毫秒)。我们使用TitanX和cuDNNv4和[email protected]以批大小8测量速度。
表7显示了SSD、FasterR-CNN[2]和YOLO[5]之间的比较。我们的SSD300和SSD512方法在速度和准确性上都优于更快的R-CNN。虽然FastYOLO[5]可以以155帧/秒的速度运行,但它的精度较低,精度接近22%。据我们所知,SSD300是第一个实现70%以上mAP的实时方法。请注意,大约80%的转发时间花在了基础网络上(在我们的例子中是VGG16)。因此,使用更快的基础网络甚至可以进一步提高速度,这也可能使SSD512模型实时化。
四、相关工作
图像中的目标检测方法有两种,一种基于滑动窗口,另一种基于区域建议分类。在卷积神经网络出现之前,这两种方法——可变形部分模型(DPM)[26]和选择性搜索[1]——具有相当的性能。然而,R-CNN[22]结合了选择性搜索区域建议和基于卷积网络的后分类,取得了巨大的改进,区域建议目标检测方法变得流行起来。原来的R-CNN方法在多种方面得到了改进。第一套方法提高了后分类的质量和速度,因为它需要对数千种图像作物进行分类,这是昂贵和耗时的。SPPnet[9]显著加快了原来的R-CNN方法。它引入了一个空间金字塔池化层,它对区域大小和规模更鲁棒,并允许分类层重用在多个图像分辨率生成的特征图上计算的特征。FastR-CNN[6]扩展了SPPnet,因此它可以通过最小化置信度和边界盒回归的损失来微调所有层,这是在多盒[7]中首次引入的学习目标的。
表7:Pascal VOC2007试验结果。SSD300是唯一一种能达到70%mAP以上的实时检测方法。通过使用一个更大的输入图像,SSD512在精度上优于所有的方法,同时保持了一个接近实时的速度。
第二组方法提高了使用深度神经网络生成提案的质量。在最近的MultiBox[7,8]等研究中,基于低级图像特征的选择搜索区域建议被直接从一个单独的深度神经网络生成的建议所取代。这进一步提高了检测精度,但导致了一个有点复杂的设置,需要训练两个与它们之间依赖的神经网络。更快的R-CNN[2]用从区域建议网络(RPN)中学习到的方法来替代选择性搜索建议,并引入了一种将RPN与快速R-CNN集成的方法,通过交替微调这两个网络的共享卷积层和预测层。通过这种方式,区域建议被用于汇集中层特性,并且最终的分类步骤更便宜。我们的SSD与FasterR-CNN中的区域提议网络(RPN)非常相似,因为我们也使用了一组固定的(默认)盒来进行预测,类似于RPN中的锚盒。但是,我们不是使用这些方法来汇集特征和评估另一个分类器,而是同时为每个方框中的每个对象类别生成一个分数。因此,我们的方法避免了将RPN与FastR-CNN合并时的复杂性,并且更容易训练、更快、更容易直接集成到其他任务中。
另一组与我们的方法直接相关的方法,完全跳过建议步骤,直接预测多个类别的边界框和置信度。OverFeat[4]是滑动窗口方法的一个深度版本,它在了解了底层对象类别的一致性后,直接从最顶层特征图的每个位置预测一个边界框。YOLO[5]使用整个最上面的特征图来预测多个类别的可信度和边界框(这些边界框为这些类别共享)。我们的SSD方法属于这个类别,因为我们没有建议步骤,而是使用了默认的方框。然而,我们的方法比现有的方法更灵活,因为我们可以在不同尺度的多个特征映射的每个特征位置上使用不同长宽比的默认框。如果我们从最上面的特征图中每个位置只使用一个默认框,我们的SSD将具有与OverFeat[4]类似的架构;如果我们使用整个最上面的特征图并添加一个完全连接的层来进行预测,而不是我们的卷积预测器,并且不明确考虑多宽比,我们可以近似地重现YOLO[5]。
五、结论
本文介绍了一种针对多类别的快速单镜头目标检测器。我们的模型的一个关键特征是使用了多尺度卷积边界框输出,并附加到网络顶部的多个特征图上。这种表示方式使我们能够有效地建模可能的盒子形状的空间。我们通过实验验证,给定适当的训练策略,大量精心选择的默认边界框可以提高性能。我们建立的SSD模型至少比现有方法[5,7]的盒子预测采样位置、规模和长宽比多一个数量级。我们证明,基于相同的VGG-16基础架构,SSD在精度和速度方面都优于其最先进的对象检测器。我们的SSD512模型在pascalVOC和COCO上的准确性方面显著优于最先进的快速R-CNN[2],同时更快3×。我们的实时SSD300模型以59帧/秒运行,比目前的实时YOLO[5]替代方案更快,同时产生了显著优越的检测精度。
除了它的独立效用,我们相信我们的单片和相对简单的SSD模型为使用对象检测组件的更大的系统提供了一个有用的构建块。一个很有前途的未来方向是探索它作为一个系统的一部分,利用递归神经网络同时检测和跟踪视频中的对象。