DenseNet的一些个人理解

最近看神经网络的发展历程看到了这个,写在这里方便以后查看.

DenseNet主要结构包括Dense Block, Transition Layer 和最后的fully connected layers.

Dense Block 是一种具有紧密连接性质的卷积神经网络,该神经网络中的任何两层都有直接连接,即网络中每一层的输入都是前面所有层输出的并集,而这一层学习到的特征也会被直接传递到后面的所有层作为输入。假设输入为一个图片,经过一个L层的神经网络,其中第i层的非线性变换记为

, 它可以是多种函数操作的累加如BN、ReLU、Pooling或Conv等。第 i 层的特征输出 记。传统卷积前馈神经网络将第 i 层的输出作为 i+1 层的输入,可以写作  ResNet 增加了旁路连接,可以写作。ResNet 的一个最主要的优势便是梯度 可以流经恒等函数来到达靠前的层。第i层的输入不仅与i-1层的输出相关,还有所有之前层的输出有关。

记作:,其中[]代表concatenation(拼接),既将层的所有输出feature map按Channel组合在一起。在传统的卷积神经网络中,如果你有L层,那么就会有L个连接,但是在DenseNet中,会有L(L+1)/2个连接。这里所用到的非线性变换H为BN+ReLU+3x3 Conv的组合,但是出于减少参数的目的,一般会先加一个1x1的卷积来减少参数量。所以我们的非线性组合函数就变成了BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv的结构。这种紧密连接仅仅存在于同一个Dense Block中,不同的Dense Block是没有这种紧密连接的。

DenseNet最重要的贡献就是这种紧密连接的卷积神经网络,具体体现在以下4个方面:

(1)缓解了梯度消失的问题。

(2)加强了特征的传播,鼓励重复利用特征。

(3)极大地减少了参数个数。

(4)具有正则化的效果,即使在较少的训练集上,也可以减少过拟合的现象。 

DenseNet的一些个人理解_第1张图片

Dense Block 示意图 

 而每两个Dense Block之间使用一个Transition模块来进行下采样过渡连接。每一个DenseBlock模块的输出维度是很大的,假设一个L层的Dense Block模块,假设其中已经加入了Bottleneck 单元,那么输出的维度为第1层的维度+第2层的维度+第3层的维度+…+第L层的维度,加了Bottleneck单元后每层的输出维度为4K,那么最终Dense Block模块的输出维度为4K*L。随着层数L的增加,最终输出的feature map的维度也是一个很大的数。为了解决这个问题,在transition layer模块中加入了1*1卷积做降维。如图1.9所示Transition Block由一个卷积和一个pooling组成。它的最大作用就是降维(池化)。

因为Transition之后的数据是三维的,所以需要flatten之后才能连接全连接层,全连接层的作用是用于分类,因为三维输出,不能直接作为分类结果。Flatten是通过卷积操作实现。

DenseNet的一些个人理解_第2张图片

 从上图我们可以看出,我们用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer的一个神经元的输出,这个输出就是一个值,一个矩阵就变成了一个值,最后再加上一个输出层,神经元个数取类的个数,就能实现基于DenseNet的分类模型。

 

 

你可能感兴趣的:(DenseNet,深度学习,cnn,人工智能)