本专栏将从论文的角度解读一下CV方向的一些经典神经网络模型及其贡献与意义,以期加深自己的印象,后续可以随时翻看并且学习其中好的tricks。这一期介绍基于SSD改进的DSSD。
论文相关信息
论文全名为《DSSD : Deconvolutional Single Shot Detector》(链接),从名字可以猜想到,改进之处应该在于使用了反卷积来上采样,然后融合不同尺度的特征图进行预测。作者相关信息如下:
如果了解 FPN (链接)会明确感受到 SSD 有个不小的缺点:最早的模型将输入图片进行暴力缩放,然后在不同尺度的图片上提取特征进行预测(下图a);对于类似 R-CNN 系列这样只利用最深层特征来预测的模型(下图b);SSD 同时利用了浅层与深层的特征图进行预测,但浅层深层的预测仍然是相互独立的(下图c)。
这就导致了 SSD 容易出现相同物体被不同大小的框同时检测出来。此外,由于定位(需要细节特征)和识别(需要全局特征)任务比较矛盾,因此目标检测模型或多或少普遍对小目标检测效果不好,而 SSD 并没有结合浅层与深层信息,所以同样也存在这样的问题:
基于 SSD 的这个缺点,不少模型都做出了类似 FPN 思路的改进,比如FSSD(论文链接,详解可参考大佬博客)、RSSD(论文链接,详解可参考大佬博客)以及本文要讲的 DSSD,都是通过不同的方式融合不同尺度特征图,因此拿出其中的 DSSD 作为代表详细了解,毕竟其二作也是 SSD 的一作。
网络架构
SSD 与 DSSD 结构对比图:
可以看出,DSSD 构建特征金字塔的方式是从最深层特征图开始,先将当前得到的 H×W 大小的特征图反卷积,再与下采样过程中 2H×2W 大小的特征图融合,融合的方式是 mul 相乘(还有 concat 叠加和 add 相加方式)。
其中具体反卷积模块:
此外,DSSD 还将 SSD 中的 backbone 基础网络由 VGG-16 换成了 ResNet-101:
有意思的是,当图片比较小的时候(321×321),基于 ResNet 的 SSD 整体还不如基于 VGG 的SSD,当图片数据变大一点后(513×513),基于 ResNet 的 SSD才反超。
tricks
1、在最后的预测层cls、loc前也加入了残差模块
将 ResNet 进行到底呗…
结果表明(c)更好。
2、特征图融合方式
论文比较了相乘和相加两种特征图融合方式:
相乘的方式稍微好一点点。(Stage1为论文训练方法的第一阶段训练,冻结SSD所有参数,添加反卷积结构训练得到的模型。Stage2为采用论文训练方法的第二阶段训练,解冻第一阶段的参数并添加预测模型结构得到的模型。)
3、BN层的等价替换
在测试时,为了加速,使用一个等价变换去掉了BN层,减少了运行时间节省了存储空间:
对于一个卷积层的输出x,将会以公式1被BN层normalize成y。如果以公式2、3的形式改写w、b,相当于对权重和偏移做normalize后,直接得到输出y,具有和BN层等价的效果。
4、改用聚类的先验框
和 YOLO v2 类似。
总结
DSSD 相对于SSD 做出的改进主要就是融合了浅层和深层的特征图进行预测。
从最后的结果看,DSSD的速度其实已经下降很多了,应该还是ResNet-101网络不够轻量的原因吧,精度倒是非常高了…