Loading

【MSDNet】2018-ICLR-Multi-Scale Dense Networks for Resource Efficient Image Classification-论文阅读

MSDNet

2018-ICLR-Multi-Scale Dense Networks for Resource Efficient Image Classification

来源:ChenBong 博客园


Introduction


Motivation

样本难度分布不均:数据集中存在极少量hard样本,导致如果需要整体提高准确率需要使用超大的网络来进行分类,如下图中2张马的样本,左边是eazy的马,右边是hard的马;而超大的网络会为了分类极少数hard样本,而在大多数eazy样本数浪费非常多的算力。

image-20200729172954652

样本难度分布不均带来2个问题:

  • 用大网络,在大多数eazy样本上浪费计算量
  • 用小网络,在少数的hard样本上得不到准确结果

能否让网络自动调整大小,在遇到eazy样本时,使用小网络;遇到hard样本时使用大网络?

即静态网络=>动态网络


Contribution

  • 根据样本难度,一个单一的MSDNet网络可以自动调整大小,在遇到eazy样本时(或者计算资源有限时),使用小网络;遇到hard样本时(或者计算资源充足时)使用大网络

Method

网络设计

一个直观的想法是early-exit,即在网络的不同层添加多个分类器,但存在以下问题:

  • cnn不同层提取的特征是不同的,前面的层提取细尺度特征,后面的层提取粗尺度特征
  1. 因此如果在前面的层添加分类器的话,接受的是细尺度特征,使得前面层的分类器难以准确分类

  2. 在前面的层添加分类器(训练过程中loss的影响)还会迫使网络在前面的层就开始学习粗尺度特征,反而破坏了后面的层的学习,会损坏后面层的分类器的结果


网络结构

image-20200729175911477 image-20200729175510761
  • 图示说明:右图中,红色箭头是普通卷积(feature map维度不变),蓝色箭头是stride 卷积(feature map维度降低),虚线是identity连接,绿色框是分类器

  • 纵向是网络的一层,横向是网络不同的深度

  • 横向上(深度维度),使用的都是常规卷积,即保持feature map维度不变,s小的时候,分辨率都比较高,即保留了图片的细尺度特征

  • 纵向上(尺度维度),使用的都是stride 卷积,feature map维度不断减小,s大的时候,分辨率都比较低,即不断提取高级特征,以便于分类器分类,因此纵向的末尾都连接一个分类器,

  • 当 l 较小(层数较低)时,前面层的分类器也可以接收到粗尺度特征,即解决了第1个问题

  • 当 l 较大(层数较大)时,即使中间分类器破坏了前面层提取细尺度特征,由于稠密连接和s=1行的存在,依然存在细尺度=>粗尺度的路径,因此不会降低后面层分类器的分类效果,即解决了第2个问题

  • 引入稠密连接,即使本应该学习细尺度特征的低层


MSDNet的两个模式

  1. anytime 模式,即每张图片的分类时间/计算开销是相同的,事先指定的,当时间耗尽/计算开销用完,网络停止,输出离停止的地方最近的分类器的结果
  2. batch budget 模式,一个batch 的图片的总时间/计算开销 是指定的,我们希望时间耗尽/计算开销用完时,整个batch 的平均分类准确率最高;这样就要求网络对eazy样本施加较少的计算量(在前面层退出),对hard样本施加更多的计算量(在后面层退出),可以通过设置置信度阈值,即某张图片的置信度达到阈值 \(θ_k\) (如0.8)时,就提前退出(early-exit)。

(阈值 \(θ_k\) 可以通过总开销B,和batch大小N,计算出来,详见原文)


网络优化

我们可以感觉到 MSDNet 与传统的CNN相比还是有一些冗余的,比如

  1. 传统的CNN是逐层抽象的,细尺度的提取只存在与低层,而MSDNet中s小的层(图2,4中上面的行)都是在提取细尺度,能否减少细尺度的提取层,只用1,2个层提取细尺度,然后重复利用这些层的输出?
  2. 有一部分细尺度提取层是冗余的,其输出没有被当成其他层的输入(图2,4中右上角)

我们采取一些,不断复用细尺度的提取层:

