zoukankan      html  css  js  c++  java
  • 论文笔记 Densely Connected Convolutional Networks

    首先我们从宏观的角度理解一下这篇论文做了什么。这篇论文引入了一个“Dense Block”,该模块的的组成如下图所示(要点就是,Input输入到后续的每一层,每一层都输入到后续层)

     在实际应用的时候,如果我们将“Dense Block”作为一个building block,那么可以按照如下的方式构建深度网络结构(是不是一下子就理解了这篇文章做了什么?)。

     下面我们来分析一下这个“Dense Block”的一些特点

    • “Dense Block”内(包括“Dense Block”的输入)每一层输出feature map的数量是不是有限制呢?

    为此,作者引入了一个参数k(growth rate),它表示“Dense Block”内每一层输出feature map的个数。如果“Dense Block”的层数较多、k值较大,那么“Dense Block”最后一层的输入个数是很大的,因此k取值不应该太大。

    • 为什么要将Figure 2中“Dense Block”间隔开呢?

    在深度网络结构的设计中,pooling layer是一个很重要的因素,作者想用pooling layer。在“Dense Block”内,第L层来自它前面所有层的输入是以“concatenate”的形式组成一个single tensor的,这样就要求它前面所有层具有相同的feature map sizes。这和pooling layer改变feature map sizes的特点相矛盾。作者做了一个折中,以pooling layer为界分割“Dense Blcok”,如Figure 2所示,这样就能够满足上述两个需求了。“Dense Block”之间的层在论文中一个专门的名字“transition layer”。

    • “transition layer”的设计

    这一层的设计比较常规,“We use 1x1 convolution followed by 2x2 average pooling as transition layers between two contiguous dense blocks”.

    • “Dense Block”的设计

    该Block输出个数为k,但是输入个数很多,作者采取bottleneck layers的方式减少特定层输入的个数,具体就是BN-Relu-Conv(1x1)-BN-Relu-Conv(3x3),1x1的卷积核将输入的个数限制在4k个feature maps上。

    由Figure 1可以看出,“transition layer”的输入个数是最多的。假如“Dense Block”一共有m个feature maps,那么我们将transition layer输出feature maps的个数限制在θm,θ属于(0,1],在实验中作者用的是0.5。

    原则上,在上述解释的基础上,去搭建一个网络结构应该不难了。下面给出作者在Imagenet上的网络结构。

     最后,我们来分析一下“Dense Block”的优点

    • feature reuse

    这个很好理解,第L层将它前面所有层的feature maps都利用到了,没有“浪费宝贵的feature maps”。

    • 能够缓解梯度消失问题

    以输入Input为例,Input通过一个或者几个“transition layer”连接到了loss函数,等效为“在Input与Loss进行了bypass”有利于Loss函数对低层的监督。仔细分析就会发现类似于上述的通路是存在很多的,它们的区别就是“有的通路距离Loss近,有的远”。这样会导致受Loss函数监督程度的差异。

    • 更好的参数利用率

    就是用更少的参数达到同类模型的准确率,或者同样多参数达到更高的准确率。之所以会出现这种现象,是因为作者引入的“growth rate”这一个概念,以及对“Dense Block”结构巧妙的设计。

    总结:

    • 这篇paper充分利用了“bypass”以及“feature maps reuse”。
    • 如果直接应用上述概念,会出现了一些问题,作者采取巧妙的方式进行了处理(如引入“transition layer”、“growth rate”)。
  • 相关阅读:
    extjs 为组件动态添加插件
    springboot使用spring-cloud-starter-alibaba-sentinel导致响应变成xml格式
    js 将数据保存到本地
    iframe跨域安全
    nginx url自动301加斜杠
    EXTJS防止表单中回车触发提交
    servlet
    Struts1和Struts2的区别
    AWT和Swing的简记
    sleep()和wait()
  • 原文地址:https://www.cnblogs.com/everyday-haoguo/p/Note-DenseNet.html
Copyright © 2011-2022 走看看