您的位置:首页 > 移动开发 > Objective-C

DSOD: Learning Deeply Supervised Object Detectors from Scratch

2018-01-30 17:16 423 查看


复旦、清华和英特尔中国研究院ICCV新作:完全脱离预训练模型的目标检测方法DSOD

论文:DSOD: Learning Deeply Supervised Object Detectors from Scratch 

论文地址:https://arxiv.org/abs/1708.01241

论文代码:https://github.com/szq0214/DSOD

目前,所有基于深度学习的目标检测方法都需要预先在 ImageNet 分类任务上预训练的模型作为初始权重。

在 pretrained models 上微调有两个优点: 

1)有很多好的模型是开源的,可以直接将他们用于目标检测; 
2)微调可以快速得到最终的模型,需要的训练数据也相对较少。

在 pretrained models 上微调主要存在的问题:

1、缺乏灵活性。在ImageNet上预训练模型非常麻烦,如果只使用预训练好的模型,不能根据需要去调整模型结构;

2、Loss差异。由于ImageNet模型的类别和目标检测问题的类别分布差别较大,分类的目标函数和检测的目标函数也不一致,从预训练模型上微调可能和检测问题的有一定的优化学习偏差;

3、问题域不匹配。并不是所有检测任务都是在自然RGB图像上进行的,如医学图像、多谱图像的检测。


DSOD

DSOD方法借助于DenseNet
隐式的deeply supervised的特性,结合其他一些设计原则,成功地实现了目标检测模型的从零开始训练。并且模型参数相比其他方法也要小很多。
DSOD是在SSD算法的基础上进行改进的,可以简单理解为SSD+DenseNet=DSOD(作者文中也曾尝试从0开始训练region proposal based的检测算法比如Faster RCNN,R-FCN等,发现模型很难收敛;而proposal-free的检测算法比如SSD却可以收敛,虽然效果一般,因此最后采用proposal-free的检测模型SSD。

DSOD的完整结构图如下表 :



DSOD 网络分两个部分: 
1、用于特征提取的 backbone:backbone
子网络 类似于 DenseNets,由 stem block, four dense blocks, two transition layers and two transition w/o pooling layers 组成。Dense Block就是DenseNet网络的子模块。这里的stem
block部分由3*3卷积和2*2的max pool层组成,后面作者的实验有证明这个stem block的存在可以提高mAP
2、用于目标预测的 front-end。

为了训练出性能更好的检测器,文章提出了如下几个网络设计原则:

原则一:无障碍的梯度回传

并不是所有框架都适合用来从头开始训检测器。作者发现像Faster-RCNN、R-FCN这类基于region-proposal的框架,由于存在ROI pooling layer, 该层类似于一个mask,使得梯度没法平滑的回传到前面层,因此从零开始训练的整个模型没法收敛(或者收敛较差)。而YOLO、SSD这类框架由于是proposal-free的结构,模型可以收敛,但是结果和预训练模型上微调有较大差距。

原则二:更深的监督信息

训练深度模型一个很常见的问题就是梯度消失。一个比较常用的减缓梯度消失问题的方法是在网络中间层插入side-output loss项,让网络靠近输入层的神经元也能接收到比较强的梯度信号。但是DSOD抛弃了这种显式的deep supervision结构,原因在于目前detection框架的loss项本身比较复杂,而且会使用多层feature来做检测,所以不太适合插入多个这样的loss项。DSOD通过借助dense
block中每一层都会连接到后面层上去的特点,避免了training from scratch过程中梯度消失的问题。在DSOD中,除了主干网,预测层的结构也改变成dense的连接方式(见图),该结构不仅能大量减少需要学习的模型参数,同时能进一步提升模型性能。

原则三:根(Stem)结构

根结构已经被应用于一些优秀的神经网络结构中,如google提出的Inception结构等。实验结果表明,stem结构可以有效地保护输入图片信息的丢失,从而训练出更加鲁棒的检测器。

原则三:Dense预测结构

Dense Prediction Structure 和 SSD类似,也是在6个尺度特征图进行目标检测,再融合,但是有SSD 有所区别的是怎么利用特征图的,这里是 Learning
Half and Reusing Half。

DSOD的网络结构如下:



可以看出 SSD 在六个尺度的特征图上进行检测,将这六个检测结果综合起来。 
DSOD 则根据 DenseNet 的设计原理, 将相邻的检测结果一半一半的结合起来

解释:

Figure1左边的plain connection表示SSD算法中的特征融合操作,这里对于300*300的输入图像而言,一共融合了6种不同scale的特征。在每个虚线矩形框内都有一个1*1的卷积和一个3*3的卷积操作,这其实就是一个bottleneck,也就是1*1的卷积主要起到降低channel个数从而降低3*3卷积计算量的作用。 
Figure1右边的dense connection表示本文引入densenet思想的特征融合操作。dense connection部分左边的虚线矩形框部分和plain
connection的右边虚线矩形框部分很像,差别在于channel个数(dense connection中3*3的channel个数是对应plain connection中3*3的channel个数的一半),主要是因为在plain connection中,每个bottleneck的输入直接是前一个bottleneck的输出,但是在dense
connection中,每个bottleneck的输入是前面所有bottleneck的输出的concate。dense connection部分右边的矩形框是down sampling block,包含2*2的max pooling(降采样作用)和一个1*1的卷积(降低channel个数的作用),作者也提到先进行降采样再进行1*1卷积主要可以减少计算量。因此可以看出DSOD是SSD+DenseNet的结果。

以下是DSOD在PASCAL VOC 2007数据集上各部分有效性验证实验:



DSOD 在 PASCAL VOC 2007数据集上的“物体检测”对比实验结果(包括模型参数量,运行速度,输入图片大小,模型精度等):





总结

在DSOD这篇论文中,作者首先分析了深度网络training from scratch存在的问题以及如何才能构建一个可以从零开始训练的检测器的网络,同时给出了非常详细的指导和设计原则帮助读者去构建这样的网络。

基于这些原则,作者提出了DSOD模型,该模型不仅参数更少(适合于手机、无人机等资源受限的设备)(仅为SSD的1/2, faster-rcnn的1/10)、性能更强,更重要的是不需要在大数据集(如ImageNet)上预训练,也就是说该模型训练图像其实比其他state-of-the-art的方法少用了120万张预训练图片,使得DSOD的网络结构设计非常灵活,根据自己的应用场景可以设计自己所需要的网络结构。

DSOD模型打破了传统的基于预训练+微调的检测器训练的藩篱,在有限数据集下,从零开始训练就能得到state-of-the-art的目标检测器,在自动驾驶、监控、医学图像、多谱图像等领域将会拥有非常广阔的应用前景
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: