当前位置:   article > 正文

SSD:单次多盒检测器

多盒检测器
作者
  • Wei Liu (UNC Chapel Hill) 刘伟
  • Dragomir Anguelov (Zoox Inc.)
  • Dumitru Erhan (Google Inc.)
  • Christian Szegedy (Google Inc.)
  • Scott Reed (University of Michgan Ann-Arbor)
  • Cheng-Yang Fu (UNC Chapel Hill)
  • Alexander C. Berg (UNC Chapel Hill)
摘要

本文中,我们讨论了一种基于单个深度神经网络检测图片中物体的方法。我们的方法称为 SSD,将边界框的输出空间离散化,在每一个特征图的位置设置一系列具有不同纵横比和不同尺度的默认边界框。在预测时,神经网络对每一个默认边界框是否属于某一个类别产生一个评分,并且生成一个对边界框的一个修正,以使得边框与物体形状更加贴合。此外,网络结合多个不同分辨率的特征图的预测,从而自然地处理物体的不同尺寸。SSD 相对于需要提供物体建议的方法来说是更简单一些的,因为它完全去除了建议生成和后续的像素重采样或者特征重采样的阶段,把所有的计算都封装到一个网络中。这使得 SSD 变得容易训练,并且可以直接集成到需要检测模块的系统中。在 PASCAL VOC, COCO, 和 ILSVRC 数据集的实验结果表明 SSD 的精度相对于利用物体建议的方法来说是富有竞争力的,并且速度更快,并且给出了一种训练和推理的统一框架。对 300 × 300 300\times300 300×300 的输入来说,SSD 在 VOC2007 test 的精度达到 74.3%,在 NVidia Titan X 上的运行速度是 59 FPS。对 512 × 512 512 \times 512 512×512 的输入,SSD 达到了 76.9%,超越了目前堪称艺术的 Faster R-CNN 模型。与其他单步模型相比,SSD 的精度更好,即使输入图片的尺寸更小。代码放在 https://github.com/weiliu89/caffe/tree/ssd。

译者注:SSD 的特点有三。1. 保持精度且更快;2. 利用多层特征图;3. 取消物体建议

关键词

实时物体识别;卷积神经网络

1. 引言

目前堪称艺术的检测系统多为如下方法的变种:假设一些边界框,对每一个边界框重采样像素或特征,并对他们使用高质量分类器。这个流程在检测排行榜上开始流行始于 Selective Search1。目前占据 PASCAL VOC, COCO, ILSVRC 这些排行榜头名的 Faster R-CNN 方法2 都是基于这个工作的,尽管它使用了更深层的特征3。尽管精确,这些方法在嵌入式系统下的计算代价显得很大,即使用高端硬件,对实时应用来说还是太慢。这些方法的检测速度通常以每帧秒数 (SPF) 度量,即使最快的高精度检测器 Faster R-CNN,每秒只能处理 7 帧。已经有很多尝试通过检测流程的每一环进行攻击,试图建立更快的检测器,但目前为止,明显的速度提升的代价总是明显的精度下降。

译者注:本文希望改进 Faster R-CNN,它太慢了,精度还可以的。其他工作牺牲精度,以提升速度。

本文给出第一个不需要对边界框进行像素或者特征重采样的深度网络,并且 与需要这样做的方法的精度保持一致。结果是,高精度的检测器得到了速度上的显著提升 (在 VOC2007 test 上的 mAP 是 74.3%,速度是 59 FPS,相比于 Faster R-CNN 的 mAP 是 73.2%,速度是 7 FPS,相比于 YOLO 的 mAP 63.4%,速度是 45 FPS)。速度上根本的改进来源于取消边界框建议和后续的像素或者特征重采样过程。我们不是第一个这么做的 (参考4 5),但加入一系列改进,使得我们比之前的尝试得到的方法更精确。我们的改进包括:引入了一个小卷积过滤器,用于物体类别、边界框位置的位移;使用另一个预测器 (滤波器) 来实施不同纵横比的检测;对网络后期的多层特征图使用这些滤波器,用于多尺度检测。有了这些改进——特别是在不同层的预测——在输入低精度图片时,我们仍然可以达到高精度,从而进一步提高速度。尽管贡献看上去小且独立,我们注意到,这样的结果把实时物体监测系统 YOLO 在 PASCAL VOC 的精度从 64.3% 提高到了我们的 SSD 的 74.3%。这比最近高调的残量网络3 的相对精度提升更多。此外,显著的高精度检测器的速度提升可以拓宽计算机视觉的应用范围。

译者注:看上去 SSD 就是把 YOLO 的精度进行了提升。三个改进。1. 用卷积分类;2. 用卷积提供位移;3. 多层检测;

