DenseNet

作者: 遇事不决_可问春风_ | 来源:发表于2020-05-14 20:33 被阅读0次

Densely Connected Convolutional Networks

这篇博客转载自
原文链接

前言

在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,比如GoogLenet,VGG-19等模型。CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(shortcuts,skip connection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。今天我们要介绍的是DenseNet模型,它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),它的名称也是由此而来。DenseNet的另一大特色是通过特征在channel上的连接来实现特征重用(feature reuse)。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能。

如上所述,DenseNet网络架构中,每两个层之间都有直接的连接,因此该网络的直接连接个数为L(L+1)/2,对于每一层,使用前面所有的层的特征映射作为输入,并且使其自身的特征映射作为所有后续层的输入。

DenseNet的优点:

(1)缓解了消失梯度问题
(2)实现特征重用,加强了特征传播
(3)模型大大减少了参数的数量

示例:(一个5层的密集块)


设计理念

相比ResNet,DenseNet提出了一个更激进的密集连接机制:即互相连接所有的层,具体来说就是每个层都会接受其前面所有层作为其额外的输入。图1为ResNet网络的连接机制,作为对比,图2为DenseNet的密集连接机制。可以看到,ResNet是模块化(Residual Block)的,每个模块的最后一层与前面的某层(一般是2~3层)短路连接在一起,连接方式是通过元素级相加。而在DenseNet中,每个层都会与前面所有层在channel维度上连接(concat)在一起(这里各个层的特征图大小是相同的,后面会有说明),并作为下一层的输入。对于一个L层的网络DenseNet共包含

个连接,相比ResNet,这种连接更密集。而且DenseNet是直接连接concat来自不同层的特征图,这可以实现特征重用,提升效率,这一特点是DenseNet与ResNet最主要的区别。 图1 ResNet网络的短路连接机制(其中+代表的是元素级相加操作) 图2 DenseNet网络的密集连接机制(其中c代表的是channel级连接操作)

如果用公式表示的话,传统的网络在L层的输出为:

而对于ResNet,会增加了一个前面的输入:

在DenseNet中,会连接前面所有层作为输入:

其中,上面的

代表是非线性转化函数(non-liear transformation),它是一个组合操作,其可能包括一系列的BN(Batch Normalization),ReLU,Pooling及Conv操作。注意这里L层与 L-1 层之间可能实际上包含多个卷积层。

DenseNet的前向过程如图3所示,可以更直观地理解其密集连接方式:


图3 DenseNet的前向过程

CNN网络一般要经过Pooling或者stride>1的Conv来降低特征图的大小,而DenseNet的密集连接方式需要前后特征图大小保持一致。为了解决这个问题,DenseNet网络中使用DenseBlock+Transition的结构,其中DenseBlock是包含很多层的模块,每个层的特征图大小相同,层与层之间采用密集连接方式。而Transition模块是连接两个相邻的DenseBlock,并且通过Pooling使特征图大小降低。图4给出了DenseNet的网路结构,它共包含4个DenseBlock,各个DenseBlock之间通过Transition连接在一起。

图4 使用DenseBlock+Transition的DenseNet网络

网络结构

如前所示,DenseNet的网络结构主要由DenseBlockTransition组成,如图5所示。下面具体介绍网络的具体实现细节。

图5 DenseNet的网络结构

一.DenseBlock

DenseBlock中,各个层的特征图大小一致,可以在channel维度上连接。DenseBlock中的非线性组合函数H(.)采用的是BN+ReLU+3x3 Conv的结构,如图6所示。另外值得注意的一点是,与ResNet不同,所有DenseBlock中各个层卷积之后均输出 K个特征图,即得到的特征图的channel数为K ,或者说采用K个卷积核。 K在DenseNet称为growth rate,这是一个超参数。一般情况下使用较小的K(比如12),就可以得到较佳的性能。假定输入层的特征图的channel数为 K0,那么 L层输入的channel数为 K0+K(L-1),因此随着层数增加,尽管K设定得较小,DenseBlock的输入会非常多,不过这是由于特征重用所造成的,每个层仅有K特征是自己独有的。

图6 DenseBlock中的非线性转换结构

由于后面层的输入会非常大,DenseBlock内部可以采用bottleneck层来减少计算量,主要是原有的结构中增加1x1 Conv,如图7所示,即BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,称为DenseNet-B结构。其中1x1 Conv得到4K个特征图它起到的作用是降低特征数量,从而提升计算效率。

图7 使用bottleneck层的DenseBlock结构

二.Transition

对于Transition层,它主要是连接两个相邻的DenseBlock,并且降低特征图大小。Transition层包括一个1x1的卷积和2x2的AvgPooling,结构为BN+ReLU+1x1 Conv+2x2 AvgPooling。另外,Transition层可以起到压缩模型的作用。假定Transition的上接DenseBlock得到的特征图channels数为m,Transition层可以产生tm个特征(通过卷积层),其中t是压缩系数(compression rate),范围是(0,1]。当 t=1 时,特征个数经过Transition层没有变化,即无压缩;而当压缩系数小于1时,这种结构称为DenseNet-C,文中使用t=0.5 。对于使用bottleneck层的DenseBlock结构压缩系数小于1的Transition组合结构称为DenseNet-BC。

相关文章

  • DenseNet

    减轻了梯度消失 加强了feature传递 更有效的利用了feature 减少了参数数量 解决的问题还是:随着网络的...

  • DenseNet

  • DenseNet

    Densely Connected Convolutional Networks 这篇博客转载自原文链接 前言 在...

  • DenseNet

      DenseNet对应的论文是Densely Connected Convolutional Networks。...

  • DenseNet

    论文:https://arxiv.org/pdf/1608.06993.pdf[https://arxiv.org...

  • DenseNet与其他网络的对比图

    34层残差网络 残差网内部如下: DenseNet如下 DenseNet的主体框架(在每个Dense Block内...

  • DenseNet阅读笔记

    DenseNet是继ResNet之后提出的一种局部直连的网络。 DenseNet的优点可以总结为1)有效减轻梯度弥...

  • Models for CNN

    ResNet PreActResNet WildNet ResNeXT DenseNet Mobile Net

  • Pytorch DenseNet Fashion-Mnist

    pytorch 实现 DenseNet on Fashion-MNIST 运行过程

  • DenseNet详解

    一、概述 作为CVPR2017年的Best Paper, DenseNet 脱离了加深网络层数(ResNet)和加...

网友评论

      本文标题:DenseNet

      本文链接:https://www.haomeiwen.com/subject/agsxohtx.html