首页 > 学院 > 开发设计 > 正文

论文阅读:SSD: Single Shot MultiBox Detector

2019-11-08 01:24:26
字体:
来源:转载
供稿:网友

,有一张如下的图:

这里写图片描述

博客 1:http://www.cnblogs.com/jianyingzhou/p/5386222.html

最早用的就是 deeplab 的文章了,Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFS 这篇文章和 fcn 不同的是,在最后产生 score map 时,不是进行upsampling,而是采用了 hole algorithm,就是在 pool4 和 pool 5层,步长由 2 变成 1,必然输出的 score map 变大了,但是 receptive field 也变小了,为了不降低 receptive field,怎么做呢?利用 hole algorithm,将卷积 weights 膨胀扩大,即原来卷积核是 3x3,膨胀后,可能变成 7x7 了,这样 receptive field 变大了,而 score map 也很大,即输出变成 dense 的了。

这么做的好处是,输出的 score map 变大了,即是 dense 的输出了,而且 receptive field 不会变小,而且可以变大。这对做分割、检测等工作非常重要。

博客 2:http://blog.csdn.net/tangwei2014/article/details/50453334

既想利用已经训练好的模型进行 fine-tuning,又想改变网络结构得到更加 dense 的 score map.

这个解决办法就是采用 Hole 算法。如下图 (a) (b) 所示,在以往的卷积或者 pooling 中,一个 filter 中相邻的权重作用在 feature map 上的位置都是物理上连续的。如下图 (c) 所示,为了保证感受野不发生变化,某一层的 stride 由 2 变为 1 以后,后面的层需要采用 hole 算法,具体来讲就是将连续的连接关系是根据 hole size 大小变成 skip 连接的(图 (c) 为了显示方便直接画在本层上了)。不要被 (c) 中的 padding 为 2 吓着了,其实 2 个 padding 不会同时和一个 filter 相连。

pool4 的 stride 由 2 变为 1,则紧接着的 conv5_1, conv5_2 和 conv5_3 中 hole size 为 2。接着 pool5 由 2 变为 1 , 则后面的 fc6 中 hole size 为 4。

这里写图片描述

本文还将 fully convolutional reduced (atrous) VGGNet 中的所有的 dropout layers、fc8 layer 移除掉了。

本文在 fine-tuning 预训练的 VGG model 时,初始 learning rate 为 10−3,learning rate decay 的策略随数据集的不同而变化。

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_3conv7(原先的 FC7)conv8_2conv9_2conv10_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 个 default boxes。

文献 ICLR 2016, ParseNet: Looking wider to see better 指出,conv4_3 相比较于其他的 layers,有着不同的 feature scale,我们使用 ParseNet 中的 L2 normalization 技术将 conv4_3 feature map 中每一个位置的 feature norm scale 到 20,并且在 back-propagation 中学习这个 scale。

在最开始的 40K 次迭代中,本文使用的 learning rate 是 10−3,再接着迭代 20K 次。

下面 Table 1 显示了,我们的 SSD300 model 的精度已经超过了 Fast R-CNN,当我们用 SSD 在更大的图像尺寸上,500×500 的 mAP。

这里写图片描述

为了更细节的了解本文的两个 SSD model,我们使用了 ECCV 2012, Diagnosing error in object detectors 的检测分析工具。下图 Figure 3 显示了 SSD 可以高质量的检测不同种类的物体。

这里写图片描述

下图 Figure 4 展示了 SSD 模型对 bounding box 的 size 非常的敏感。也就是说,SSD 对小物体目标较为敏感,在检测小物体目标上表现较差。其实这也算情理之中,因为对于小目标而言,经过多层卷积之后,就没剩多少信息了。虽然提高输入图像的 size 可以提高对小目标的检测效果,但是对于小目标检测问题,还是有很多提升空间的。

同时,积极的看,SSD 对大目标检测效果非常好。同时,因为本文使用了不同 aspect ratios 的 default boxes,SSD 对于不同 aspect ratios 的物体检测效果也很好。

这里写图片描述

Model analysis

为了更好的理解 SSD,本文还使用控制变量法来验证 SSD 中的每一部分对最终结果性能的影响。测试如下表 Table 2 所示:

这里写图片描述
从上表可以看出一下几点:

数据增广(Data augmentation)对于结果的提升非常明显 Fast R-CNN 与 Faster R-CNN 使用原始图像,以及 0.5 的概率对原始图像进行水平翻转(horizontal flip),进行训练。如上面写的,本文还使用了额外的 sampling 策略,YOLO 中还使用了 亮度扭曲(photometric distortions),但是本文中没有使用。 做了数据增广,将 mAP 从 65.4%。 我们还不清楚,本文的 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。

Atrous 使得 SSD 又好又快 如前面所描述,我们根据 ICLR 2015, DeepLab-LargeFOV,使用结合 atrous algorithm 的 VGG16 版本。 如果我们使用原始的 VGG16 版本,即保留 pool5 的参数为:2×2−s2。

PASCAL VOC 2012

本文又在 VOC 2012 test 上进行的实验,比较结果如下:

这里写图片描述

MS COCO

为了进一步的验证本文的 SSD 模型,我们将 SSD300、SSD500 在 MS COCO 数据集上进行训练检测。

因为 COCO 数据集中的检测目标更小,我们在所有的 layers 上,使用更小的 default boxes。

这里,还跟 ION 检测方法 进行了比较。

总的结果如下:

这里写图片描述

Inference time

本文的方法一开始会生成大量的 bounding boxes,所以有必要用 Non-maximum suppression(NMS)来去除大量重复的 boxes。

通过设置 confidence 的阈值为 0.01,我们可以过滤掉大多数的 boxes。

之后,我们再用 Thrust CUDA library 进行排序,用 GPU 版本的实现来计算剩下的 boxes 两两之间的 overlap。然后,进行 NMS,每一张图像保留 top 200 detections。这一步 SSD300 在 VOC 20 类的每张图像上,需要耗时 2.2 msec。

下面是在 PASCAL VOC 2007 test 上的速度统计:

这里写图片描述

这篇文章居然把相关工作总结放在最后面,我还是第一次见到。

具体的看原文吧。

最后放几张结果图:

这里写图片描述

这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表