我们把贡献总结如下:

  • 我们引入了 SSD,单次多类检测器,比之前的最好的单次检测器 (YOLO) 更快,并且把精度显著提升到了显式要求区域建议和池化的方法 (包括 Faster R-CNN)
  • SSD 的核心是用小卷积滤波器在特征图上预测类别得分和边界框位移
  • 达到高精度,我们在不同尺度的特征图上产生预测,并且用于不同纵横比的预测。
  • 这些设计给出了一个简单的端到端训练,即使在低精度的输入图片也给出了高精度,这改善了速度精度的交易
  • 本文给出了各种模型在 PASCAL VOC, COCO, ILSVRC 上评价的各种时间和精度。

译者注:重复了一边,没有什么新内容

2. 单次检测器 (SSD)

本节描述我们提出的 SSD 框架 (2.1节) 以及它的训练方法 (2.2节)。然后我们在第 3 节中给出数据集特定的模型细节和实验结果。

2.1 模型

SSD 方法基于前馈卷积网络,产生一系列固定大小的边界框和得分,用于描述某一类物体是否存在于这个边界框,接着用非极大抑制给出最后的检测结果。早期的网络层基于用于产生图片分类的标准架构 (在分类层前截断),我们称为基础网络 (我们用了 VGG-16 做基础网络,其他网络应该也可以产生好结果)。然后我们加上辅助结构,以产生如下关键特征:

多尺度特征图用于检测

我们在截断的基础网络加入卷积特征层,这些层的尺寸逐渐减小,并且允许在多个尺度上预测。预测的卷积模型在每一个特征层上都不相同 (对比 Overfeat4,YOLO5,仅在一个尺度的特征图上做卷积)。

译者注:Overfeat, YOLO 在以后的博客中需要回顾。

检测的卷积预测

对每一个被增加的特征层(或者基础网络中已经存在的特征层)来说,用一系列卷积滤波器可以产生一个固定集合的检测预测。在图 2 的 SSD 架构中有所描述。
SSD 网络架构

图2:比较两个单次检测模型:SSD 和 YOLO5。我们的 SSD 模型在基础网络之后增加了几个特征层,用于预测各个尺度和纵横比的默认盒子的位移以及他们的置信度。在 VOC2007 test 上,SSD 的输入为 300 × 300 300\times300 300×300 比 YOLO 输入为 448 × 448 448\times448 448×448 的表现在精度和速度两方面都明显好。

维数至下一层的卷积核维数至分类层卷积核大小
Conv4_3 38 × 38 × 512 38\times38\times512 38×38×512 ( 512 × ) 3 × 3 × 1024 (512\times) 3\times3\times1024 (512×)3×3×1024 ( 512 × ) 3 × 3 × ( 4 ( c + 4 ) ) (512\times) 3\times 3 \times (4(c+4)) (512×)3×3×(4(c+4))
Conv6 (FC6) 19 × 19 × 1024 19\times19\times1024 19×19×1024 ( 1024 × ) 1 × 1 × 1024 (1024\times) 1\times1\times1024 (1024×)1×1×1024
Conv7(FC7) 19 × 19 × 1024 19\times19\times1024 19×19×1024 ( 1024 × ) 3 × 3 × 512 (1024\times) 3\times3\times512 (1024×)3×3×512 ( 1024 × ) 3 × 3 × ( 6 ( c + 4 ) ) (1024\times) 3\times 3 \times (6(c+4)) (1024×)3×3×(6(c+4))
Conv8_2 10 × 10 × 512 10\times 10\times512 10×10×512 ( 512 × ) 3 × 3 × 256 (512\times) 3\times3\times256 (512×)3×3×256 ( 512 × ) 1 × 1 × 256 (512\times) 1\times1\times256 (512×)1×1×256
Conv9_2 5 × 5 × 256 5\times5\times256 5×5×256 ( 256 × ) 3 × 3 × 256 (256\times) 3\times3\times256 (256×)3×3×256 ( 256 × ) 1 × 1 × 128 (256\times) 1\times1\times128 (256×)1×1×128
Conv10_2 3 × 3 × 256 3\times 3\times256 3×3×256 ( 256 × ) 3 × 3 × 256 (256\times) 3\times3\times256 (256×)3×3×256 ( 256 × ) 3 × 3 × ( 4 ( c + 4 ) ) (256\times) 3\times3\times(4(c+4)) (256×)3×3×(4(c+4))
Conv11_2 1 × 1 × 256 1\times 1\times 256 1×1×256 ( 256 × ) 3 × 3 × 256 (256\times) 3\times3\times256 (256×)3×3×256 ( 256 × ) 1 × 1 × 128 (256\times) 1\times1\times128 (256×)1×1×128

