一、摘要
本文详细解释背景文章《SSD: Single Shot MultiBox Detector》,这篇文章提出了 SSD(The Single Shot Detector) 物体检测模型,与现在流行的检测模型一样,将检测过程整合成一个 single deep neural network,便于训练与优化,同时提高检测速度。
SSD 将输出一系列离散化(discretization)的 bounding boxes,这些 bounding boxes 是在 不同layers的 feature maps 上生成的,这些feature maps有不同的 aspect ratio和scales。
在 prediction 阶段:
- 判断每一个 default box 中的物体属于每个类别的可能性,即 score。例如对于 PASCAL VOC 数据集,总共有 20 类,得出每一个 bounding box 中物体属于这 20 个类别的每一种的可能性。
- 对这些default boxs 的 shape 进行微调,使其符合物体的 ground truth bounding boxes。
- 为了处理相同物体的不同尺寸的情况,SSD 结合了不同 feature maps 的 predictions。
相比需要 object proposals 的检测模型,如faster-rcnn,SSD 方法完全取消了 proposals generation、pixel resampling 或者 feature resampling 这些阶段,使得 SSD 更容易去优化训练,也更容易地将检测模型融合进系统之中。
在 PASCAL VOC、MS COCO、ILSVRC 数据集上的实验显示,SSD 在保证精度的同时,其速度要比用 region proposals 的方法要快很多。
SSD 相比较于其他单结构模型(YOLO),SSD 取得更高的精度,即是是在输入图像较小的情况下。如输入 300×300 大小的 PASCAL VOC 2007 test 图像,在 Titan X 上,SSD 以 58 帧的速率,同时取得了 72.1%的mAP。
如果输入的图像是 500×500 ,SSD 则取得了75.1% 的 mAP,比目前最 state-of-art 的 Faster R-CNN 要好很多。
二、介绍
本文提出的实时检测方法,消除了中间的 bounding boxes、pixel or feature resampling 的过程。虽然本文不是第一个提出这种思想(YOLO),但是本文做了一些提升性的工作,既保证了速度,也保证了检测精度。
本文的主要贡献总结如下:
- 提出了新的物体检测方法:SSD,比原先最快的 方法,还要快,还要精确。保证速度的同时,其结果的 mAP 可与使用 region proposals 技术的方法相媲美。
- SSD 方法的核心就是 预测 object(物体),以及其 归属类别的 score(得分);同时,在 feature map 上使用小的卷积核,来预测 一系列 bounding boxes 的 box offsets。
- 本文为了得到高精度的检测结果,在不同层次的 feature maps 上去 predict object、box offsets,同时,还得到不同 aspect ratio 的 predictions。
- 本文的这些改进设计,能够在当输入分辨率较低的图像时,保证检测的精度。同时,这个整体 end-to-end 的设计,训练也变得简单。在检测速度、检测精度之间取得较好的 trade-off。
- 本文提出的模型(model)在不同的数据集上,如 、MS COCO、ILSVRC, 都进行了测试。在检测时间(timing)、检测精度(accuracy)上,均与目前物体检测领域 state-of-art 的检测方法进行了比较。
第三、SSD算法原理
这部分详细讲解了 SSD 物体检测框架,以及 SSD 的训练方法。
这里,先弄清楚下文所说的 default box 以及 feature map cell 是什么。看下图:
- feature map cell 就是将 feature map 切分成的一个个格子;
- 而 default box 就是每一个格子上,一系列固定大小的 box,即图中虚线所形成的一系列 boxes。
1、模型
SSD 是基于一个前向传播 CNN 网络,产生一系列 固定大小(fixed-size) 的 bounding boxes,以及每一个 box 中包含物体实例的可能性,即 score。之后,进行一个非极大值抑制(Non-maximum suppression) 得到最终的 predictions。
SSD 模型的最开始部分,本文称作 base network,是用于图像分类的标准架构。在 base network 之后,本文添加了额外辅助的网络结构
- Mult-scale feature map for detection
在base network后,添加一些卷积层,这些层的大小逐渐减小,可以进行多尺度预测
- Convolutional predictors for detection
每一个新添加的层,可以使用一系列的卷积核进行预测。对于一个大小为m*n、p通道的 特征层,使用3*3的卷积核进行预测,在某个位置上预测出一个值,该值可以是某一类别的得分,也可以是相对于default bounding boxes的偏移量,并且在图像的每个位置都将产生一个值,如图2所示。
- Default boxes and aspect ratio
在特征图的每个位置预测K个box。对于每个box,预测C个类别得分,以及相对于default bounding box的4个偏移值,这样需要(C+4)*k个预测器,在m*n的特征图上将产生(C+4)*k*m*n个预测值。这里,default bounding box类似于FasterRCNN中anchors,如图1所示。
这里的 default box 很类似于 Faster R-CNN 中的 Anchor boxes,关于这里的 Anchor boxes,详细的参见原论文。但是又不同于 Faster R-CNN 中的,本文中的 Anchor boxes 用在了不同分辨率的 feature maps 上。
2、训练
在训练时,本文的 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
- 数据增广的策略
3、解决策略
1)、匹配策略
如何将 groundtruth boxes 与 default boxes 进行配对,以组成 label 呢?
首先,用 中的 best jaccard overlap 来匹配每一个 ground truth box 与 default box,这样就能保证每一个 groundtruth box 与唯一的一个 default box 对应起来。然后,将 default box 与任何的 groundtruth box 配对,只要两者之间的 jaccard overlap 大于一个阈值,这里本文的阈值为 0.5。
训练目标:
SSD 训练的目标函数(training objective)源自于 MultiBox 的目标函数,但是本文将其拓展,使其可以处理多个目标类别。用 Xpij表示 第 i个 default box 与 类别p的 第j个 ground truth box 相匹配,否则若不匹配的话,则Xpij 0 = 0 。
根据上面的匹配策略,一定有∑Xpij≥1意味着对于第j个 ground truth box,有可能有多个 default box 与其相匹配。
总的目标损失函数(objective loss function)就由 localization loss(loc) 与 confidence loss(conf) 的加权求和。
2)选择默认框的比例和纵横比
大部分 CNN 网络在越深的层,feature map 的尺寸(size)会越来越小。这样做不仅仅是为了减少计算与内存的需求,还有个好处就是,最后提取的 feature map 就会有某种程度上的平移与尺度不变性。
同时为了处理不同尺度的物体,一些文章,如 ,还有 ,他们将图像转换成不同的尺度,将这些图像独立的通过 CNN 网络处理,再将这些不同尺度的图像结果进行综合。
但是其实,如果使用同一个网络中的、不同层上的 feature maps,也可以达到相同的效果,同时在所有物体尺度中共享参数。
之前的工作,如 ,还有 就用了 CNN 前面的 layers,来提高图像分割的效果,因为越底层的 layers,保留的图像细节越多。文章 也证明了以上的想法是可行的。
因此,本文同时使用 lower feature maps、upper feature maps 来 predict detections。下图展示了本文中使用的两种不同尺度的 feature map, 的feature map,以及 的 feature map:
一般来说,一个 CNN 网络中不同的 layers 有着不同尺寸的 感受野(receptive fields)。这里的感受野,指的是输出的 feature map 上的一个节点,其对应输入图像上尺寸的大小。具体的感受野的计算,参见两篇 blog:
为了处理不同尺度的物体,一些文章,如:Overfeat,处理不同大小的图像,然后将结果综合。实际上,采用同一个网络,不同层上的feature map,也能达到同样的效果。图像分割算法FCN表明,采用低层的特征图可以提高分割效果,因为低层保留的图像细节信息比较多。因此,该论文采用lower feature map、upper feature map进行预测。
3)难分样本挖掘
在生成一系列的 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。
本文通过实验发现,这样的比例可以更快的优化,训练也更稳定。
4)数据增强
每一张训练图像,随机的进行如下几种选择:
- 使用原始的图像
- 采样一个 patch,与物体之间最小的 jaccard overlap 为:0.1,0.3,0.5,0.7,0.9
- 随机的采样一个 patch
采样的 patch 是原始图像大小比例[0.1,1],aspect ratio 在1/2与 2之间。
当 groundtruth box 的 中心(center)在采样的 patch 中时,我们保留重叠部分。
在这些采样步骤之后,每一个采样的 patch 被 resize 到固定的大小,并且以0.5的概率随机的 水平翻转(horizontally flipped)
4、实验结果
本文的 Base network 是基于 ICLR 2015, VGG16 来做的,在 ILSVRC CLS-LOC 数据集上进行了预训练。
与 ICLR 2015, DeepLab-LargeFOV 的工作类似,本文将 VGG 中的 FC6 layer、FC7 layer 转成为 卷积层,并从模型的 FC6、FC7 上的参数,进行采样得到这两个卷积层的 parameters。
还将 Pool5 layer 的参数,从 2×2?s2 转变成 3×3?s1 ,外加一个 pad(1),如下图:
:
但是这样变化后,会改变感受野(receptive field)的大小。因此,采用了 atrous algorithm 的技术,这里所谓的 atrous algorithm,我查阅了资料,就是 hole filling algorithm。
PASCAL VOC 2007
在这个数据集中,与 Fast R-CNN、Faster R-CNN 进行了比较,几种检测网络都用相同的训练数据集,以及预训练模型(VGG16)。
本文训练图像是 VOC 2007 train + VOC 2007 validation + VOC 2012 train + VOC 2012 validation,共计 16551 张图像。测试集选取的是 VOC 2007 test,共计 4952 张图像。
下图展示了 SSD300 model 的结构
我们用 conv4_3,conv7(原先的 FC7),conv8_2,conv9_2,conv10_2,以及pool11,这些 layer 来 predict location、 confidence。
在 VGG16 上新加的 convolutional layers,其参数初始化都用 JMLR 2010, Understanding the difficulty of training deep feedforward neural networks 提出的xavier 方法。
因为 conv4_3 的尺寸比较大,size 为 38×38 的大小,我们只在上面放置 3 个 default boxes,一个 box 的 scale 为 0.1 ,另外两个 boxes 的 aspect ratio 分别为 12 、2 。但对于其他的用来做 predictions 的 layers,本文都放了 6 个 default boxes。
文献 ICLR 2016, ParseNet: Looking wider to see better 指出,conv4_3 相比较于其他的 layers,有着不同的 feature scale,我们使用ParseNet 中的 L2 normalization 技术将 conv4_3 feature map 中每一个位置的 feature normscale 到 20,并且在 back-propagation 中学习这个 scale。
在最开始的 40K 次迭代中,本文使用的 learning rate 是 10 ?3 ,之后将其减小到10 ?4 ,再接着迭代 20K 次。
下面 Table 1 显示了,我们的 SSD300 model 的精度已经超过了 Fast R-CNN,当我们用 SSD 在更大的图像尺寸上,500×500 训练得到的 model,甚至要比 Faster R-CNN 还要高出 1.9% 的 mAP。
为了更细节的了解本文的两个 SSD model,我们使用了 ECCV 2012, Diagnosing error in object detectors的检测分析工具。下图显示了 SSD 可以高质量的检测不同种类的物体。
下图 展示了 SSD 模型对 bounding box 的 size 非常的敏感。也就是说,SSD 对小物体目标较为敏感,在检测小物体目标上表现较差。其实这也算情理之中,因为对于小目标而言,经过多层卷积之后,就没剩多少信息了。虽然提高输入图像的 size 可以提高对小目标的检测效果,但是对于小目标检测问题,还是有很多提升空间的。
同时,积极的看,SSD 对大目标检测效果非常好。同时,因为本文使用了不同 aspect ratios 的 default boxes,SSD 对于不同 aspect ratios 的物体检测效果也很好。
5、模型分析
为了更好的理解 SSD,本文还使用控制变量法来验证 SSD 中的每一部分对最终结果性能的影响。测试如下表 Table 2 所示:
从上表可以看出一下几点:
- 数据增广对于结果的提升非常明显
Fast R-CNN 与 Faster R-CNN 使用原始图像,以及 0.5 的概率对原始图像进行水平翻 转(horizontal flip),进行训练。如上面写的,本文还使用了额外的 sampling 策略,YOLO 中还使用了亮度扭曲(photometric distortions),但是本文中没有使用。
做了数据增广,将 mAP 从 65.4% 提升到了 72.1% ,提升了6.7% 。
我们还不清楚,本文的 sampling 策略会对 Fast R-CNN、Faster R-CNN 有多少好处。但是估计不会很多,因为 Fast R-CNN、Faster R-CNN 使用了feature pooling,这比人为的对数据进行增广扩充,还要更 robust。
- 使用更多的 feature maps 对结果提升更大
类似于 FCN,使用含图像信息更多的低 layer 来提升图像分割效果。我们也使用了 lower layer feature maps 来进行 predict bounding boxes。
我们比较了,当 SSD 不使用 conv4_3 来 predict boxes 的结果。当不使用 conv4_3,mAP 下降到了 68.1% 。
可以看见,低层的 feature map 蕴含更多的信息,对于图像分割、物体检测性能提升帮助很大的。
- 使用更多的 default boxes,结果也越好
如 Table 2 所示,SSD 中我们默认使用 6 个 default boxes(除了 conv4_3 因为大小问题使用了 3 个 default boxes)。如果将 aspect ratios 为13 、3 的 boxes 移除,performance 下降了 0.9% 。如果再进一步的,将12 、2 的 default boxes 移除,那么 performance 下降了近 2% 。
- Atrous 使得 SSD 又好又快
如前面所描述,我们根据 ICLR 2015, DeepLab-LargeFOV,使用结合 atrous algorithm 的 VGG16 版本。
如果我们使用原始的 VGG16 版本,即保留 pool5 的参数为:2×2?s2 ,且不从 FC6,FC7 上采集 parameters,同时添加 conv5_3 来做 prediction,结果反而会下降 0.7% 。同时最关键的,速度慢了50% 。
COCO 数据集算法比较
最后:相关结果图片
本文暂时没有评论,来添加一个吧(●'◡'●)