DSSD

论文信息

Cheng-Yang Fu, Wei Liu, Ananth Ranga, Ambrish Tyagi, Alexander C. Berg. DSSD : Deconvolutional Single Shot Detector. arXiv 2017.

https://arxiv.org/abs/1701.06659

前言

本文仅根据题目就能推断处很多信息:

DSSD - D SSD, D代表反卷积, 反卷积重要意义就是提升分辨率, 提升分辨率的重要效果就是小物检测性能提升. SSD代表其backbone.

本文还有一些细节特点如在特定背景下检测性能会有所提升, 在每个反卷积层加入输出进行预测从而提升最终性能等.

Introduction

增加large-scale context对于目标检测尤其是小物检测质量提升我们多次提到过, 这也很容易理解.

当时流行一种可以融合背景的方法"encoder decoder", 因为其先encode压缩输出尺寸, 后decode扩充尺寸, 看起来像一个漏斗, 因此也常称为漏斗式, 常常又是对称形式所以称为对称漏斗, 但本文中是非对称形式. 作者便将此形式改进后加入SSD后层, 结构如下图所示:

mainarch

Related Work

利用single-scale输出预测multi-scale物体天生劣势, 作者从multi-scale考虑, 主要有两种表现形式:

  1. 将各层的feature map融合, 因为融合的feature map来自图片的各个level, 因此池化融合后的输出在classification和localization更具有表现力, 但此方法不仅需要大量储存空间还会降低速度.
  2. 直接使用各层的feature map, 各层输出感受野各不相同, 用大的感受野检测大型物体, 用小的感受野检测小型物体. 但是为了检测小型物体, 当时的做法多是直接利用浅层的输出, 但是因为浅层网络语义信息较少最终表现并不好.

作者就是从第二种方式得到启发, 使用反卷积和skip connection扩大图像, 这样除了能提升分辨率, 还能保证语义信息充足_(感受野似乎变小?)_.

这里我想所谓第一种表现力更强可能是因为直接相加, 将激活集中到同一张map中, 对于所谓增加储存空间可能因为需要反向传播因此要保存各层的map, 还要保存融合中间过程中的map, 这样速度也会有相应影响.

Deconvolutional Single Shot Detection (DSSD) model

Using Residual101 in place of VGG

首先作者将SSD的backbone换为ResNet-101, 并在其后加入数个卷积层, 单纯加卷积层并不能直接提升精度, 但是在这些后加入即将提到的prediction module后却能极大的提升精度.

Prediction module

原本SSD因为梯度太大, 对各层输出的feature map直接利用进行预测. 后来有人提出使用子网络可以提升效果, 那么本文就如下图所示加入一个残差模块(c):

pm

(a)是SSD原始模块, (b)是基础残差模块, (d)是双层改进残差模块.

Deconvolutional SSD

反卷积紧接SSD后方, 本文使用是一种非对称漏斗结构而非先前所说的对称漏斗, 即下图中的DSSD Layers部分:

mainarch

我们可以注意首先有skip connection, 这也是本文的一大改进, 其次还有漏斗网络不对称, 尤其是decode层很少, 主要有以下两个原因:

  1. 为追求速度而简化模型.
  2. 没有在ILSVRC CLS-LOC上预训练的包含decoder的模型, 因为预训练好的classification模型比随机初始化模型精度更高_(这与我们前一篇文章 - DSOD似乎有些矛盾, 我暂时没有合理的解释)_.

Deconvolution Module

上图中"Deconvolution Module"具体结构如下图所示:

dm

此模块主要有如下几个特点:

  1. 最后一层加入BN层.
  2. 使用反卷积而非线形上采样.
  3. 通过实验证明, 组合时各元素相乘比各元素相加取得更好地结果.

Training

训练策略基本与SSD相同, 首先利用IOU选positive bbox, 其后控制negative: positive = 3: 1, 对计算并反向传播loss...

作者训练时还对样本随机进行广度畸变(photometric distortion), 翻转和剪切.

关于bbox作者使用k-means同时扫参选择最佳数量和最佳比例, 最终得到的结果如下图所示:

kmeans

可以发现基本选出的bbox都是较为瘦高, 作者认为一个重要原因是数据集大多较宽而SSD会把他们resample成正方形, 最终将其拉长. 除此之外作者还加入了几个其他比例的bbox预设.

Experiments

Base network

作者把ResNet-101的stride缩小来提升分辨率, 并且用了我们EE中小波分析的方法填充因为缩小stride形成的hole_(很遗憾原理我也不懂, 方法是对于被缩小stride那一阶段的卷积核大于1的卷积层, 将dilation从1变为2, 原理出自M. Holschneider, R. Kronland-Martinet, J. Morlet, and P. Tchamitchian. A real-time algorithm for signal analysis with the help of the wavelet transform. In Wavelets, pages 286–297. Springer, 1990.)_

作者从网络中选取了若干层, 具体如下图所示, 其中depth是指选择层所在整个网络中的位置.

selected

为了提升小物体的检测能力, 必须要使用浅层(conv3_x)的feature map. 同时此阶段卷积核大于1的卷积层只有9个, 那么此阶段和VGG - conv4_3相比分辨率提升感受野减小. 但相应的坏处就是feature map的信息变弱导致预测表现变差.

PASCAL VOC 2007

在低分辨率时ResNet-101和VGG表现相近, 但ResNet收敛更快; 当分辨率提升ResNet超越VGG越1%, 可能与网络深度增加导致在深层网络物体空间信息仍能很好的保存.

在下图中, 作者观察到在特定的条件下(如天空中的飞机, 草原上的羊, 海中的船)DSSD和SSD相比小物检测性能提升较为明显. 图例作图为SSD, 右图为DSSD.

e1

r1

r2

Ablation Study on VOC2007

作者拆分各成分实验, 结果如下图, 补充的是:

  • 使用两个PM对性能几乎无提升.
  • 表中可以看见用元素乘法比加法效果更好.
  • 用线形上采样等方法不仅速度慢, 精度提升也有限.

e2

Others

其余的实验从表格中可以直观得出结论, 其中要提一点的是实验都是把SSD的参数freeze掉后训练.

e3

e4

e5

Inference Time

为了提升速度, 作者移除了BN, 作者将卷积层的参数重写, 其中\(\epsilon = 1-^{-5}\)是一个很小的数:

\[\hat{w} = scale(\frac{w}{\sqrt{var + \epsilon}})\\ \hat{b} = scale(\frac{b - \mu}{\sqrt{var + \epsilon}}) + shift \]

把与BN相关的变量移除, 最后得到下式:

\[y = \hat{w}x + \hat{b} \]

这样大概会取得1.2到1.5倍速度的提升, 同时也减少至多三分之二的内存用量.

最终结果并没有SSD快, 其中重要原因之一是使用更复杂的backbone, 其次是在原来的基础上加入了若干网络, 另外会产生更多的bbox(约2.6倍).

Conclusion

本文主要就是为了提升小物检测的质量, 引入的内容有反卷积和对各层skip和multi-scale预测, 确实从图例上看得出质量有所提升, 但质量仍然有很大的提升空间. 最后除了几张自然图片, 我再补充几张人文类型的图片, 能检测领带和棒球棒.

r3

r4

posted on 2019-08-11 15:23  edbean  阅读(875)  评论(0编辑  收藏  举报

导航