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,也就是说,把原来为k个feature maps降到n个feature maps,大家都把这个过程叫做降维。(我是拒绝的,只能说单纯的从数字上,确实是减少了,但是和平时我们说的降维不是一回事啊!)

具体操作是在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 论文阅读

    毕设终于告一段落,传统方法的视觉做得我整个人都很奔溃,终于结束,可以看些搁置很久的一些论文了,嘤嘤嘤 Densely Connected Convolutional Networks 其实很早就出来了 ...

  2. Deep Learning 33:读论文“Densely Connected Convolutional Networks”-------DenseNet 简单理解

    一.读前说明 1.论文"Densely Connected Convolutional Networks"是现在为止效果最好的CNN架构,比Resnet还好,有必要学习一下它为什么 ...

  3. 深度学习论文翻译解析(十五):Densely Connected Convolutional Networks

    论文标题:Densely Connected Convolutional Networks 论文作者:Gao Huang Zhuang Liu Laurens van der Maaten  Kili ...

  4. Paper | Densely Connected Convolutional Networks

    目录 黄高老师190919在北航的报告听后感 故事背景 网络结构 Dense block DenseNet 过渡层 成长率 瓶颈层 细节 实验 发表在2017 CVPR. 摘要 Recent work ...

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

    目录 0. Paper link 1. Overview 2. DenseNet Architecture 2.1 Analogy to ResNet 2.2 Composite function 2 ...

  6. Densely Connected Convolutional Networks(緊密相連卷積網絡)

    - Dense blocks where each layer is connected to every other layer in feedforward fashion(緊密塊是指每一個層與每 ...

  7. DenseNet——Densely Connected Convolutional Networks

    1. 摘要 传统的 L 层神经网络只有 L 个连接,DenseNet 的结构则有 L(L+1)/2 个连接,每一层都和前面的所有层进行连接,所以称之为密集连接的网络. 针对每一层网络,其前面所有层的特 ...

  8. 目标检测论文阅读:Deformable Convolutional Networks

    https://blog.csdn.net/qq_21949357/article/details/80538255 这篇论文其实读起来还是比较难懂的,主要是细节部分很需要推敲,尤其是deformab ...

  9. 【文献阅读】Self-Normalizing Neural Networks

    Self-Normalizing Neural Networks ,长达93页的附录足以成为吸睛的地方(给人感觉很厉害), 此paper提出了新的激活函数,称之为 SELUs ,其具有normaliz ...

随机推荐

  1. linux之ssh命令

    ssh命令用于远程登录上Linux主机. 常用格式:ssh [-l login_name] [-p port] [user@]hostname更详细的可以用ssh -h查看. 不指定用户: ssh 1 ...

  2. apache 配置防盗

    防盗链目的:防止其他网站盗用自己的网站而增加额外的流量损失 SetEnvIfNoCase Referer "^http://.*\.yourdomin\.com" local_re ...

  3. cubemap

    cubemap 画的时候 是一张一张画 并不是画成 ------- |       | |       |        |       |       | |        | 这样一个位置 而是一 ...

  4. Commenting and uncommenting XML via Python

    转载: http://stackoverflow.com/questions/8764017/commenting-and-uncommenting-xml-via-python from xml.d ...

  5. postman(一)批量执行接口测试用例

    postman(一)批量执行接口测试用例 学习了:https://blog.csdn.net/github_36032947/article/details/78611405 还可以把collecti ...

  6. 转:mybatis3中@SelectProvider的使用技巧

    mybatis3中@SelectProvider的使用技巧 mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/. mybati ...

  7. EffectiveJava(15)强化对象和域的不可变性

    概念: 不可变类是其实例不能被修改的类,不可变类比可变类更加易于设计 实现和使用.它们不容易出错,而且更加安全. 优点 1.不可变对象只有创建时状态. 2.不可变对象本质上是线程安全的,它们不要求同步 ...

  8. Node.js的静态页面想通过jQuery的Ajax函数调用远程服务的措施无效

    程序下载:https://files.cnblogs.com/files/xiandedanteng/nodejsMakejqueryAjaxInvalid.rar 在 http://www.cnbl ...

  9. C# Redis Server分布式缓存编程(一)

    这篇文章我将介绍如果用最简洁的方式配置Redis Server, 以及如何使用C#和它交互编程 一. 背景介绍 Redis是最快的key-value分布式缓存之一 缺点: 没有本地数据缓冲, 目前还没 ...

  10. urllib urllib2

    #-*-coding:utf-8-*- import urllib import urllib2 import cookielib ##urllib url="http://www.qq.c ...