image-20200729194405049

感觉上有点像砍掉网络的右上角部分,减少冗余

以下的实验用的还是原始的MSDNet。


Experiments

image-20200729175653168

在不同网络中间层等距地加入分类器,对 中间分类器的影响 和 对最终分类器的影响

左图,中间层插入分类器,对中间分类器的影响:

  • 横坐标,中间分类器插入的位置
  • 纵坐标,中间分类器 相对(未修改的原始网络)最终分类器的精度
  • 从左图可以看出,插入的中间分类器的位置越靠后,该中间分类器的精度越高,即后面的层的特征(粗尺度特征)更适合做分类

右图,中间层插入分类器,对最终分类器的影响:

  • 横坐标同上
  • 纵坐标,最终分类器 相对(未修改的原始网络)最终分类器的精度
  • 从右图可以看出,对于ResNet来说,插入的中间分类器越靠前,对最终分类器的精度损害越大;对于DenseNet来说,中间插入分类器会导致最终分类器精度下降

原因,在中间层引入分类器,会导致低层网络被迫学习用于分类的粗尺度(高级)的特征,由于DenseNet 和 MSDNet 引入的稠密连接,低层没有学到的细尺度特征,会在后面层继续学习,可以缓解低层特征被破坏的影响。


image-20200729175721740

图5说明:

  • 左图:anytime 模式
    • 横坐标为anytime模式中的每张图片的计算开销限制,即当给定的计算开销用完时,输出分类结果;纵坐标为分类精度,图中的数据点表示不同开销下的网络精度
    • Ensemble of ResNet/DenseNet (varying depth),指的是集成多个深度的ResNet/DenseNet,如ResNet-18/34/56/110...,先将图片输入到层数少的网络,如果置信度高于阈值则退出,否则将图片输入到更大一点的网络...(Ensemble有个缺点是会重复计算低尺度特征,浪费计算开销)
    • 可以看出,在不同的单张开销下,MSDNet的精度都远胜于 多个网络的集成
    • && 疑问,多个网络集成会浪费很多计算开销,和集成网络做比较似乎不太公平?
  • 右图:batch budget 模式
    • 横坐标为每张图片的平均开销(平均开销 = 总batch开销限制 / batch size,batch size相同时,平均开销相同等价于总 batch 开销相同);纵坐标为分类精度,图中数据点表示不同平均开销下,网络的精度
    • Ensemble of ResNet/DenseNet (all shallow),集成多个浅的ResNet/DenseNet,最终的分类取多个网络的平均
    • \(ResNet^{MC}/DenseNet^{MC}\) ,指的是在一个ResNet/DenseNet 的中间层加入多个分类器(multiple classifiers)
    • 可以看出,在不同的总 batch 开销下,MSDNet表现都较好

image-20200729175735446

图7说明:

  • 左图:batch budget模式在ImageNet数据集上的表现

    • 左边三条黑色实线表示三种不同深度的MSDNet
    • (&& 图中可以看出,足够深的MSDNet在低开销限制下的精度没有浅的MSDNet高,是否说明无法训练一个足够深的网络,满足所有计算要求?)
    • 蓝色/红色实线:Early-exit ensemble of ResNet/DenseNet应该就是图5中的 Ensemble of ResNet/DenseNet (varing depth)
    • 蓝色/红色虚线:不同规模的ResNets/DenseNet(因此是离散的点)
  • 右图:batch budget模式在CIFAR-100数据集上的表现


image-20200729175759433

图6说明:

  • 上:eazy样本
  • 下:hard样本

Conclusion

两个设计原则

  • 在网络全程生成和维护粗尺度特征 => 可以在浅层引入中间分类器
  • 密集连接 => 多个分类器不会互相干扰(中间分类器不会影响后面的分类器)

一个网络开销可变,并且在不同开销下的表现都超越传统网络


Summary

Reference

https://www.shuzhiduo.com/A/qVdeWkb8JP/#%E7%BD%91%E7%BB%9C%E4%BC%98%E5%8C%96

posted @ 2020-07-30 16:57  ChenBong  阅读(399)  评论(0编辑  收藏  举报