【深度学习】DenseNet论文阅读

Posted by ShawnD on November 23, 2020

Abstract

DenseNet在前馈神经网络中每层都连接到其它层。

普通网络L层网络有L条连接, DenseNet有L(L+1)/2条连接。

对于每一层,它前面层的特征都作为它的输入, 它的输出特征作为后面层的输入。

DenseNet有几大优势:

  • 减缓梯度消失
  • 加强特征传播
  • 促进特征复用
  • 大幅减少参数数量

Introduction

一个新的研究问题

当输入和梯度穿过多层网络后, 随着深度的增加, 它们到达网络的最后的时候消失了

提出一种新的结构:

  • 将所有层连接到其它层, 确保网络中层之间信息的最大化流动
  • 相比与ResNet, 没有通过求和的方式组合特征,而是通过拼接的方式组合特征

传统的网络和DenseNet:

  • 传统的网络可以看作带有状态的算法, 这种状态层与层之间传递。它改变了状态并且保留了所需要传递的信息。
  • DenseNet明确区分了添加到网络的信息和保留的信息
  • DenseNet很窄(比如每层只有12个卷积核), 仅增加一小部分特征到网络的联合知识, 并且保留原来的特征不变, 最终基于所有的特征分类器进行决策。

除了参数效率外, DenseNet的另一个优势是网络中信息和梯度的流动的提升, 这使得它们更容易训练:

  • 每一层都可以直接从loss函数中直接获取梯度
  • 而输入的原始信号,可以作为隐含的深层监督
  • 稠密连接有正则化的效果

Related Work

增加深度:

  • Highway Networks
  • ResNet
  • Stochastic depth
  • pre-activation ResNet

增加宽度:

  • GoogLeNet
  • 增加ResNet每层的卷积核数量
  • FractalNets

特征复用:

  • DenseNet
  • 相比于Inception也从不同层拼接特征, DenseNet更加简单更加有效

DenseNet

网络由L层组成,每层执行一个非线性变换H_l(·), H由BN、ReLU、Conv组成

ResNets:

\[x_l = H_l(x_{l-1}) + x_{l-1}\]

Dense connectivity:

\[x_l = H_l([x_0, x_1, ..., x_{l-1}])\]

Composite function: BN+ReLU+Conv

Pooling layers:

  • 将网络分成多个dense blocks
  • transition layers由BN和1x1卷积组成,其后是一个2x2的平均池化层

Growth rate:

  • 如果每个H_l产生k个特征, 那么l^{th}层有k_0 + k x (l - 1)个输入特征, 其中k_0是输入层的通道数量
  • DenseNet和现有的网络结构的一个重要不同是DenseNet有非常窄的层, 比如k=12, 我们令参数k表示growth rate
  • 相对小的growth rate是足够的, 对此的一个解释是, 每层都可以访问块中前面的特征, 因此可以访问网络的联合知识

Bottleneck layers:

  • 尽管每层仅产生k个输出特征,但是它仍然有很多输入
  • 在bottleneck层中在3x3卷积之前使用1x1卷积减小输入特征的维度
  • BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3) 叫做DenseNet-B

Compression:

  • 进一步提升模型的压缩, 在transition层减小特征的数量
  • dense block 包含 m 个特征, 让transition产生 $\theta_m$个输出特征, 其中0<$\theta$<1为压缩系数
  • 把$\theta$<1的DenseNet 叫做 DenseNet-C
  • 当同时使用bottleneck和transition layers的\theta<1时, 模型叫做DenseNet-BC

Implementation Details:

在其他数据集:

  • 除了ImageNet数据集, DenseNet实验使用的三个dense blocks, 它们有相等的层数
  • 在进入第一个dense block之前, 在输入图像上使用一个输出通道为16的卷积(或者对于DenseNet-BC两倍的增长率)
  • 每个卷积层的卷积核大小为3x3, padding为1, 使用zero-padding
  • 在两个dense block之间使用1x1卷积紧跟着一个2x2平均池化作为transition layers
  • 在最后一个dense block之后, 使用了一个全局平均池化和一个softmax分类器
  • 三个dense blocks的特征图的大小尺度分别是32x32, 16x16, 8x8
  • DenseNet结构的配置为{L=40, k=12}, {L=100, k=12}, {L=100, k=24}
  • DenseNet-BC, 网络的配置为{L=250, k=12}, {L=250, k=24}, {L=190, k=40}

在ImageNet数据集上:

  • 在ImageNet数据集上, DenseNet-BC结构为四个dense block, 224x224输入图像
  • 初始层,卷积核数量为2k, 卷积核大小为7x7, 步长为2
  • 所有其他层的特征数量为k

Experiments

Training:

  • 优化器SGD
  • CIFAR10和SVHN使用batchsize 64分别训练300和40个epochs
  • 初始学习率为0.1, 在epochs为50%和75%的时候除以10
  • ImageNet: 训练90epochs, batchsize 256, 初始学习率0.1, 在30epochs和60epochs除以10
  • DenseNet的原始执行可能会有内存效率问题
  • 权重衰减0.0001, 动量0.9
  • 在CIFAR10、CIFAR100、SVHN上无数据增强
  • 在每个卷积层后, 除了第一层,都有dropout层,dropout rate为0.2

Classification Results on CIFAR and SVHN:

Accuracy:

  • 在所有CIFAR数据集上, DenseNet-BC L=190, k=40超过了所有SOTA
  • 在C10上3.46%的错误率和在C100上17.18%的错误率比wide ResNet结构显著地低
  • 在C10和C100上(无数据增强)最好的结果比带有drop-path的FractalNet将近低30%
  • 在SVHN上, 加上dropout, DenseNet L=100, k=24 超过了取得最好成绩的wide ResNet
  • 250层的DenseNet-BC不会继续提升性能,这说明SVHN是一个相对容易的任务, 容易过拟合

Capacity: 没有compression或者bottleneck层, DenseNet随着L和k的增加表现变好。他们将此归因于模型容量的增长。

Parameter Efficiency: DenseNet-BC 的 bottleneck结构 和 transition 层的维度减少 特别使得参数更有效率。

Overfitting: 更有效地利用参数意味着DenseNet更不容易过拟合

Classification Results on ImageNet : DenseNet201有20M参数产生与超过40M参数的101层ResNet相似的验证错误!

DenseNet