CVPR 2017最佳论文作者解读:DenseNet 的“what”、“why”和“how”|CVPR 2017

雷锋网 AI 科技评论按:CVPR 2017上,康奈尔大学博士后黄高博士(Gao Huang)、清华大学本科生刘壮(Zhuang
Liu)、Facebook 人工智能研究院研究科学家 Laurens van der Maaten 及康奈尔大学计算机系教授 Kilian Q.
Weinberger 所作论文《Densely Connected Convolutional Networks》当选 CVPR 2017 最佳论文,与苹果的首篇公开论文《Learning From Simulated and Unsupervised Images through Adversarial Training》共获这一殊荣。

在大会期间,雷锋网(公众号:雷锋网) AI 科技评论第一时间与获奖论文作者黄高博士及刘壮取得联系,以下为两位作者对 DenseNet 的详细介绍及常见疑问解答,雷锋网 AI 科技评论做了不改动原意的编辑和整理。

DenseNet 的基本结构

DenseNet 是一种具有密集连接的卷积神经网络。在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。下图是 DenseNet 的一个示意图。

如果记第 l 层的变换函数为 H_l(通常对应于一组或两组 Batch-Normalization,ReLU 和 Convolution 的操作),输出为 x_l,那么我们可以用一个非常简单的式子描述 DenseNet 每一层的变换:

x_l = H_l([x_0, x_1, …, x_{l-1}])

可以看到,DenseNet 的思想非常简单,从理解到实现都不难(代码已经开源,并且 GitHub 上有用各种框架写的第三方实现)。可能很多人更关心的问题是为什么要提出 DenseNet,它有什么用,为什么会有用以及怎么把它用好。

DenseNet 是受什么启发提出来的?

DenseNet
的想法很大程度上源于我们去年发表在 ECCV 上的一个叫做随机深度网络(Deep networks with stochastic
depth)工作。当时我们提出了一种类似于 Dropout
的方法来改进ResNet。我们发现在训练过程中的每一步都随机地「扔掉」(drop)一些层,可以显著的提高 ResNet
的泛化性能。这个方法的成功至少带给我们两点启发:

  • 首先,它说明了神经网络其实并不一定要是一个递进层级结构,也就是说网络中的某一层可以不仅仅依赖于紧邻的上一层的特征,而可以依赖于更前面层学习的特征。想像一下在随机深度网络中,当第
    l 层被扔掉之后,第 l+1 层就被直接连到了第 l-1 层;当第 2 到了第 l 层都被扔掉之后,第 l+1 层就直接用到了第 1
    层的特征。因此,随机深度网络其实可以看成一个具有随机密集连接的 DenseNet。
  • 其次,我们在训练的过程中随机扔掉很多层也不会破坏算法的收敛,说明了
    ResNet 具有比较明显的冗余性,网络中的每一层都只提取了很少的特征(即所谓的残差)。实际上,我们将训练好的 ResNet
    随机的去掉几层,对网络的预测结果也不会产生太大的影响。既然每一层学习的特征这么少,能不能降低它的计算量来减小冗余呢?

DenseNet 的设计正是基于以上两点观察。我们让网络中的每一层都直接与其前面层相连,实现特征的重复利用;同时把网络的每一层设计得特别「窄」,即只学习非常少的特征图(最极端情况就是每一层只学习一个特征图),达到降低冗余性的目的。这两点也是 DenseNet 与其他网络最主要的不同。需要强调的是,第一点是第二点的前提,没有密集连接,我们是不可能把网络设计得太窄的,否则训练会出现欠拟合(under-fitting)现象,即使 ResNet 也是如此。

DenseNet 有什么优点?

省参数。在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半。对于工业界而言,小模型可以显著地节省带宽,降低存储开销。

省计算。达到与
ResNet 相当的精度,DenseNet 所需的计算量也只有 ResNet 的一半左右。计算效率在深度学习实际应用中的需求非常强烈,从本次
CVPR 会上大家对模型压缩以及 MobileNet 和 ShuffleNet 这些工作的关注就可以看得出来。最近我们也在搭建更高效的
DenseNet,初步结果表明 DenseNet 对于这类应用具有非常大的潜力,即使不用 Depth Separable Convolution
也能达到比现有方法更好的结果,预计在近期我们会公开相应的方法和模型。

