• Introduction
  • Related work
  • DenseNets
  • 总结

Densely Connected Convolutional Networks,CVPR-2017-best paper之一(共两篇,另外一篇是apple关于GAN的paper),早在去年八月 DenseNets的paper就发布在arXiv上了。
就CNN的发展来说,2017注定被DenseNets给占了(12年开始,经典的CNN网络,AlexNet,VGG,GoogLenet系列,ResNet系列),除了AlexNet,VGG,GoogLenet,ResNet都是在传统CNN连接方式上做了一些改变,从而获得更好的效果。自ResNet(2015,ImageNet 冠军)之后,能通过对CNN连接连接方式上的改变而获得巨大反响的非DenseNet不可了,所以这篇paper还是很值得读的,而且!paper很通俗易懂!因为仅是在连接方式上进行了改变,完全没有太多公式,希望大家可以通过paper学习其idea,为什么要这连接会work。

扯远了,回归正题。paper结构完整,由浅入深,非常适合阅读。paper分6部分:
1.Introduction
2. Related Work
3. DenseNets
4. Experiments
5. Discussion
6. Conclusion

1. Introduction :

介绍CNN的发展,尤其是层数的发展,突破100层大关(英文学习: surpassed the 100-layer barrier);层数深导致的问题是 information and gradient 的vanish或者“washout”,gradient vanish是众所周知的啦,这个information “washout”是什么意思,至今我也没理解,但是DenseNet结构一大亮点就是解决 information flow这个问题。information flow会贯穿全文!
接着讲[11,13,17,33]分别是怎么解决 information flow问题的,最后指出这些工作的相同之处:they create short paths from early layers to later layers
而DenseNet就不一样了,DenseNet为了最大化 information flow, they connect all layers (with matching feature-map sizes) directly with each other。我的理解就是每一层与其余所有层都有连接关系,l层与之前的所有层是l层的输入,l层是后面所有层的输出,这样可以得到更好的information flow。在此还强调一点,DenseNet与ResNet不同的是,ResNet combine features through summation, ResNet 是把特征加起来,而DenseNet则是 concatenating,连接起来。
作者还发现 dense connections have a regularizing effect, which reduces overfitting我觉得这是一个彩蛋啊,这个思想可以作为一个idea进行研究,做点实验,说不定有新发现,想发paper的同学,你懂的,毕竟解决overfitting也是我们经常遇到的问题。

2. Related work

由于DenseNet是针对结构(连接)上的改变,所以就介绍了一大部分关于network architectures
的paper,有需要的可以做相应研究。

3. DenseNets

这一部分才是重头戏,直接看DenseNet的网络结构图(一图胜千言):

上边是整个网络示意图,是包含三个dense block的网络,而DenseNet中的Dense 主要体现在dense block里面,dense block又是什么鬼? 看图吧:

这是一个包含5层(含input)的dense block ,x表示层,分别有x0 至x4,H表示操作,这里面,H的操作有: BN+Relu+Conv ,block最后是一个transition layer。

(一开始我对DenseNet的理解没有block的概念,所有layer同等对待,当前layer会给后面所有layer作为输入,然后并不是的,当前layer仅仅给同一个dense block 里在其之后的layer作为输入)

看完结构图,只是有个大概了解,接下来就讲讲DenseNet中的东西,分别有以下六个部分:

1. Dense connectivity
为了improve the information flow between layers(information flow 是贯穿paper的主线!)作者提出 dense connectivity 。
首先明确,dense connectivity 仅仅是在一个dense block里的,不同dense block 之间是没有dense connectivity 的!dense connectivity 是什么意思呢? 我拿上图2中的操作H2来说,按照传统的连接方法,H2的输入仅是X1,而这里为了更好的让 information flow,H2的输入不仅是X1,而且还有X0,看下图中,红框部分:

同理,H3的输入是X0, X1,X2,

2.Composite function
也就是上图中的H1 H2 H3 H4,这里的 操作是 BN,Relu,3*3 conv(padding=1,不改变feature map的尺寸)

