DSSD:Deconvolutional Single Shot Detector
算法背景
本文的主要贡献在于将上下文索引和残差网络加到了SSD算法中,然后在反卷积层上增加SSD和residual-101,以在目标检测中提高对小目标的准确性。DSSD将SSD的VGG网络用Resnet-101进行了替换,在分类回归之前引入了残差模块,在SSD添加的辅助卷积层后又添加了反卷积层形成“宽 - 窄 - 宽”的“沙漏”结构。DSSD相比SSD的一个最大的提升在于对小目标的检测度上DSSD有了很大的提升,文章的最后部分也展示了小目标的检测效果。即便如此,DSSD的检测速度相比SSD慢了很多,其中很大一部分原因在于引入的Resnet-101太深。
网络结构
上图为SSD网络,下图为DSSD,蓝色部分是在SSD基础网络的基础上添加的辅助层,红色部分是DSSD在SSD的后边添加的反卷积层,红色的反卷积层和蓝色的卷积层对应的尺度相同,融合后再送入上面的蓝色框内的预测模块进行分类和回归。
作者使用了resnet 101替换了VGG网络,这么做是为了提高精度,因为resnet有更深的深度,但是需要注意,在300x300的输入图像下,使用resnet之后精度反而降低,在512x512的输入图像下,精度才略微有提升,加入prediction模块和反卷积模块后,精度才有稳定提升。
Prediction 模块
左图(a)是SSD中用于分类和回归用的结构,即在特征图上直接连接1*1的卷积,一个用来分类,一个用于回归。图(c)是文中用于分类和回归的最优结构。图(b)、图(c)、图(d)均是在SSD的基础上将原有的结构改成Resnet模块(不清楚的可以查一下Resnet那篇文章)。这么做的目的是提取更深维度的特征用于分类和回归。添加的位置在反卷积结构之后,分类和回归之前。Eltw sum有两种,一种点和、一种点积,最后实验证明点积的效果最好。
反卷积模块
上方的反卷积层接网络结构中的红色区域的层,下面的特征层接SSD中的特征层。融合特征图C作为下一级DM模块的要反卷积的特征图再进行下一级的DM模块操作
训练方法
作者先预训练好一个ssd模型,然后用训练好的SSD模型来初始化DSSD网络,具体的,训练分为两个阶段,先冻结DSSD网络中的所有SSD网络层的参数,只用预训练号的SSD模型去微调DSSD层的权重;第二阶段解冻第一阶段的所有层的参数,放开了微调。