vgg到ssd

VGG

VGGNet是2014年提出的卷积神经网络结构,其主要与AlexNet发展而来。同GoogLeNet一样证明加深网络层数是有效的。不过没有那么的炫。

贴一篇论文翻译:http://noahsnail.com/2017/08/17/2017-8-17-VGG%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E6%96%87%E7%89%88/

主要进行了两个方面的改进:(1)在卷积层使用更小的filter尺寸和间隔。(2)在整个图片和multi—scale上训练和测试图片。网络基本上为3*3的卷积层构成。3*3的卷积层具有如下特性:(1)是最小能够捕获上下左右和中心概念的尺寸。(2)代替大的卷积核。例如,2个代替5*5,3个代替7*7.(3)卷积层后使用激活函数,加入了更多的非线性。(4)更少的参数。

卷积层的通道数变化很常规,在经过maxpooling层后加倍,从64最终变化到512.这种相对一致的网络结构对研究者很有吸引力。但是相对于GoogLeNet,需要训练的特征数量非常的巨大。

VGG一共有6个网络模型,从低到高层数逐渐加深。为加快训练,通常先训练浅层网络,在训练深层网络如E时,使用A中的参数进行初始化对应的层。

多尺度训练:原始图片需要等比例缩放,保证短边的长度>224,然后在图片上进行裁剪,裁剪尺度固定为224*224.

文章介绍了两种多尺度的训练方法:(1)在不同的尺度下,训练多个分类器。分别训练s=256和s=384两个分类器。(2)直接训练一个分类器,每次输入数据时,每张图片被重新缩放,缩放的短边长度在[256,512]之间。初始化时使用s=384.

多尺度训练的思想十分的重要,在后面的神经网络中都采用了这种方法。在yolov2中更是可以进行精度和速度的一个调整,这个后面的学习再说。

SSD

论文网址:https://arxiv.org/abs/1512.02325

翻译网址:http://noahsnail.com/2017/12/11/2017-12-11-Single%20Shot%20MultiBox%20Detector%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E6%96%87%E7%89%88/

按照模型的发展顺序来讲,应该先介绍R-CNN模型,然后是Fast-RCNN,接着Faster-RCNN,再然后为SSD模型。但是呢R-CNN已经比较老了,后面的网络已经将前面的这些思想和技巧都融合贯通了,所以这里直接从较新的目标检测网络SSD学起。

和FasterRCNN先提取建议框,在进行分类不同,SSD利用Anchor直接进行分类和BoundingBox回归。Anchor就是一个具有一定大小基准框,然后按照不同倍数和长宽比例得到不同大小的框。这样的SSD是一种端对端的训练方法。其速度的改进来自于消除提出边界框和随后的重采样阶段。

模型特点:

1.多尺度特征映射。将卷积特征层添加到截取的基础网络的末端。大尺度的特征图有较多的信息,可以用来检测小物体。而小尺度的特征图用来检测较大的物体。允许在多个尺度上对检测结果进行预测。

2.采用卷积层作为作为预测器。代替了全连接层,直接采用卷积对不同的特征图进行提取检测结果。

vgg到ssd_第1张图片

从以看出,SSD将conv4_3、conv7、conv8_2、conv9_2、conv10_2、conv11_2都连接到最后的卷积预测层,这就是多尺度特征的映射,有利用不同大小目标的预测。另一方面,对于密集群目标,这样做可能会有更好的效果。这个地方有篇文章有解释的:https://zhuanlan.zhihu.com/p/32702478

这个地方和yolov2的实现不同,记录一下,在yolov2中,直接从浅层将数据连接到深层,然后进行融合,然后进行预测。

3.预测值为不同尺度和长宽比的默认边界框的偏移量和相关的置信度。这样每个位置周围应用总共(c+4)k个滤波器,4为边界框形状的偏移量,c为预测的类别数(有一个为背景),k为k个边界框。

4.允许网络为多个重叠的默认边界框预测高分,不要求仅挑选一个最大重叠边界框。

5.损失函数:

损失函数包含两个部分 定位损失(loc) 和 置信度损失(conf).

定位损失:

vgg到ssd_第2张图片


N为匹配的默认边界框的数量。定位损失是预测框(l)与真实框(g)之间的Smooth L1损失。回归默认边界框(d)的中心偏移量(cx,cy)和其宽度(w),高度(h)的偏移量。

置信度损失又包括 前景的分类损失和 背景的分类损失。

vgg到ssd_第3张图片

这里的N为用于前景分类的anchor数目,吧IOU>0.5的anchor都用作前景分类。在IOU<0.5的中选择一部分作为背景分类。因为背景的anchor数量较多。源码中 背景:前景=3:1

 6.不同的特征层默认边框的尺寸计算如下:


纵横比 α={1,2,3, 1/2,1/3}

长宽计算如下:


长宽比为1时还有默认的边界框:


如此众多的边界框,几乎可以对应图像中的所有目标了。

7.数据增强。

为了使模型对各种输入目标大小和形状更鲁棒,每张训练图像都是通过以下选项之一进行随机采样的:

  • 使用整个原始输入图像。
  • 采样一个图像块,使得与目标之间的最小Jaccard重叠为0.1,0.3,0.5,0.7或0.9。
  • 随机采样一个图像块。

每个采样图像块的大小是原始图像大小的[0.1,1],长宽比在12

12和2之间。如果实际边界框的中心在采用的图像块中,我们保留实际边界框与采样图像块的重叠部分。在上述采样步骤之后,除了应用类似于文献[14]中描述的一些光度变形之外,将每个采样图像块调整到固定尺寸并以0.5的概率进行水平翻转。

8.开源网络模型:https://github.com/weiliu89/caffe/tree/ssd

9.作者的模型分析。(1)数据增强十分重要(尤其对于小目标而言);(2)更多的默认边界框起到了作用;(3)Atrous更快;(4)多个不同分辨率的输出层起到了效果。影响如下:

vgg到ssd_第4张图片

结论:在给定合适训练策略的情况下,大量仔细选择的默认边界框会提高性能。我们证明了给定相同的VGG-16基础架构,SSD在准确性和速度方面与其对应的最先进的目标检测器相比毫不逊色。在PASCAL VOC和COCO上,我们的SSD512模型的性能明显优于最先进的Faster R-CNN[2],而速度提高了3倍。我们的实时SSD300模型运行速度为59FPS,比目前的实时YOLO[5]更快,同时显著提高了检测精度。


参考文章(部分链接文中已给出):https://zhuanlan.zhihu.com/p/33544892


你可能感兴趣的:(vgg到ssd)