译者不解之处:(1) 8732 per Class? (2) “-s2”, “-s1” 作何解?

对一个大小为 m × n m\times n m×n p p p 通道的特征层,检测参数是一个 3 × 3 × p 3\times3\times p 3×3×p小核,可以产生一个物体类别得分或者一个相对默认盒子的位移。在所有 m × n m\times n m×n 个位置都会产生一个输出值。边界框位移相对于默认边界框位置(对比 YOLO5 的框架,使用中等全连接层,而不是卷积层)。

译者注:这里区别于 YOLO,把全连接用卷积取代

默认盒子和纵横比

对网络中的多个特征图,我们将一系列边界框与每一个特征图的单元进行关联。默认的边界框像卷积一样平铺在特征图上,所以每一个盒子相对于对应单元的位置是固定的。在每一个特征图单元上,我们预测默认盒子的位移。特别地,对一个盒子的每 k k k 个位置,我们计算 c c c 个类别得分和 4 4 4 个相对于默认盒子的位移。这产生 ( c + 4 ) k (c+4)k (c+4)k 个滤波器,应用于特征图上的每一个位置。对 m × n m\times n m×n 的特征图,会产生 ( c + 4 ) k m n (c+4)kmn (c+4)kmn 个输出。为了说明一个默认盒子,可以参考图 1。我们默认的盒子与 Faster R-CNN2锚盒子 类似,然而,我们在多个分辨率上使用。这让我们有效离散化边界框空间。
SSD架构

图1. SSD架构。(a) 训练时 SSD 只需要输入图片和真值边框。在卷积时,我们在多层特征图的每一个地方求一些 (例如 4 个) 不同比例的默认盒子 (例如在 (b) 和 © 中 8 × 8 8\times 8 8×8 4 × 4 4\times 4 4×4)。对每一个默认盒子,我们同时预测形状位移和所有物体类别的信心得分 ( ( c 1 , c 2 , … , c p ) (c_1, c_2, \ldots, c_p) (c1,c2,,cp))。在训练时,我们首先将这些盒子与真实盒子进行匹配。例如,在这张图上,我们分别匹配了猫和狗的两个真实的盒子,作为真值,其他的作为假值。模型的损失函数是局部损失 (例如 Smooth L16) 和置信损失 (例如 Softmax) 的加权平均

译者注:这里区别于 Faster R-CNN,作用在多个特征图层上

2.2 训练

训练 SSD 和训练使用区域建议的关键不同是,真值需要和输出匹配。 YOLO5 和基于区域检测方法的 Faster R-CNN2 和 MultiBox7 也需要这么做。当赋值完成后,损失函数和后向传播就可以端到端地运行了。训练也涉及选择默认盒子和尺寸,以及难分样本挖掘和数据增强策略。

匹配策略

训练过程中,我们需要决定哪一个默认盒子对应于真值,并用于训练。对每一个真值盒子,我们从不同位置、不同纵横比、和不同尺度进行选择。我们以最佳 jaccard 重叠作为真值盒子和默认盒子的匹配 (正如 MultiBox7)。不同于 MutliBox,我们把所有高于阈值 (0.5) 的默认盒子都与真值盒子相关联。这简化了学习问题,使得网络可以预测多个高分重叠默认盒子,而不需要从中挑选一个最大的重叠。

训练目标

