DenseNet——Densely Connected Convolutional Networks
1. 摘要
传统的 L 层神经网络只有 L 个连接,DenseNet 的结构则有 L(L+1)/2 个连接,每一层都和前面的所有层进行连接,所以称之为密集连接的网络。
针对每一层网络,其前面所有层的特征图被当作它的输入,这一层的输出则作为其后面所有层的输入。
DenseNet 有许多优点:消除了梯度消失问题、加强了特征传播、鼓励特征复用并且大大减少了参数的数量。
2. 介绍
随着卷积神经网络变得越来越深,一个新的问题出现了:输入信息或者梯度在很多层之间传递的过程中会渐渐消失并且被洗掉。很多最近的工作都在尝试解决这个问题,它们都有一个共同的特点:在前面的层和后面的层之间创建捷径,也就是跳跃连接。
在本文中,作者则将这种认识提炼成一种简单的连接模式:为了保证网络中层与层之间最大的信息流动,我们直接把特征图大小匹配的所有层直接相连。
如上图所示,每一层都获取其前面所有层的特征图作为输入,并且将自己的特征图作为随后所有层的输入。但是,不同于 ResNet,作者是将特征按照通道拼接在一起而不是通过相加的操作。
这种密集连接模式的一个反直觉效果可能是它需要比传统卷积网络更少的参数,因为不需要重新学习冗余特征映射。传统的网络结构可以看作是一个具有状态的算法,每一层都读取它前面层的状态并且向下一层写入一个新的状态。改变状态的同时也需要传递一些需要保留的信息。ResNet 通过相加的恒等映射来保留信息,但是一些研究表明很多层贡献非常小甚至可以被随机丢弃掉。但是,DenseNet 的结构明确区分了要添加到网络的信息和保留的信息,因此它的网络非常窄(例如,每层 12 个卷积核),只为网络的“集体知识”添加一小组特征图,并保持其余的特征图不变,而最终的分类器则根据网络中的所有特征图来决策。
除此之外,DenseNet 的一大优势是它改善了整个网络中信息和梯度的流动,使其易于训练。每一层网络都可以直接访问到原始的输入信号,以及来自于损失函数的梯度,这有助于更深的网络架构的训练。而且,密集的连接也具有正则化的效果,这减小了在较小数据集上任务的过拟合风险。
相较于之前的设计通过特别深或者特别宽的结构来获取表示能力,DenseNet 则通过特征复用来开发网络的潜力,从而产生了易于训练和高参数效率的压缩模型。将不同层学习到的特征图拼接在一起增加了后续层输入的变化并提高了效率。
3. 网络结构
- Dense connectivity
第 L 层网络接受其前面所有层网络的特征图作为输入,
为了便与实现,作者将多个输入直接拼接成一个张量。
- Composite function
H 则是一个包含连续三个操作的复合函数:BN,ReLU,以及一个 3×3 的卷积。
- Pooling layers
特征图大小不一致时我们就无法进行对它们进行拼接了,但是卷积神经网络中必要的下采样层一定会改变特征图大小。因此,作者将网络划分为几个密集连接块,块与块之间的层称之为过渡层,来进行卷积和池化。作者实验中的过渡层采用的是 BN、1×1 的卷积以及 2×2 的平均池化。
- Growth rate
在一个 Dense 块内,如果每一层网络产生 k 个特征图,那么经过 L-1 层网络后,输入的特征图就会增加 k*(L-1) 个,作者将超参数 k 称之为网络的增长率。DenseNet 与现有网络结构的一个不同就是它的网络层可以非常窄,作者发现一个相对比较小的增长率就足以取得最好的结果。
- Bottleneck layers
在 3×3 的卷积前面引入 1×1 的卷积可以减少特征图的数量,因此提升计算效率。作者将这种引入了瓶颈结构的模型称之为 DenseNet-B,它们的结构是这样的:BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3),其中,1×1 的卷积输出 4*k 个特征图。
- Compression
为了进一步提升模型的紧凑性,在过渡层也可以对特征图数量进行减少。如果一个 Dense 块有 m 个特征图,我们让紧随其后的过渡层产生 am 个特征图。0<a<= 1,a=1 时,特征图适量保持不变。a<1 时的模型称之为 DenseNet-C。如果瓶颈层和过渡层的 a 都小于 1,这时的模型称之为 DenseNet-BC。
- Implementation Details
4. 实验结果
4.1. CIFAR and SVHN 分类
在没有压缩和瓶颈层的情况下,DenseNets 随着网络层数和增长率的增加表现逐渐变好,作者将此归结为网络容量增加的结果。
我们的 250 层模型只有 15.3M 个参数,但却比 FractalNet 和 Wide ResNets 这些拥有超过 30M 参数的模型表现要好。
4.2. ImageNet 分类
DenseNet 在更少的参数量下取得了比 ResNet 更好的效果,而且这是在超参数针对 ResNet 最优的情况下测试的,也就是说,DenseNet 仍然还有进步空间。
5. 讨论
- Model compactness
DenseNet-BC 要达到和 ResNet 一样的效果,只需要其三分之一的参数量即可。
- Implicit Deep Supervision
对 DenseNet 准确率提升的一种解释可能是各个层都通过跳跃连接接受到来自损失函数的额外监督,这可以理解为 DenseNet 执行了一种“深度监督”。
- Feature Reuse
其中,(l, s) 位置的颜色代表 l 层利用 s 层的特征图的程度,越接近红色,说明利用越强。可以发现:
- 所有层都将权重分布在同一 Dense 块内的许多输入上,这表明由非常早的层提取的特征实际上可以直接被深层使用。
- 过渡层也将权重分布在前面 Dense 块内的所有层上,这表明在 DenseNet 中信息大都可以直接从第一层流到最后一层。
- 第二三个 Dense 块对上一个过渡层的输入分配了最少的权重,说明过渡层有大量冗余特征,这也就是 DenseNet-BC 中采取压缩的好处。
- 分类层的权重更集中于最后一层的特征,说明这里可能有更多高层次的特征。
获取更多精彩,请关注「seniusen」!
DenseNet——Densely Connected Convolutional Networks的更多相关文章
- Deep Learning 33:读论文“Densely Connected Convolutional Networks”-------DenseNet 简单理解
一.读前说明 1.论文"Densely Connected Convolutional Networks"是现在为止效果最好的CNN架构,比Resnet还好,有必要学习一下它为什么 ...
- Densely Connected Convolutional Networks 论文阅读
毕设终于告一段落,传统方法的视觉做得我整个人都很奔溃,终于结束,可以看些搁置很久的一些论文了,嘤嘤嘤 Densely Connected Convolutional Networks 其实很早就出来了 ...
- 深度学习论文翻译解析(十五):Densely Connected Convolutional Networks
论文标题:Densely Connected Convolutional Networks 论文作者:Gao Huang Zhuang Liu Laurens van der Maaten Kili ...
- 【Network Architecture】Densely Connected Convolutional Networks 论文解析
目录 0. Paper link 1. Overview 2. DenseNet Architecture 2.1 Analogy to ResNet 2.2 Composite function 2 ...
- Paper | Densely Connected Convolutional Networks
目录 黄高老师190919在北航的报告听后感 故事背景 网络结构 Dense block DenseNet 过渡层 成长率 瓶颈层 细节 实验 发表在2017 CVPR. 摘要 Recent work ...
- Densely Connected Convolutional Networks(緊密相連卷積網絡)
- Dense blocks where each layer is connected to every other layer in feedforward fashion(緊密塊是指每一個層與每 ...
- 【文献阅读】Densely Connected Convolutional Networks-best paper-CVPR-2017
Densely Connected Convolutional Networks,CVPR-2017-best paper之一(共两篇,另外一篇是apple关于GAN的paper),早在去年八月 De ...
- (转)ResNet, AlexNet, VGG, Inception: Understanding various architectures of Convolutional Networks
ResNet, AlexNet, VGG, Inception: Understanding various architectures of Convolutional Networks by KO ...
- VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan[‡] & Andrew Zi ...
随机推荐
- Vue2+Webpack创建vue项目
相比较AngularJS和ReactJS,VueJS一直以轻量级,易上手称道.MVVM的开发模式也使前端从原先的DOM中解放出来,我们在不需要在维护视图和数据的统一上花大量时间,只需要关注于data的 ...
- php中static静态变量的使用方法详解
php中的变量作用范围的另一个重要特性就是静态变量(static 变量).静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果. 看看下面 ...
- jQuery文字“橡皮圈“特效
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Linux无法识别Broadcom 802.11abgn无线网卡
折腾了好久,都无法解决 索性后来直接使用的usb外置网卡,勉强能用(使用极其不便) 最后使尽浑身解数,冲着萤火般的希望,好在没有放弃 正解就是下面这 完成重启即可 sudo cp /sys/fir ...
- ethereumjs/ethereumjs-common-1-简介
为了了解ethereumjs/ethereumjs-block-3-代码的使用需要了解的一个模块 https://github.com/ethereumjs/ethereumjs-common Com ...
- 469 B. Intercepted Message
http://codeforces.com/problemset/problem/950/B Hacker Zhorik wants to decipher two secret messages h ...
- python 爬虫 发送每天天气
#!/usr/bin/python# -*- coding: UTF-8 -*-import requests,bs4,smtplib,sysimport smtplib, sysfrom email ...
- Linux开机自启动脚本
将需要开机自启动的脚本命令写在文件/etc/rc.d/rc.local中即可. 比如需要开机自启动MySql和Apache,则在/etc/rc.d/rc.local文件尾部加入两行命令: system ...
- Devc++编程过程中的一些报错总结
以下都是我在使用Devc++的过程中出现过的错误,通过查找资料解决问题,今天小小地记录.整理一下. 1.[Error] invalid conversion from 'const char*' to ...
- react中手动重置redux
前段时间使用redux在react-native中,安卓后退两次关闭后redux未清空的问题,一直觉得处理的不够优雅,没有根本解决问题. 后来发现再退出登录后,也有部分数据因为redux的逻辑处理数据 ...