3. Pooling layers
作者先承认pooling的作用很重要,然而在dense connectivity时,如果feature map的尺寸不一致,是没有办法connectivity的,而又不能丢弃pooling,那怎么办呢??一个dense block里不能改变feature map的尺寸,那就搞多一个dense block 就好啦!dense block之间用上pooling
作者如是说,To facilitate pooling,把网络分为了多个dense block,在一个dense block 结束,连接下一个dense block之前,需要经过一个叫做transition layers的层,如图1,图2中,红圈里面的那个。transition layers层里边包含了BN, 1*1Conv,pooling

4. Growth rate
考虑一个问题,假设每一个H操作就会产生k个feature maps,那么当层数为l的时候就会有k*(l-1)+k0 (k0是input的通道数,RGB的话,就是3),如果k太大,会导致数据量特别大(feature maps多嘛),而这个k又恰恰是卷积核的个数,所以也不能太大,太大了,网络的参数又太多。因此这里,作者增加了一个叫做 Growth rate的东西,令为k,如上图2中,最下边的注释就说可,k=4,看看 X1 X2 X3 X4里边就只有4个feature maps。
5. Bottleneck layers

为什么要用Bottleneck layers?因为作者觉得每层产生k个feature maps,还是很多啊,那怎么办?用1*1*n的卷来积呗,1*1*n来卷积,feature maps是n,也就是说,把这个block里feature maps 之和(如图2,4*4+3) 降到n ,大家都把这个过程叫做降维。(我是拒绝的,只能说单纯的从数字上,确实是减少了,我觉得和平时我们说的降维不是一回事啊!)
具体操作是在H当中的,例如 l层H是这样的一系列操作:
BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3)
如果带用了这个操作的模型,那么就记为 DenseNet-B

作者提到,在他们的实验中,这个n 取 为4倍的k,即 4*k
6. Compression

为了更compactness,作者就是嫌弃feature maps太多,既然在dense block里面用上了Bottleneck layers来减少feature maps数量了,还想在dense block外面也要减;前面说过,dense block之后先接一个 transition layers,那么在transition layers里也搞一个 reduce!而这个reduce是带参数的,也就是减少百分之多少,作者的实验中是减少50%,θ是 0.5
如果用了这个操作的,称之为 DenseNet-C;
如果 bottleneck layers 和compression一起用了,就称之为 DenseNet-BC

好了,至此,DenseNet中novel的东西就讲完了,剩下就是怎么把123456一起用起来,组装成一个强大的神经网络的问题了,至于具体怎么操作,看是看代码吧,这个样会更清晰!

总结:

  1. 全文主线是 information flow,为了更改好的 information flow,那就让information(feature maps)可以到达任意的地方,即Dense connectivity
  2. 为了减少模型参数,在dense block里面采用bottleneck layers(看着名字唬人,其实就是1*1*n的一个卷积操作,这个n=4k,把feature maps数量变到4k这么小)
    同时,在dense block 之后还要把feature maps数量减一减,就用了一个叫做compression的操作,其实就是把卷积核的数量设置为feature maps的 θ倍,这样就达到减少feature maps的目的

4,5,6部分其实都很精彩,会详细介绍如何训练网络,参数如何设定,这可是秘方啊,作者都给出来了,除了了解DenseNet之外,还想了解如何训练网络的,推荐看看paper4,5,6部分。