SSD 的训练目标源于 MultiBox7,8的目标,推广到处理多个目标类别。设 x i , j p = { 1 , 0 } x_{i,j}^p = \{1, 0\} xi,jp={1,0} 是第 i i i 个默认盒子和第 j j j 个真实盒子在类别 p p p 上的指示函数。在上面的匹配策略里,我们可以由 ∑ i x i j p ≥ 1 \sum_i x_{ij}^p \ge 1 ixijp1。总体目标损失函数是局域损失 (loc) 和置信损失 (conf) 的加权平均:
L ( x , c , l , g ) = 1 N ( L conf ( x , c ) + α L loc ( x , l , g ) ) L(x, c, l, g) = \frac1N (L_\text{conf}(x, c) + \alpha L_\text{loc}(x, l, g)) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
其中 N N N 是匹配默认盒子的数量. 如果 N = 0 N=0 N=0, 我们设置损失为零。局域损失是预测盒子 ( l l l) 和真实盒子 ( g g g) 参数之间的光滑 L1 损失6。类似于 Faster R-CNN2,我们回归默认边界框 ( d d d) 中心的位移 ( c x , c y ) (cx, cy) (cx,cy) 以及它的宽 ( w w w) 和高 ( h h h)。
L loc ( x , l , g ) = ∑ i ∈ Pos N ∑ m ∈ { c x , c y , w , h } x i j k   Smooth L1 ( l i m − g ^ j m ) L_\text{loc}(x, l, g) = \sum_{i \in \text{Pos}}^N \sum_{m \in \{cx, cy, w, h\}} x_{ij}^k \,\text{Smooth}_\text{L1}(l_i^m-\hat g_j^m) Lloc(x,l,g)=iPosNm{cx,cy,w,h}xijkSmoothL1(limg^jm)
其中
g ^ j c x = ( g j c x − d i c x ) / d i w g ^ j w = log ⁡ ( g j w d i w ) g ^ j c y = ( g j c y − d i c y ) / d i h g ^ j h = log ⁡ ( g j h d i h ) \hat g_j^{cx} = (g_j^{cx} - d_i^{cx}) / d_i^w \qquad \hat g_j^{w} = \log\left(\frac{g^w_j}{d_i^w}\right) \\ \hat g_j^{cy} = (g_j^{cy} - d_i^{cy}) / d_i^h \qquad \hat g_j^{h} = \log\left(\frac{g^h_j}{d_i^h}\right) \\ g^jcx=(gjcxdicx)/diwg^jw=log(diwgjw)g^jcy=(gjcydicy)/dihg^jh=log(dihgjh)
而置信损失是关于多类置信度 ( c c c) 的 Softmax 损失
L conf ( x , c ) = − ∑ i ∈ Pos N x i j p log ⁡ ( c ^ i p ) − ∑ i ∈ Neg N log ⁡ ( c ^ i 0 ) L_\text{conf}(x, c) = -\sum_{i\in\text{Pos}}^N x_{ij}^p \log(\hat c_i^p) -\sum_{i\in\text{Neg}}^N \log(\hat c_i^0) Lconf(x,c)=iPosNxijplog(c^ip)iNegNlog(c^i0)
其中 c ^ i p = exp ⁡ ( c i p ) ∑ p exp ⁡ ( c i p ) \hat c^p_i = \frac{\exp(c_i^p)}{\sum_p\exp(c_i^p)} c^ip=pexp(cip)exp(cip)。而加权权重由交叉检验设为 1 1 1

为默认盒子选择尺度和纵横比

为了处理不同尺度的物体,一些方法4,9 建议处理不同大小的图片,并在后续过程把结果整合。然而,在一个网络中利用不同层的特征图,我们可以模仿这种效果,并且在所有物体尺度上同时共享参数。之前的工作10,11已经证明,用低层特征图可以改进语义分割的质量,因为低层抓住了输入物体更细节的特征。类似的,还有文章12证明了从特征图增加全局情景池化可以帮助光滑分割的结果。受到这些方法的启发,我们在检测时同时使用低层和高层特征图。图 1 展示了我们在这个框架下使用的两个特征图的例子 ( 8 × 8 8\times 8 8×8 4 × 4 4\times 4 4×4)。实践中,我们可以用很多,计算代价很小。

在不同层的特征图有着不同的 (经验) 感知场大小13。索性的是,在 SSD 框架下,默认盒子不需要对应于每一层真实的感知场。我们涉及了默认盒子的倾斜,从而某一个特征图学习某一个特定尺度的物体。如果我们需要用 m m m 个特征图来预测。每一个特征图的默认盒子的度量可以计算如下:
s k = s min ⁡ + s max ⁡ − s min ⁡ m − 1 ( k − 1 ) , k ∈ [ 1 , m ] s_k = s_{\min{}} + \frac{s_{\max{}} - s_{\min{}}}{m-1} (k-1), \qquad k \in [1, m] sk=smin+m1smaxsmin(k1),k[1,m]
其中 s min ⁡ s_{\min{}} smin 0.2 0.2 0.2 s max ⁡ 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 , 1 2 , 1 3 } a_r \in \{1,2,3,\frac12, \frac13\} ar{1,2,3,21,31}。我们可以计算出每一个默认盒子的宽度 ( w k a = s k a r w_k^a = s_k\sqrt{a_r} wka=skar ) 和高度 ( h k a = s k / a r ) (h_k^a = s_k/\sqrt{a_r}) (hka=sk/ar )。对纵横比为 1 1 1 的情形,我们也可以加上一个默认盒子,尺度是 s k ′ = s k s k + 1 s'_k = \sqrt{s_ks_{k+1}} sk=sksk+1 ,从而每一个特征图位置由 6 6 6 个默认盒子。我们设置每一个默认盒子的中心为 ( i + 0.5 ∣ f k ∣ , j + 0.5 ∣ f k ∣ ) (\frac{i+0.5}{|f_k|}, \frac{j+0.5}{|f_k|}) (fki+0.5,fkj+0.5),其中 ∣ f k ∣ |f_k| fk 是第 k k k 个方特征图的尺寸, i , j ∈ [ 0 , ∣ f k ∣ ) i, j \in [0, |f_k|) i,j[0,fk)。实践中,我们也可以设计一个最适合数据集的盒子分布。如何设计最优的盒子是一个公开问题。

