DenseNet这篇论文是在ResNet之后一年发表的,由于ResNet在当时引起了很大的轰动,所以DenseNet也将ResNet作为了主要的对比方法,读起来还是比较容易的,全篇只有两个数学公式,也很容易懂,感觉也是入门CV必看。

一、为什么要引入DenseNet?

原因其实是和ResNet类似的,还是为了解决网络深度加深后引起的梯度消失/爆炸问题,虽然已经有一系列的网络结构针对这一问题有了很大的改善,但这些方法都有一个共同的核心思想:将feature map进行跨网络层的连接。而作者认为与其多次学习冗余的特征,特征复用是一种更好的特征提取方式。因此DenseNet就诞生了。

二、DenseNet的网络结构

见下图网络结构其实已经很明了了,DenseNet的结构简单来说就是每两层之间两两相连,假设有4层结构,那么第4层就会得到来自最初的特征$x_{0}$,第1层输出的特征$x_{1}$...第3层输出的特征$x_{3}$,从而保证网络中层与层之间最大程度的信息传输。

以下是论文中对这种结构的定义:

假设网络结构由$L$层组成,每一层的特征都经过一系列变换(BN、ReLU、Pooling或Conv),我们将这一变换称为$H_{l}(\cdot)$ ,那么根据上面对DenseNet的定义,第$l$层特征的输出要取决于前面层输出的特征,即:

$$x_{l} = H_{l}([x_{0}, x_{1},..., x{l-1}])$$

此外,我们将$k$定义为第$l$层输出的feature map个数,也就是channels(作者将$k$定义为该网络结构的growth rate)。

下图为针对ImageNet设计的DenseNet网络结构,根据这张图我们从整体到细节来分析具体的结构。

从整体来看,Dense的主要组成是

1个卷积层(2k个卷积)+maxpooling层

+1个DenseBlock+1个Transition层(包括1个1x1的卷积层+avgpooling层)这两层后面要细说

+1个DenseBlock+1个Transition层

+1个DenseBlock+1个Transition层

+avgpool层+全连接层,softmax

从细节来看,我们假设每层的输出feature map个数为$k$:

(1)DenseBlock

每个DenseBlock其实是可以细分成:BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)

而Conv(1x1)即bottleneck主要作用就是用来降维或升维的,由于在该网络中每个DenseBlock的$L$层输入该Block中的$0, 1,..., L-1$层中提取的特征,再将它们叠加起来,因此可能会产生较大的channels($n_{channel}=(L-1)*k+k_{0}$,$k_{0}$是最初输入的feature map个数),所以bottleneck就可以用来降维,从而减小计算量和参数。这也是基本DenseNet中该有的部分,文中将拥有bottleneck的DenseNet称为DenseNet-B。

(2)Transition

Transition的组成其实就是:Conv(1x1)-avgpooling

为了能进一步压缩参数,作者引入另一个参数$\theta(0<\theta<=1)$,我们假设$\lfloor \theta \rfloor$为Transition层输出的feature map个数,显而易见Conv(1x1)在这里做的也是降维,也就是将通道数变少,那么对于下一层的输入的feature map也就少了,文中将有Transition层且有bottleneck的DeseNet称为DenseNet-BC(只有Transition层的称为DenseNet-C),也就是说该DenseNet-BC中每个Transition层的输出通道数是输入的一半。

三、DenseNet的优点

1、减少了参数及计算量。从作者提供的实验中可以看出ResNet-101的参数量和DenseNet-201的参数量差不多,准确率却已经达到了和ResNet相当的水平。至于为什么省参数的原因,也就是上述DenseBlock和Transition结构的优点。

2、特征复用程度高。DenseNet将所有层都连接起来,即每一层的输入都来自前面所有层的输出,也就意味着很深的层也会用到较浅层输出的特征,因此更加有效的使用了特征。

3、泛化性能更强。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。在作者提供的实验中,在没有data augmention的情况下,CIFAR-100下,ResNet表现error下降很多,DenseNet下降不多,说明DenseNet泛化性能更强。

