SSD基础原理

来源:互联网 发布:java 虚拟现实 编辑:程序博客网 时间:2024/05/20 22:40

1.1 SSD网络结构


SSD使用VGG-16-Atrous作为基础网络,其中黄色部分为在VGG-16基础网络上填加的特征提取层。SSD与yolo不同之处是除了在最终特征图上做目标检测之外,还在之前选取的5个特特征图上进行预测。
SSD图1为SSD网络进行一次预测的示意图,可以看出,检测过程不仅在填加特征图(conv8_2, conv9_2, conv_10_2, pool_11)上进行,为了保证网络对小目标有很好检测效果,检测过程也在基础网络特征图(conv4_3, conv_7)上进行。

1.2 SSD网络的损失函数


注意:图中fc6, fc7名为fc,其实是卷积层。
SSD图2为整个SSD训练网络的结构,由于图像所含层数太多,网络中不能看到每层细节,我重画其中部分层为绿色,作为代表。可以看出,GT标签在分特征图上生成priorbox,即再将所有priobox组合为mbox_priorbox作为所有默认框的真实值。再看预测过程,会在所选取的特征图进行两个 3x3卷积,其中一个输出每个默认框的位置(x, y, w, h)四个值,另一个卷积层输出每个默认框检测到不同类别物体的概率,输出个数为预测类别个数。再将所有的默认框位置整合为mbox_loc,将所有默认框预测类别的向量组合为mbox_conf。mbox_loc、mbox_conf为所有预测默认框,将它与所有默认框的真实值mbox_priorbox进行计算损失,得到mbox_loss。
图中data下方每个priorbox都对应了min_size与max_size,表示不同特征图上的默认框在原图上的最小与最大感受野。关于不同特征图上的min_size与max_size,论文中给出的计算公式,可惜与实现的prototxt中的参数并不对应。
SSD的损失函数如图3所示,由每个默认框的定位损失与分类损失构成。

1.3 SSD网络训练技巧

1.3.1 数据增强

SSD训练过程中使用的数据增强对网络性能影响很大,大约有6.7%的mAP提升。

(1) 随机剪裁:采样一个片段,使剪裁部分与目标重叠分别为0.1, 0.3, 0.5, 0.7, 0.9,剪裁完resize到固定尺寸。

(2) 以0.5的概率随机水平翻转。

1.3.2 是否在基础网络部分的conv4_3进行检测

基础网络部分特征图分辨率高,原图中信息更完整,感受野较小,可以用来检测图像中的小目标,这也是SSD相对于YOLO检测小目标的优势所在。增加对基础网络conv4_3的特征图的检测可以使mAP提升4%。

1.3.3 使用瘦高与宽扁默认框

数据集中目标的开关往往各式各样,因此挑选合适形状的默认框能够提高检测效果。作者实验得出使用瘦高与宽扁默认框相对于只使用正方形默认框有2.9%mAP提升。

1.3.4 使用atrous卷积

通常卷积过程中为了使特征图尺寸特征图尺寸保持不变,通过会在边缘打padding,但人为加入的padding值会引入噪声,因此,使用atrous卷积能够在保持感受野不变的条件下,减少padding噪声,关于atrous参考。本文SSD训练过程中并且没有使用atrous卷积,但预训练过程使用的模型为VGG-16-atrous,意味着作者给的预训练模型是使用atrous卷积训练出来的。使用atrous版本VGG-16作为预训模型比较普通VGG-16要提高0.7%mAP。

1.4 实验结论

作者发现SSD对小目标检测效果不好(但也比YOLO要好,因此多特征图检测),这是因为小物体在高层特征图上保留很少的信息,通过增加输入图像的尺寸能够解决对小物体检测效果。



2.具体网络参数

The Single Shot Detector(SSD)

这部分详细讲解了 SSD 物体检测框架,以及 SSD 的训练方法。

这里,先弄清楚下文所说的 default box 以及 feature map cell 是什么。看下图:

  • feature map cell 就是将 feature map 切分成 8×8 或者 4×4 之后的一个个 格子

  • 而 default box 就是每一个格子上,一系列固定大小的 box,即图中虚线所形成的一系列 boxes。

这里写图片描述


Model

SSD 是基于一个前向传播 CNN 网络,产生一系列 固定大小(fixed-size) 的 bounding boxes,以及每一个 box 中包含物体实例的可能性,即 score。之后,进行一个 非极大值抑制(Non-maximum suppression) 得到最终的 predictions。