结合所有不同尺度和不同比例的上默认盒子的预测,我们得到一系列预测,覆盖了各种输入物体的尺寸和形状。例如,在图 1 中,狗与一个 4 × 4 4\times4 4×4的特征图匹配,但不与其他 8 × 8 8\times8 8×8 的特征图匹配。这是因为这些盒子的尺度不一样,与狗的盒子不匹配,所以在训练中认为是假值。

难分样本挖掘

在匹配步骤之后,大多数默认盒子是假的,特别是当真值默认盒子的数量很多的时候。这引入了真假训练样本的严重不平衡。取代用所有的假样本,我们将他们按置信度损失从高到低排序,按照假真样本 3 : 1 3:1 3:1 的比例进行优化。我们发现这可以加速优化,并且运行更稳定。

数据增强

为了让模型更强壮,适用于各种输入的物体大小和形状,每一个训练图片都随机采样与下列选项之一:

  • 完全使用原始图片作为输入
  • 采样一块使得物体与其 最小 jaccard 重叠在 0.1, 0.3, 0.5, 0.7, 0.9
  • 随机采样一个区域
    随机采样的大小是在原始图片大小的 [ 0.1 , 1 ] [0.1, 1] [0.1,1],纵横比在 1 2 \frac12 21 2 2 2 之间。如果真实框的中心落在采样区域之中,我们保留重叠部分真实框。在采样步骤之后,每一个采样都重新拉伸到一个固定大小,以概率为 0.5 0.5 0.5 水平翻转,并且加入一些光照扭曲如14

  1. Uijlings, J. R., van de Sande, K. E., Gevers, T., Smeulders, A. W.: Selective search for object recognition. IJCV (2013) ↩︎

  2. Ren, S., He, K., Girshick, R., Sun J.: Faster R-CNN: Towards real-time object detection with region proposal networks. In: NIPS. (2015) ↩︎ ↩︎ ↩︎ ↩︎

  3. He, K., Zhang, X., Ren, S., Sun, J.: Deep residual learning for image recognition. In: CVPR. (2016) ↩︎ ↩︎

  4. Sermanet, P., Eigen, D., Zhang, X., Mathieu, M., Fergus, R., LeCun, Y.: Overfeat: Integrated recognition, localization and detection using convolutional networks. In: ICLR. (2014) ↩︎ ↩︎ ↩︎

  5. Redmon, J., Divvala, S. Girshick, R., Farhadi, A.: You only look once: Unified, real-time object detection. In: CVPR. (2016) ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  6. Girshick, R.: Fast R-CNN. In: ICCV. (2015) ↩︎ ↩︎

  7. Erhan, D., Szegedy, C., Toshev, A. Anguelov, D.: Scalable object detection using deep neural networks. In CVPR. (2014) ↩︎ ↩︎ ↩︎

  8. Szegedy, C., Reed, S., Erhan, D., Anguelov, D.: Scalable, high-quality object detection.
    arXiv preprint arXiv:1412.1441 v3 (2015) ↩︎

  9. He, K., Zhang, X., Ren, S., Sun, J.: Spatial pyramid pooling in deep convolutional networks
    for visual recognition. In: ECCV. (2014) ↩︎

  10. Long, J., Shelhamer, E., Darrell, T.: Fully convolutional networks for semantic segmentation. In: CVPR. (2015) ↩︎

  11. Hariharan, B., Arbelaez, P., Girshick, R., Malik, J.: Hypercolumns for object segmentation ´
    and fine-grained localization. In: CVPR. (2015) ↩︎

  12. Liu, W., Rabinovich, A., Berg, A.C.: ParseNet: Looking wider to see better. In: ILCR. (2016) ↩︎

  13. Zhou, B., Khosla, A., Lapedriza, A., Oliva, A., Torralba, A.: Object detectors emerge in deep
    scene cnns. In: ICLR. (2015) ↩︎

  14. Howard, A.G.: Some improvements on deep convolutional neural network based image
    classification. arXiv preprint arXiv:1312.5402 (2013) ↩︎

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/291209
推荐阅读
相关标签
  

闽ICP备14008679号