Multi-Scale DenseNets for Efficient Prediction_论文周报
Multi-Scale DenseNets for Efficient Prediction_论文周报
Innse.Xu
Gao Huang, Danlu Chen, Tianhong Li, Felix Wu, Laurens van der Maaten, Kilian Q. Weinberger
2018
(一种多尺度的DenseNet)
论文思路
在实际的应用上,存在着这样一个问题:当前最新、性能最好的模型要把它应用在真实环境上会有一定的困难。因为这些模型往往比较大,需要更多的计算资源,而真实环境中计算资源和时间等都有很大的限制,所以难以运用上这些模型。
那么在一些资源有限的场景下,自适应地满足资源限制的前提下,尽可能地提高模型的精确度与性能是当前研究的问题。
本文针对现实世界中的两种典型的场景提出解决方案:
1. Anytime classification
对于每个测试样本(一张图片),存在有限的计算资源预算,且每个样本的都不同。相当于每次给模型输入一张图像,然后根据计算资源预算来给出预测结果,并且这种场景要求一种实时性,如在无人驾驶汽车有要求。
-
Batch computational budget
对于一个batch即样本集,存在已知的有限的计算资源,则- 计算量小于属于easy样本,花费更少的计算量
- 计算量大于属于difficult样本,花费更多计算量
对于第二种情况,这里就引进了一种思想:对于简单图像仅采用浅层的速度较快的网络来分类,而对于难分类图像再采用深层的速度慢一点的网络来分类。
基于该思想作者在网络中间引入了多个分类出口(intermediate classifiers),对于简单图像可以直接从浅层的分类出口即可得到结果,而difficult图像可能要到网络较深的某一层才能得到结果。但是如果只是这样简单地在中间添加分类器,利用中间特征来分类,对于浅层的特征用来分类效果是比较差的,因为浅层的特征的语义信息较弱。
为了解决这个问题本文引入了两个核心:Multi-Scale Feature Maps与Dense Connectivity。
+ Multi-Scale Feature Maps产生了高水平的特征表达,即使少量几层网络也适合用来分类,同时当使用全网络来评估时也保持着高精度。
+ Dense Connectivity在已存在于网络的每一层的特征表达添加额外的features,特征重用提高特征利用率,同时隐含着深度监督。
网络结构(Network Architecture)
首先,定义对于样本,定义模型的loss在budget为的情况下为
其中,服从联合概率分布。
特别地,对于Anytime classification情况下,loss为
对于Batch computational budget情况下,loss为
整体网络结构可以划分成以下几个部分来详细阐述:
Multiple scales
一个scale为3的4层MSDNet网络的结构如上图所示,
1. 水平方向的结构与DenseNet相似,文中称水平的操作是对前层相同scale的feature maps进行concat,结果为regular conv;
2. 垂直方向与对角线的操作是进行down-sampling,得到的结果是strided conv。
Dense connectivity
使用dense connections使每一层都能直接接收其前层的输入:
1. 通过特征重用减少了冗余的计算
2. 用与resnet相似的方法解决梯度消失的问题让学习更容易
这里的dense connections不止来自于水平方向的前层,还有来自于上一个scale的前层的特征。
First layer
特别地,该网络的第一层有其特殊之处。
定义的feature maps,其中原始输入为
其中为regular conv变换,为strided conv变换。这样第一层的输出为。
Subsequent layers
其他层的操作如下,
其中,为沿着通道维concat操作。
这里我的理解是,当时,对于第层的输出,把scale为s的所有前层(层)的输出concat起来作为的输入,以及把scale为s-1的所有前层(层)的输出concat起来作为的输入,最后将与的输出都concat起来作为第层的输出。
为了更容易理解,我找到了一个网络结构的三维图(原图在论文的GitHub地址上)。
这里只画出了右边的表格的的连接,蓝红的连接分别对应表格中的
至于这里的与具体指什么,在本文的实验中作者的设置为
+ First layer
+ :
+ :使用步长为2做降采样
+ Subsequent layers
都定义为
Classifiers
从网络的二维结构图可以看到,分类器并没有连接着某一层的所有scale的特征,而是选择使用scale最大的feature maps来做分类,即coarsest scale的feature maps。
结构
在最后的分类器前,还有几层结构:两个通道维为128的的降采样conv
Definition
- :第层分类器的输入,第层且coarsest scale 的feature maps;
- :第个分类器;
- :从第k个分类器exit所需的cost;
- 每一个分类器的exit prob为,则从第k个分类器exit的概率为其中z为标准化条件。
如何分类?
anytime predicition:把一张图片输入网络后,直到budget耗尽,输出最近的(最深的)分类器的预测结果;
batch budget classification:当预测的置信度超过第k个分类器的预定阈值,则从退出。
当然第二种情况也有budget的限制:对于样本与budget ,有
后向传播
定义为每个分类器的loss,则需要最小化加权loss:
其中为训练集,且第个分类器的权重,权重w可由先验知识决定。
Experiment
文章在CIFAR-10、CIFAR-100与ImageNet的数据集上进行实验,配置细节如下:
CIFAR
3种scale,每种scale的通道数分别为6、12、24
ImageNet
- 4种scale,每层的output通道数设置为与input通道数相等;
- 原始图片经过才进入网络的第一层;
文章还做了几个值得一说的验证实验。
实验一:验证multi-scale feature的作用
文章使用了3种不同网络深度的MSDNet以及在ResNet和DenseNet上直接添加intermediate classifiers。结果在average budget比较小的时候,MSDNet的效果要远远好于ResNet和DenseNet,这就证明了用原网络低层的高分辨率特征直接做分类是行不通的,而使用了multi-scale feature的MSDNet的准确率明显提升。
实验二:验证dense connectivity的作用
文章移除了Dense Connetivity,结果影响了整体的准确率,证明了dense connectivity的有效性。
联想:与FPN的对比
-
不同点
这里阐述一下我总结的几个不同点,欢迎补充。- 解决弱语义问题的方法不同:
- FPN经过自顶向下与自底向上两条路径,把深层的强语义特征经过上采样与自底向上具有更强位置信息的特征图进行融合;
- MSDNet是直接把中间层的特征,沿着宽度的方向再进行降采样得到具有比较强语义的feature maps之后再用来分类。
个人觉得虽然两者大方向都是解决弱语义的方法,但是前者更侧重于解决目标不同尺度的问题,而后者更倾向一种复杂度感知;换句话说,FPN倾向解决一张含有不同尺度的目标的复杂图片中,识别不同尺度的目标需要不同尺度的特征的问题,可以说每一层的特征都具有较强的能力;而MSDNet倾向于解决如何利用浅层特征来解决easy样本的问题;前者是对进行预测时使用了每一层(每一尺度)的特征,而后者是在中间层向宽度方向引出,做降采样后得到的最后特征用来做分类的。
-
特征融合的方法不同:
- FPN特征融合是将自顶向下的feature经过上采样得到的特征与自底向上的特征进行融合;
- 而MSDNet的特征融合是与DenseNet类似,与前面每一层都有dense connection,但是与DenseNet不同的是,它不止与当前scale为s的previous layers有connection,与scale为的previous都有dense connection。
两种特征融合有很大的区别,MSDNet的特征融合基本上是借用了DenseNet的思想,作用与DenseNet类似,融合了previous layers特征;而FPN的融合了深层与前层的特征,作用其实还是为了解决弱语义的问题。
-
分类方法不同:
- FPN是对融合后的每一层的feature进行预测;
- MSDNet是根据计算资源以及一个阈值来决定使用哪层的特征进行预测。
- 解决弱语义问题的方法不同:
-
共同点
- 二者都解决了浅层特征弱语义的问题,使得每一个分类器使用的特征都是具有较强语义的feature;
- 二者都有特征融合的做法;
- 二者都使用了不同尺度的features;