SSD 模型的最开始部分,本文称作 base network,是用于图像分类的标准架构。在 base network 之后,本文添加了额外辅助的网络结构:

  • Multi-scale feature maps for detection 
    在基础网络结构后,添加了额外的卷积层,这些卷积层的大小是逐层递减的,可以在多尺度下进行 predictions。

  • Convolutional predictors for detection 
    每一个添加的特征层(或者在基础网络结构中的特征层),可以使用一系列 convolutional filters,去产生一系列固定大小的 predictions,具体见 Fig.2。对于一个大小为 m×n,具有 p 通道的特征层,使用的 convolutional filters 就是 3×3×p 的 kernels。产生的 predictions,那么就是归属类别的一个得分,要么就是相对于 default box coordinate 的 shape offsets。 
    在每一个 m×n 的特征图位置上,使用上面的 3×3 的 kernel,会产生一个输出值。bounding box offset 值是输出的 default box 与此时 feature map location 之间的相对距离(YOLO 架构则是用一个全连接层来代替这里的卷积层)。

  • Default boxes and aspect ratios 
    每一个 box 相对于与其对应的 feature map cell 的位置是固定的。 在每一个 feature map cell 中,我们要 predict 得到的 box 与 default box 之间的 offsets,以及每一个 box 中包含物体的 score(每一个类别概率都要计算出)。 
    因此,对于一个位置上的 k 个boxes 中的每一个 box,我们需要计算出 c 个类,每一个类的 score,还有这个 box 相对于 它的默认 box 的 4 个偏移值(offsets)。于是,在 feature map 中的每一个 feature map cell 上,就需要有 (c+4)×k 个 filters。对于一张 m×n 大小的 feature map,即会产生 (c+4)×k×m×n 个输出结果。

这里的 default box 很类似于 Faster R-CNN 中的 Anchor boxes,关于这里的 Anchor boxes,详细的参见原论文。但是又不同于 Faster R-CNN 中的,本文中的 Anchor boxes 用在了不同分辨率的 feature maps 上。

这里写图片描述


Training

在训练时,本文的 SSD 与那些用 region proposals + pooling 方法的区别是,SSD 训练图像中的 groundtruth 需要赋予到那些固定输出的 boxes 上。在前面也已经提到了,SSD 输出的是事先定义好的,一系列固定大小的 bounding boxes。

如下图中,狗狗的 groundtruth 是红色的 bounding boxes,但进行 label 标注的时候,要将红色的 groundtruth box 赋予 图(c)中一系列固定输出的 boxes 中的一个,即 图(c)中的红色虚线框。 

这里写图片描述

事实上,文章中指出,像这样定义的 groundtruth boxes 不止在本文中用到。在 YOLO 中,在 Faster R-CNN中的 region proposal 阶段,以及在 MultiBox 中,都用到了。

当这种将训练图像中的 groundtruth 与固定输出的 boxes 对应之后,就可以 end-to-end 的进行 loss function 的计算以及 back-propagation 的计算更新了。

训练中会遇到一些问题:

  • 选择一系列 default boxes

  • 选择上文中提到的 scales 的问题

  • hard negative mining

  • 数据增广的策略

下面会谈本文的解决这些问题的方式,分为以下下面的几个部分。 

Matching strategy:

如何将 groundtruth boxes 与 default boxes 进行配对,以组成 label 呢?

在开始的时候,用 MultiBox 中的 best jaccard overlap 来匹配每一个 ground truth box 与 default box,这样就能保证每一个 groundtruth box 与唯一的一个 default box 对应起来。

但是又不同于 MultiBox ,本文之后又将 default box 与任何的 groundtruth box 配对,只要两者之间的jaccard overlap 大于一个阈值,这里本文的阈值为 0.5。 

Training objective:

SSD 训练的目标函数(training objective)源自于 MultiBox 的目标函数,但是本文将其拓展,使其可以处理多个目标类别。用 xpij=1 表示 第 i 个 default box 与 类别 p 的 第 j 个 ground truth box 相匹配,否则若不匹配的话,则 xpij=0

根据上面的匹配策略,一定有 ixpij1,意味着对于 第 j 个 ground truth box,有可能有多个 default box与其相匹配。

总的目标损失函数(objective loss function)就由 localization loss(loc) 与 confidence loss(conf) 的加权求和: 

L(x,c,l,g)=1N(Lconf(x,c)+αLloc(x,l,g))

其中:

  • N 是与 ground truth box 相匹配的 default boxes 个数

  • localization loss(loc) 是 Fast R-CNN 中 Smooth L1 Loss,用在 predict box(l 与 ground truth box(g 参数(即中心坐标位置,width、height)中,回归 bounding boxes 的中心位置,以及 width、height

  • confidence loss(conf) 是 Softmax Loss,输入为每一类的置信度 c

  • 权重项 α,设置为 1


Choosing scales and aspect ratios for default boxes:

大部分 CNN 网络在越深的层,feature map 的尺寸(size)会越来越小。这样做不仅仅是为了减少计算与内存的需求,还有个好处就是,最后提取的 feature map 就会有某种程度上的平移与尺度不变性。

同时为了处理不同尺度的物体,一些文章,如 ICLR 2014, Overfeat: Integrated recognition, localization and detection using convolutional networks,还有 ECCV 2014, Spatial pyramid pooling in deep convolutional networks for visual recognition,他们将图像转换成不同的尺度,将这些图像独立的通过 CNN 网络处理,再将这些不同尺度的图像结果进行综合。

但是其实,如果使用同一个网络中的、不同层上的 feature maps,也可以达到相同的效果同时在所有物体尺度中共享参数

之前的工作,如 CVPR 2015, Fully convolutional networks for semantic segmentation,还有 CVPR 2015, Hypercolumns for object segmentation and fine-grained localization 就用了 CNN 前面的 layers,来提高图像分割的效果,因为越底层的 layers,保留的图像细节越多。文章 ICLR 2016, ParseNet: Looking wider to see better 也证明了以上的想法是可行的。

因此,本文同时使用 lower feature maps、upper feature maps 来 predict detections。下图展示了本文中使用的两种不同尺度的 feature map,8×8 的feature map,以及 4×4 的 feature map: 

这里写图片描述

一般来说,一个 CNN 网络中不同的 layers 有着不同尺寸的 感受野(receptive fields)。这里的感受野,指的是输出的 feature map 上的一个节点,其对应输入图像上尺寸的大小。具体的感受野的计算,参见两篇 blog:

  • http://blog.csdn.net/kuaitoukid/article/details/46829355
  • http://blog.cvmarcher.com/posts/2015/05/17/cnn-trick/

所幸的是,SSD 结构中,default boxes 不必要与每一层 layer 的 receptive fields 对应。本文的设计中,feature map 中特定的位置,来负责图像中特定的区域,以及物体特定的尺寸。加入我们用 m 个 feature maps 来做 predictions,每一个 feature map 中 default box 的尺寸大小计算如下: 

sk=smin+smaxsminm1(k1),          k[1,m]

其中,smin 取值 0.2smax 取值 0.95,意味着最低层的尺度是 0.2,最高层的尺度是 0.95,再用不同 aspect ratio 的 default boxes,用 ar 来表示:ar={1,2,3,12,13},则每一个 default boxes 的 width、height 就可以计算出来: 
wak=skarhak=sk/ar

对于 aspect ratio 为 1 时,本文还增加了一个 default box,这个 box 的 scale 是 sk=sksk+1。所以最终,在每个 feature map location 上,有 6 个 default boxes。

每一个 default box 的中心,设置为:(i+0.5|fk|,j+0.5|fk|),其中,|fk| 是第 k 个 feature map 的大小,同时,i,j[0,|fk|)

在结合 feature maps 上,所有 不同尺度、不同 aspect ratios 的 default boxes,它们预测的 predictions 之后。可以想见,我们有许多个 predictions,包含了物体的不同尺寸、形状。如下图,狗狗的 ground truth box 与 4×4 feature map 中的红色 box 吻合,所以其余的 boxes 都看作负样本。 

这里写图片描述


Hard negative mining

在生成一系列的 predictions 之后,会产生很多个符合 ground truth box 的 predictions boxes,但同时,不符合 ground truth boxes 也很多,而且这个 negative boxes,远多于 positive boxes。这会造成 negative boxes、positive boxes 之间的不均衡。训练时难以收敛。

因此,本文采取,先将每一个物体位置上对应 predictions(default boxes)是 negative 的 boxes 进行排序,按照 default boxes 的 confidence 的大小。 选择最高的几个,保证最后 negatives、positives 的比例在 3:1

本文通过实验发现,这样的比例可以更快的优化,训练也更稳定。 

Data augmentation

本文同时对训练数据做了 data augmentation,数据增广。关于数据增广,推荐一篇文章:Must Know Tips/Tricks in Deep Neural Networks,其中的 section 1 就讲了 data augmentation 技术。

每一张训练图像,随机的进行如下几种选择:

  • 使用原始的图像
  • 采样一个 patch,与物体之间最小的 jaccard overlap 为:0.10.30.50.7 与 0.9
  • 随机的采样一个 patch

采样的 patch 是原始图像大小比例是 [0.11],aspect ratio 在 12 与 2 之间。

当 groundtruth box 的 中心(center)在采样的 patch 中时,我们保留重叠部分。

在这些采样步骤之后,每一个采样的 patch 被 resize 到固定的大小,并且以 0.5 的概率随机的 水平翻转(horizontally flipped)


原创粉丝点击