还有一点就是作者的源码(https://github.com/liuzhuang13/DenseNet)中,不仅给出了prototxt,连solver都给出来了!大家风范啊!

【文献阅读】Densely Connected Convolutional Networks-best paper-CVPR-2017相关推荐

  1. 论文阅读——Densely Connected Convolutional Networks

    前言 之前有一段时间看了挺多深度学习方面的论文,但是由于时间方面的问题一直没来得及进行总结.最近一段时间突发奇想把自己看论文时的学习笔记给记录一下,由于之前没写过博文,所以排版可能会有点emmm... ...

  2. Densely Connected Convolutional Networks 阅读

    https://blog.csdn.net/u014380165/article/details/75142664 论文:Densely Connected Convolutional Network ...

  3. 【论文阅读及复现】(2017)Densely Connected Convolutional Networks + Pytorch代码实现

    文章目录 一.摘要 二.Dense Net 网络结构 三.Dense Block 四.PyTorch-GPU代码实现 论文来源:(2017)Densely Connected Convolutiona ...

  4. 【Network Architecture】Densely Connected Convolutional Networks 论文解析

    [Network Architecture]Densely Connected Convolutional Networks 论文解析 目录 0. Paper link 1. Overview 2. ...

  5. 网络模型--Densely Connected Convolutional Networks

    Densely Connected Convolutional Networks CVPR2017 best paper Code: https://github.com/liuzhuang13/De ...

  6. 论文笔记:Densely Connected Convolutional Networks (2017 CVPR)

    [引用格式]:G. Huang, Z. Liu, L. Van Der Maaten and K. Q. Weinberger, "Densely Connected Convolution ...

  7. Densely Connected Convolutional Networks(论文解读三)

    目录 DenseNet:论文解读 1. Abstract 2. Related work 2.1 通过级联来加深网络 2.2 通过 shortcut 连接来加深网络 2.3 通过加宽网络来使网络更深 ...

  8. DenseNet: Densely Connected Convolutional Networks

    Densely Connected Convolutional Networks Tags: Backbobe 作者: Gao Huang, Zhuang Liu 发表日期: 2018 引用量: 26 ...

  9. 论文笔记:Densely Connected Convolutional Networks(DenseNet模型详解)

    [ 转载自http://www.yyliu.cn/post/7cabb4ff.html ] CVPR 2017上,清华大学的Zhuang Liu.康奈尔大学的Gao Huang和Kilian Q.We ...

  10. 《Densely Connected Convolutional Networks》论文心得

    <Densely Connected Convolutional Networks>论文心得 作者及其所在团队在国内外相关领域所处水平: 黄高:美国康奈尔大学计算机系博士后主要研究领域为深 ...

最新文章

  1. 为什么整数集合使用Z来表示?
  2. 《学习之道》第四章学习语言和记忆痕迹
  3. 『前端干货篇』:你不知道的Stylus
  4. 013_SpringBoot视图层技术thymeleaf-迭代遍历
  5. 30.32.33.词云图、3D绘图、矩阵可视化、绘制混淆矩阵
  6. django ajax form表单,Django学习系列之Form表单和ajax(示例代码)
  7. Postgresql 按30分钟、小时、天分组
  8. 图解JAVA参数传递
  9. App引导页学习进阶临摹模板|UI界面设计步骤
  10. java nio 文件传输
  11. python繁体中文到简体中文的转换
  12. 随机产生13个0~51不同的随机数 -思想(定义参考系)
  13. 17大主链均狂跌国内项目却看涨, 本周不可不知的7组榜单 | 数据周榜
  14. 从原理到应用,一文带你了解小程序插件能力
  15. ELKElasticSearch5.1基础概念及配置文件详解【转】
  16. LAMP(CentOS 7.2)环境下搭建WordPress
  17. SpringBoot之AOP切面的使用
  18. xcode,cocoa开发:如何使用第三方的dylib
  19. 网络编程:TCP简单实现群聊功能
  20. 华为路由器如何配置静态路由

热门文章

  1. 理解Docker(1):Docker 安装和基础用法
  2. 数据访问类用静态方法。。。当多个人调用时返回值会返回别人的?。。。特别奇怪的问题???...
  3. Unity热更新之资源的上传与下载
  4. cept源代码目录结构详解_知识树(转)
  5. linux 乌班图 lnmp环境搭建
  6. FilterAttribute过滤器的 执行顺序
  7. css对于文字过长加省略号
  8. 使用PHP对word文档进行操作的方法
  9. MySQL设置或修改系统变量的几种方法
  10. PHP下获取上个月、下个月、本月的日期(strtotime,date)