DenseNet的个人总结的更多相关文章

  1. CNN网络架构演进:从LeNet到DenseNet

    卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF ...

  2. DenseNet

    特点: dense shortcut connections 结构: DenseNet 是一种具有密集连接的卷积神经网络.在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有 ...

  3. densenet 中的shortcut connection

    DenseNet  在FCN 网络中考虑加入skip connection,在resnet 中加入identity 映射,这些 shortcut connection等结构能够得到更好的检测效果,在d ...

  4. 《DenseNet Models for Tiny ImageNet Classification》课程设计论文

    paper : <DenseNet Models for Tiny ImageNet Classification>     https://arxiv.org/ftp/arxiv/pap ...

  5. Feature Extractor[DenseNet]

    0.背景 随着CNN变得越来越深,人们发现会有梯度消失的现象.这个问题主要是单路径的信息和梯度的传播,其中的激活函数都是非线性的,从而特别是乘法就可以使得随着层数越深,假设将传统的神经网络的每一层看成 ...

  6. torchvision里densenet代码分析

    #densenet原文地址 https://arxiv.org/abs/1608.06993 #densenet介绍 https://blog.csdn.net/zchang81/article/de ...

  7. DenseNet 论文阅读笔记

    Densely Connected Convolutional Networks 原文链接 摘要 研究表明,如果卷积网络在接近输入和接近输出地层之间包含较短地连接,那么,该网络可以显著地加深,变得更精 ...

  8. 使用keras导入densenet模型

    从keras的keras_applications的文件夹内可以找到内置模型的源代码 Kera的应用模块Application提供了带有预训练权重的Keras模型,这些模型可以用来进行预测.特征提取和 ...

  9. 论文笔记——DenseNet

    <Densely Connected Convolutional Networks>阅读笔记 代码地址:https://github.com/liuzhuang13/DenseNet 首先 ...

  10. caffe跑densenet的错误:Message type "caffe.PoolingParameter" has no field named "ceil_mode".【转自CSDN】

    最近看了densenet这篇论文,论文作者给了基于caffe的源码,自己在电脑上跑了下,但是出现了Message type “caffe.PoolingParameter” has no field ...

随机推荐

  1. 微软大楼设计方案(中等) 推公式+RMQ问题

    近日,微软新大楼的设计方案正在广泛征集中,其中一种方案格外引人注目.在这个方案中,大楼由 nn 栋楼组成,这些楼从左至右连成一排,编号依次为 11 到 nn,其中第 ii 栋楼有 h_ih​i​​层. ...

  2. CSS 定位 relative && absolute 问题?

    1 1 1 CSS 定位 relative && absolute 问题? 谁能解释一下,为什么div使用 relative是设置right,bottom 后,看不到div 呀,哪里多 ...

  3. cookie all in one

    cookie all in one credentials: "include" https://developers.google.com/web/updates/2015/03 ...

  4. 移动端 CSS 1px 问题及解决方案

    移动端 CSS 1px 问题及解决方案 viewport & transfrom: scale viewport 的 initial-scale 设为 1 UI 设计稿用rem 和 trans ...

  5. Linux & bash & tcpdump

    Linux & bash & tcpdump Linux & tcpdump https://www.tecmint.com/12-tcpdump-commands-a-net ...

  6. React Hooks & Context API

    React Hooks & Context API responsive website https://reactjs.org/docs/hooks-reference.html https ...

  7. 文件描述符(File Descriptor)简介

    本文转载自文件描述符(File Descriptor)简介 导语 维基百科:文件描述符在形式上是一个非负整数.实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表.当程序打开一个 ...

  8. JPEG解码——(4)霍夫曼解码

    本篇是该系列的第四篇,主要介绍霍夫曼解码相关内容. 承接上篇,文件头解析完毕后,就进入了编码数据区域,即SOS的tag后的区域,也是图片数据量的大头所在. 1. 解码过程规则描述 a)从此颜色分量单元 ...

  9. 前端问题录——在导入模块时使用'@'时提示"Modile is not installed"

    前情提要 为了尽可能解决引用其他模块时路径过长的问题,通常会在 vue.config.js 文件中为 src 目录配置一个别名 '@' configureWebpack: { resolve: { a ...

  10. 学习java之电脑的常用快捷键和DOS窗口下的常用命令

    学习java之电脑的常用快捷键和DOS窗口下的常用命令 电脑一些常用的快捷键 win快捷键: 单独按Windows:显示或隐藏 "开始"功能表 Windows+BREAK:显示&q ...