论文地址:DSSD:Deconvolutionl Single Shot Detector
论文时间:2017.01发布,无修改
全文概括
DSSD 相对于 SSD 增加部件的思路和 FPN 相似,都是增加一个 top-down 路径,同时增加一个 skip-connection 横向连接。在预测时,DSSD 研究了几个 预测模块 (PM,Prediction Module) ,发现在输出的 featupre map 与最终的回归器和分类器之间添加一个残差模块会使得检测效果变好。
作者认为,DSSD 添加的 deconvolutional 层能给检测器增加上下文信息,这能让小物体的检测提高不少(尤其是对于具有特定背景联系的类别)。
在VOC2007和VOC2012数据集上,当输入图片较小时,如300或321,DSSD和SSD是不如当时最先进的检测算法 R-FCN的,在V2007上,DSSD513 的mAP为81.5,SSD513 的mAP为80.6, R-FCN 的mAP为80.5,DSSD321 的mAP为78.6,SSD321 的mAP为77.1;在COCO数据集上,即使输入图片较小,DSSD的效果也由于R-FCN;在COCO数据集上,DSSD513 达到33.2,R-FCN为29.9;
模型介绍
增加目标的上下文信息,能对小目标的检测提供帮助。作者认为,Encode/Decode的方式能提供上下文信息(在分割网络中验证,笼统而言,Encode就是从大变下的过程,Decode就是从小变大的过程。最小的"bottleneck layer"能提供整张输入图片的信息,可以decode成整个图像的feature map)。
DSSD将SSD中的骨架网络从VGG替代成Residual-101,但Res-101和deconv layer不能即拿即用,即直接拼凑并不能得到好结果,故设计了连接模块。
用Res-101直接代替VGG并不会提高mAP,甚至会下降(在VOC2007和VOC2012会下降,在COCO数据集会有提高),但当使用了新的predict module 会显著增加mAP。
预测模块
MS-CNN 指出:改进每个任务的子网可以提高准确性,故DSSD改进了预测层,最终采用的是为每一个测试层添加一个残差块。(最后采用的是下图©,因为实验发现两个残差块并未提高准确率)
下图是消融学习,得到每个模块的作用:(其中,PM是Predict module, DM是Deconvolution module, PM是上图的三个模块,DM是两种feature map 融合方式,元素和、元素积)
Deconvolutional SSD
deconvolution 层可以提供高层次的上下文信息,增加了feature map的分辨率,同时通过skip-connection加强特征信息。一系列的 deconv 层有效地形成非对称沙漏网络结构。但 deconv 层路径相对于骨干路径非常浅,是由两个原因:(1) 检测是视觉的基本任务,可能需要给下游提供信息,因此,速度是一个重要因素。若构造对称网络,会造成推理时间的加倍(像hourglass一样),这不是想要的快速检测框架。而且deconv 层带来很大的计算成本,尤其是还有 skip-connection 这种操作;(2) deconv 层没有pretrain阶段,因此在分类器的预训练中给的是整个图片的标签,而不是局部的,像素的。目前最先进的检测器依赖于迁移学习,随机初始化不如在分类数据集上预训练得到的准确率来的高,收敛来得快。
Deconvolution Module
这个模块是包括deconv 操作以及 与 feature map 的连接操作。
里面有三个细节:(1) 在每一个卷积层后加一个 BN 层;(2) 使用 deconvolution 而不是双线性采样(作者实验发现双线性采样学习慢,收敛慢,没有实验到底,中止了);(3) 使用元素积 而不是元素和。
Training
标定ground truth 与 default box 的IoU最高以及 IoU大于 0.5都设定为正框,选定置信度损失大的标定为负框(正负框比为 1:3 )。使用大量的数据增强手段,如随机裁剪、 随机光度失真、随机翻转。需要注意的是,SSD使用的随机图片扩展增强技巧对检测小目标来说很有帮助。(数据增强给DSSD带来了8.8%的mAP提升)。对ground truth 进行聚类,最终比例选择多一个1.6,即(1.6, 2.0, 3.0)。
使用RCNN系列的损失函数,即回归使用平滑L1损失函数。
实验
基础网络
使用Res-101代替VGGnet,在conv5阶段,stride为2的第一个卷积层改成步幅为1,同时使用空洞(dilation)系数为2的空洞卷积,以获得相同感受野的同时,得到更高的分辨率。
转置卷积和空洞卷积
deconv 是上采样,增大feature 的尺寸;
deliated conv是增大感受野,不是上采样。这种增大感受野的手段不需要减小size,即不需要通过pooling 或 stride 实现。
PASCAL VOC 2007
使用2007训练集和2012训练集一起训练,在2007测试集上测试。
首先,对于原始的SSD模型,对于 321 * 321 的输入图片,batch-size=32;对于 513 * 513 的输入图片,batch-size=20。初始 40k 学习率为 10-3,在60k 时 lr=10-4,在70k 时 lr = -5。将训练好的SSD作为DSSD的预训练模型。
在第一阶段,固定原始SSD模型的参数(即不参加训练),只训练额外的deconv 层参数(以及连接层参数)。前20k次迭代 lr=10-3,接下来 10k 次迭代 lr=-4。在第二阶段,微调整个网络,前20k次迭代 lr=10-3,接下来 20 k次迭代 lr=-4。
当输入较小时,用Res-101还是VGG并没太大区别(虽然Res101-SSD收敛快,比如只需要VGG-SSD一半的迭代次数)。
deconv 和 skip-connect 带来 1% ~ 1.5%的收益。
虽然DSSD不需要加入手动设计的区域上下文信息,DSSD513 比试图加入上下文信息的 MR-CNN和 ION 要好,同时也比 R-FCN 要好 1%。
DSSD 对有特定背景的小对象的类别有大幅地改进,如飞机、船、牛羊等,对唯一具有上下文的类别能有更好的性能。
在VOC 2007 上的消融学习:
其中,PM=Prediction module,DM = Deconvolution module
当增加了DM,元素积得到了最佳结果 78.6%。作者尝试了双线性插值,但训练速度下降了,而且训练误差下降地很慢。
同时,作者也微调了整个网络(在增加和微调整个DM后的整个网络),但结果并未变好。(如图中的 Stage2 )
PASCAL VOC 2012
使用VOC2007和VOC2012的训练集一起作为训练集,使用VOC 2012的测试集作为测试集。
对于SSD模型,前 60k 次迭代 lr=10-3,接下来 30k 次迭代 lr=10-4,最后 10k 次迭代 lr=10-5。对于DSSD,使用SSD模型作为预训练模型,同时冻结SSD模型的训练。在训练转置卷积端时,前 30k 次迭代 lr=10-3,接下来 20k 次迭代 lr=10-4。
COCO
在COCO数据集上,当使用Res-101,同时使用BN层的时候,作者的配置为4块 P40 GPU,训练SSD321的batch-size设为48(这是作者配置能达到的最大batch-size),训练SSD513的batch-size 设为20。【根据作者的观察,在用4块GPU训练时,当batch size 小于16时,在Batch Normalization 上就会产生不稳定的结果,会影响精确度】
训练SSD时,前160k次迭代 lr=10-3,接下来60k次迭代 lr=10-4,最后20k次迭代 lr=10-5。
训练DSSD的转置卷积时,前 80k 次迭代 lr=10-3,接下来50次迭代 lr=10-4。
在COCO 数据集上,即使输入尺寸为300,DSSD结果也比 Faster RCNN和 ION要好。在这个数据集上,SSD321-Res101能带来3.5%的提升。
Res101-SSD(相对于VGG-Net-SSD)在COCO数据集上能对中型或大型对象带来不小的提升。