DenseNet---比ResNet更优模型
DenseNet
DenseNet模型的基本思路与ResNet一致,但它是前面所有层与后面层的密集连接(dense connection),它的名称也是由此而来。
如下图所示:
如上图所示,DenseNet每两个层之间都有直接的连接,因此该网络的直接连接个数为。
对于每一层,使用前面所有层的特征映射作为输入,并且其自身的特征映射作为所有后续层的输入。
DenseNet的优点: 缓解了消失梯度问题,加强了特征传播,鼓励特征重用,并大大减少了参数的数量,改进了整个网络的信息流和梯度,这使得它们易于训练(这点与ResNet差不多)。
DenseNet与ResNet的主要区别
ResNet是每个层与前面的某层(一般是2~3层)跳跃连接在一起,连接方式是通过元素级相加。
DenseNet中,每个层都会与前面所有层在channel(通道)维度上连接(concat)在一起,并作为下一层的输入。相比ResNet,这是一种密集连接。
Dense Block 和 Transition layer
先看下图:
DenseNet 网络中两个比较重要的部分就是 Dense Block 和 Transition layer, 上图中包括3个Dense Block 和 2个Transition layer。
Dense Block
DenseBlock模块包含很多层,每层的特征图大小相同,层与层之间采用密集连接方式(如图 Figure.1)。
在DenseBlock中,各层特征图大小一致,可以直接在 channel 维度上 concat。DenseBlock中的非线性组合函数 ,采用的是 BN+ReLU+3x3 Conv的结构,如图Figure.1。
与ResNet不同,所有DenseBlock中各个层卷积之后均输出 个特征图。 在DenseNet中称为 growth rate,是一个超参数。一般情况下使用较小的 (比如12),就可以得到较佳的性能。假定输入层的特征图的channel数为 ,那么 层输入的channel数为 。
由于后面层的输入会非常大,DenseBlock内部可以采用bottleneck层来减少计算量,主要是原有的结构中增加 1x1 Conv,即 BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,称为DenseNet-B结构。其中1x1 Conv得到 个特征图它起到的作用是降低特征数量,从而提升计算效率。
Transition layer
Transition layer连接两个相邻的DenseBlock,并且降低特征图大小。Transition layer结构为 BN+1x1 Conv+2x2 AvgPooling。
Transition layer可以起到压缩模型的作用。假定Transition layer的上层 DenseBlock 得到的特征图channels数为 ,Transition层可以产生 个输出特征图,其中 是压缩系数(compression rate)。当 时,特征个数经过Transition layer 没有变化,即无压缩,而当压缩系数 时,这种结构称为DenseNet-C,文中使用 。对于使用bottleneck层和压缩系数 的Transition layer组合的结构称为DenseNet-BC。