另外,我们还提出了一个可实现自适应推理的多尺度
DenseNet,用于提高深度学习模型的推理效率。这个方法的主要思想是用浅层的特征来预测相对「简单」的图片,而只用深层的特征来预测比较「难」的图片。由于很多实际应用中,简单的图片占有较大的比例,而它们并不需要非常深的模型也能被正确预测,因此这种自适应推理方法可以有效的降低深度模型推理时的平均计算开销,而不降低精度。感兴趣的读者请关注我们的
arXiv 论文 《Multi-Scale Dense Convolutional Networks for Efficient
Prediction》(https://arxiv.org/abs/1703.09844),代码参见https://github.com/gaohuang/MSDNet

抗过拟合。DenseNet
具有非常好的抗过拟合性能,尤其适合于训练数据相对匮乏的应用。这一点从论文中 DenseNet 在不做数据增强(data
augmentation)的 CIFAR 数据集上的表现就能看出来。例如不对 CIFAR100 做数据增强,之前最好的结果是 28.20%
的错误率,而 DenseNet 可以将这一结果提升至 19.64%。对于 DenseNet
抗过拟合的原因有一个比较直观的解释:神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet
可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。实际上,DenseNet
的泛化性能优于其他网络是可以从理论上证明的:去年的一篇几乎与 DenseNet 同期发布在 arXiv 上的论文(AdaNet:
Adaptive Structural Learning of Artificial Neural Networks)所证明的结论(见文中
Theorem 1)表明类似于 DenseNet 的网络结构具有更小的泛化误差界。

密集连接不会带来冗余吗?

这是一个很多人都在问的问题,因为「密集连接」这个词给人的第一感觉就是极大的增加了网络的参数量和计算量。但实际上 DenseNet 比其他网络效率更高,其关键就在于网络每层计算量的减少以及特征的重复利用。DenseNet 的每一层只需学习很少的特征,使得参数量和计算量显著减少。比如对于
ImageNet 上的模型,ResNet 在特征图尺寸为 7x7 的阶段,每个基本单元(包含三个卷积层)的参数量为
2048x512x1x1+512x512x3x3+512x2048x1x1=4.5M,而 DenseNet
每个基本单元(包含两个卷积层,其输入特征图的数量一般小于 2000)的参数量约为 2000x4x32x1x1 + 4x32x32x3x3 =
0.26M,大幅低于 ResNet 每层的参数量。这就解释了为什么一个 201 层的 DenseNet 参数量和计算量都只有一个 101 层
ResNet 的一半左右。

还有一个自然而然的问题就是,这么多的密集连接,是不是全部都是必要的,有没有可能去掉一些也不会影响网络的性能?论文里面有一个热力图(heatmap),直观上刻画了各个连接的强度。从图中可以观察到网络中比较靠后的层确实也会用到非常浅层的特征。

viaarXiv

我们还做过一些简单的实验,比如每一层都只连接到前面最近的
m 层(例如 m=4),或者奇(偶)数层只与前面的偶(奇)数层相连,但这样简化后的模型并没有比一个相应大小的正常 DenseNet
好。当然这些都只是一些非常初步的尝试,如果采用一些好的剪枝(prune)的方法,我觉得 DenseNet
中一部分连接是可以被去掉而不影响性能的。

DenseNet 特别耗费显存?

不少人跟我们反映过 DenseNet
在训练时对内存消耗非常厉害。这个问题其实是算法实现不优带来的。当前的深度学习框架对 DenseNet
的密集连接没有很好的支持,我们只能借助于反复的拼接(Concatenation)操作,将之前层的输出与当前层的输出拼接在一起,然后传给下一层。对于大多数框架(如
Torch 和 TensorFlow),每次拼接操作都会开辟新的内存来保存拼接后的特征。这样就导致一个 L 层的网络,要消耗相当于
L(L+1)/2 层网络的内存(第 l 层的输出在内存里被存了 (L-l+1) 份)。

解决这个问题的思路其实并不难,我们只需要预先分配一块缓存,供网络中所有的拼接层(Concatenation
Layer)共享使用,这样 DenseNet
对内存的消耗便从平方级别降到了线性级别。在梯度反传过程中,我们再把相应卷积层的输出复制到该缓存,就可以重构每一层的输入特征,进而计算梯度。当然网络中由于
Batch Normalization
层的存在,实现起来还有一些需要注意的细节。为此我们专门写了一个技术报告(Memory-Efficient Implementation of
DenseNets, https://arxiv.org/pdf/1707.06990.pdf)介绍如何提升 DenseNet 对内存的使用效率,同时还提供了 Torch, PyTorch, MxNet 以及 Caffe 的实现,代码参见:

Torch implementation: https://github.com/liuzhuang13/DenseNet/tree/master/models

PyTorch implementation: https://github.com/gpleiss/efficient_densenet_pytorch

MxNet implementation: https://github.com/taineleau/efficient_densenet_mxnet

Caffe implementation: https://github.com/Tongcheng/DN_CaffeScript

新的实现极大地减小了 DenseNet 在训练时对显存的消耗,比如论文中 190 层的 DenseNet 原来几乎占满了 4 块 12G 内存的 GPU,而优化过后的代码仅需要 9G 的显存,在单卡上就能训练。

另外就是网络在推理(或测试)的时候对内存的消耗,这个是我们在实际产品中(尤其是在移动设备上)部署深度学习模型时最关心的问题。不同于训练,一般神经网络的推理过程不需要一直保留每一层的输出,因此可以在每计算好一层的特征后便将前面层特征占用的内存释放掉。而
DenseNet 则需要始终保存所有前面层的输出。但考虑到 DenseNet
每一层产生的特征图很少,所以在推理的时候占用内存不会多于其他网络。

使用 DenseNet 有什么需要注意的细节?

总的来说,训练 DenseNet 跟训练其他网络没有什么特殊的地方,对于训练 ResNet 的代码,只需要把模型替换成 DenseNet 就可以了。如果想对 DenseNet 的模型做一些改进,我们有一些建议供参考:

  1. 每层开始的瓶颈层(1x1 卷积)对于减少参数量和计算量非常有用。
  2. 像 VGG 和 ResNet 那样每做一次下采样(down-sampling)之后都把层宽度(growth rate) 增加一倍,可以提高 DenseNet 的计算效率(FLOPS efficiency)。
  3. 与其他网络一样,DenseNet 的深度和宽度应该均衡的变化,当然 DenseNet 每层的宽度要远小于其他模型。
  4. 每一层设计得较窄会降低 DenseNet 在 GPU 上的运算效率,但可能会提高在 CPU 上的运算效率。

DenseNet 用于图像语义分割和物体检测等视觉任务效果如何?

由于
DenseNet 不容易过拟合,在数据集不是很大的时候表现尤其突出。在一些图像分割和物体检测的任务上,基于 DenseNet
的模型往往可以省略在 ImageNet
上的预训练,直接从随机初始化的模型开始训练,最终达到相同甚至更好的效果。由于在很多应用中实际数据跟预训练的 ImageNet
自然图像存在明显的差别,这种不需要预训练的方法在医学图像,卫星图像等任务上都具有非常广阔的应用前景。

在图像语义分割任务上,CVPR
2017 的一篇 workshop 文章 《The One Hundred Layers Tiramisu: Fully
Convolutional DenseNets for Semantic Segmentation》 (https://arxiv.org/abs/1611.09326) 表明,基于 DenseNet 的全卷积网络(FCN)模型在不需要预训练的情况下甚至可以达到比其他预训练方法更高的精度,并且比达到相同效果的其他方法的模型要小 10 倍。

同样,在物体检测任务上,我们即将发表在
ICCV 2017 上的工作也表明,基于 DenseNet 的检测方法可以在不需要 ImageNet 预训练的情况下达到
state-of-the-art 的效果,并且模型参数相比较其他模型要少很多。这是目前为止第一个不用 ImageNet
预训练的基于深度学习的物体检测系统。文章会在 8 月初放到 arxiv,敬请关注。

头图 via cognifyx,正文图片由作者提供

本文作者:奕欣

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-09-08 04:33:24

CVPR 2017最佳论文作者解读:DenseNet 的“what”、“why”和“how”|CVPR 2017的相关文章

CCL 2017最佳论文公布,看全国计算语言学前沿研究

10 月 14 日.15 日,由中国中文信息学会(CIPS)举办的第十六届全国计算语言学会议(CCL 2017)暨第五届自然标注大数据的自然语言处理国际学术研讨会(NLP -NABD 2017)于江苏南京召开. 本次会议共收到 264 篇投稿,录用 105 篇论文,录用率为 39.77%,共有超过 700 名计算语言学研究者和其他领域的专家学者参与本届会议,参会人数为历届最多. 大会主席,中国工程院院士倪光南在开幕式上致辞. 他表示,语言是信息最重要的载体,只有计算机有处理语言的能力时,计算机才

重磅 | ICML 2017最佳论文公布!机器学习的可解释性成热点

雷锋网(公众号:雷锋网)消息,8月6日,机器学习领域最具影响力的学术会议之一的ICML 2017在澳大利亚悉尼正式开幕.当天,除了举行多场Tutorial外,ICML还在官网正式公布了本次会议的最佳论文评选结果.在前线雷锋网AI科技评论的两位编辑(张驰和刘芳平)第一时间为大家带来获奖论文的报道. 本届ICML最佳论文的主题是,利用影响函数理解黑箱预测.机器学习中的一个关键问题就是,系统为何做出某种预测? 我们不仅需要表现优异的模型,更需要可解释的模型.理解了模型如何做出决策,也就能进一步改善它.

ICML 2017最佳论文:为什么你改了一个参数,模型预测率突然提高了|分享总结

雷锋网 AI 科技评论按:正在进行的2017 机器学习国际大会(ICML 2017)早早地就在其官网公布了本次会议的最佳论文评选结果(重磅 | ICML 2017最佳论文公布!机器学习的可解释性成热点),其中最佳论文奖为<Understanding Black-box Predictions via Influence Functions>,其主题为如何利用影响函数理解黑箱预测.两位作者分别为Pang Wei Koh 和 Percy Liang. Pang Wei Koh是来自新加坡的斯坦福大

DT科技评论第26期:人工智能界年度顶级会议AAAI 2017最佳论文出炉

DT科技评论 Data Technology Review 第 26 期           人民网研究院,阿里云研究中心 本期目录 人工智能界年度顶级会议AAAI 2017最佳论文出炉 巨舰再起航 Salesforce以AI+CRM再战江湖 物联网监测雾霾 美国城市向家庭智能硬件推送空气质量信息 Swarm AI精确预测超级碗最终比分 大逆转剧情难逃群集智能预测 拨款2450万美元建立"无人小镇" 韩国政府也要支持无人驾驶上路 AI如何助力电网智能化? 人工智能芯片收益显著 NVID

周博磊知乎热答:如何评价何恺明大神斩获ICCV 2017最佳论文

2017年10月24日下午,Facebook AI 研究员何恺明大神斩获ICCV 2017最佳论文,这是他第三次斩获顶会最佳论文,对于Kaiming He 在 ICCV 2017 上拿下双 Best的paper,他的中大同学,另一位大神周博磊在知乎写了一段他眼中的凯明师兄. 大数据文摘经周博磊授权,发布这篇文章,看看大神眼中的大神是什么样? 其实从他发Dark Channel那篇论文开始,我就挺关注他的研究工作.那时候还是前Deep Learning时代的计算机视觉,一切都还不怎么work,还流

MSRA获ACM TOMM 2017最佳论文:让AI接手繁杂专业的图文排版设计工作

你是否曾经为如何创作和编辑一篇图文并茂.排版精美的文章而烦恼?或是为缺乏艺术灵感和设计思路而痛苦?AI技术能否在艺术设计中帮助到我们?今天我们为大家介绍的这篇论文,"Automatic Generation of Visual-Textual Presentation Layout"(图文排版的自动生成算法研究),刚刚被美国计算机学会会刊ACM Transactions on Multimedia Computing, Communications and Applications (

正会最后一日,ACL 2017最佳论文和终身成就奖揭晓 | ACL 2017

雷锋网(公众号:雷锋网) AI 科技评论按:当地时间8月2日下午6点,自然语言处理和计算机语言学的最高级别会议 ACL 2017 上,大会主席 Joakim Nivre 向哈佛大学教授 Barbara J. Grosz 颁发了 ACL 终身成就奖,以表彰她的学术造诣和在跨学科机构方面做出的贡献.五篇会议最佳论文也终于揭晓. Barbara J. Grosz 喜获 ACL 终身成就奖 ACL 2017 终身成就奖(Lifetime Achievement Award)的获得者是哈佛大学工程和应用科

IJCAI 2017 最佳论文明日公布,华人已承包最佳学生论文奖

雷锋网AI科技评论按:研讨会开了几天,IJCAI 2017正会终于要开始了,接下来的几天将是一系列激动人心的特邀演讲和各种奖项的确定和颁发. 在明天早上的开幕典礼上,将从6篇入围的论文中确定期待已久的两项Distinguished Papers奖.这6篇论文当中,3篇Distinguished Student Paper全是华人学生的论文,而Distinguished Paper中也有一篇是中国学者的工作.所以前一个奖项已经被中国学生包了,后一个也很有可能会是中国学者获奖.在颁奖之前,我们不如先

FPL 2017最佳论文:如何对FPGA云发动DoS攻击?

第27届现场可编程逻辑与应用国际会议(The International Conference on Field-Programmable Logic and Applications,FPL)九月份在比利时根特召开.在FPL 2017上,一篇来自德国卡尔斯鲁厄理工学院(Karlsruhe Institute of Technology)的论文<Voltage Drop-based Fault Attacks on FPGAs using Valid Bitstreams>获得了最佳论文奖,同