DenseNet: Densely Connected Convolutional Networks

DenseNet: Densely Connected Convolutional Networks
Gao Huang
Cornell University, Facebook AI Research

近期看的几篇行人检测的论文都是利用ResNet作为基网,并将后续几个res block的输出连接起来作为最终分类用的特征。这篇DenseNet也是一样的思路。应该可以替代行人检测中的ResNet。


1. Introduction

近年来CNN不断变深,出现了一个问题:因为输入的信息以及梯度要经过很多层,它们可能会在网络两端消失。近期许多研究致力于这一问题。ResNet和Highway Network通过一致性连接进行短路传输。Stochastic depth通过在训练时随机移除一些层来缩短ResNet,以允许更好的信息及梯度的流动。FractalNet重复地将多个平行层序列与不同数量的卷积块合并,以获得更大的名义上的深度,同时在网络中保留很多较短的路径。这些方法五花八门,但都有一个关键特质:从较早的层向较晚的层进行短连接。
图1

本论文中,我们提炼出一个简单的连接模式:为了保证网络中最大的信息流动,我们将所有层直接连起来(需要匹配特征图大小)。所有层都会接收来自所有之前层的额外输入,并将自己的特征图作为后续层的输入,见图1。我们不像ResNet那样把它们加起来,而是连接起来。这样第l层就有由所有之前的卷积块所产生的l个输入。它自己的特征图传输到所有剩余的L-l层。在一个L层的网络中引入了$\frac {L(L+1)} 2$个连接,而不再是L。

一个反直觉的事情是DenseNet相比传统网络,参数更少。传统前向传播结果可以看做有状态的算法,从一层向一层传输。每层都从前一层获得状态,并向后输出。它改变了状态,并保留了需要的信息。ResNet通过一致性连接显式地进行了信息保留。这使ResNet的状态类似RNN(unrolled),但参数数量更多,因为每层都有自己的权重。我们提出的架构显式地区分网络输入和被保留下的信息。它的层非常窄(每层12个核),仅向网络的“collective knowledge”中添加很少的特征图,并保持剩余特征图不变。最终的分类器基于整个网络的特征图进行决策。

除了参数数量的优势,DenseNet还能帮助信息和梯度在网络中流动,更易训练。每层都能直接访问原始输入信号和最终loss的梯度,导致了一个implicit deep supervision。而且我们还观察到密集连接具有正则化作用。

3. DenseNet

假设一张图片$x_0$传入一个L层的网络,每层进行一个非线性变换$H_l(\cdot)$。它可以是多个操作的组合函数,如BN,ReLU,Pooling或Conv。我们将第l层的输出记做$x_l$。

ResNets. 传统卷积网络将第l层的输出输入到第l+1层,即$x_l = H_l(x_{l-1})$。ResNet加入了短路连接:

ResNet的一个优势即是梯度能从短路连接直接流向上一层。但$H_l$的输出与短路连接进行了求和,也许会阻碍网络中的信息流动。

图2

Dense connectivity. 图2解释了DenseNet的结构。因此第l层接收之前的所有层的特征图$x_0,…,x_{l-1}$作为输入:

为了实现简便,我们将它们连接为一个tensor。

Composite function. 被[12]所启发,我们将$H_l(\cdot)$定义为组合函数:BN、ReLU和一个$3\times 3$卷积。

Pooling layers. 当特征图的尺寸变化时,等式2中的连接操作就不可行了。但卷积网络中的一个必要部分就是下采样层,改变特征图的尺寸。为了方便我们架构中的下采样,我们将网络划分为多个密集连接的dense block,如图2。我们将块间的层称为过渡层transition,进行卷积和池化,包括一个BN,一个$1\times1$的卷积和一个$2\times2$的平均池化。

Growth rate. 如果每个$H_l(\cdot)$函数产生k个特征图,则它有$k_0 + k \times (l-1)$个输入特征图。$k_0$是输入层的通道数。DenseNet与其它网络一个重要区别就是它可以很窄,如k = 12。我们把超参数k称为网络的growth rate。章节4里证明了相对小的增长率就足够获得SOTA的结果。

Bottleneck layers. 尽管每层仅产生k个特征图,它们的输入通常更多。[37, 11]已注意到在每个$3\times3$卷积前的被称作bottleneck的$1\times1$卷积层能降低输入特征图的数量,提升计算效率。我们发现这一设计在我们网络中非常有效,因此我们设计了DenseNet-B,其$H_l$函数为$BN-ReLU-Conv(1\times1)-BN-ReLU-Conv(3\times3)$。实验中,我们让每个$1\times1$层输出4k个特征图。

Compression. 为了进一步提升模型紧密度,我们可以降低过渡层的特征图数量。如果一个dense block有m个特征图,我们让后续的过渡层生成$\lfloor \theta m \rfloor$个特征图,其中$0 \lt \theta \le 1$是压缩因子。当它为1,越过过渡层的特征图数量不会改变。我们将小于1的网络称为DenseNet-C,$\theta = 0.5$。同时使用Bottleneck和压缩的网络称为DenseNet-BC。

Implementation Details. DenseNet有3个Dense block,每个的层数相等。第一个block前有一个输出为16通道的卷积层。所有$3\times3$的卷积层都进行了1像素的zero-padding,来保持特征图尺寸的不变。我们使用$1\times1$卷积与$2\times2$pooling来作为过渡层。最后进行了一个global average池化,并使用softmax分类器输出结果。三个block中的特征图尺寸分别为32,16,8。我们实验了多种结构,其L和k分别为(40,12),(100,12),(100,24)。对于DenseNet-BC,值为(100,12),(250,24),(190,40)

Alt text

4. Experiments

表2
表3、图3

5. Discussion

表面上看,DenseNet与ResNet非常像:公式1、2的区别只是用连接替代了求和。但这一改动的蕴涵导致了两个网络架构巨大的不同。

Model compactness. 作为输入连接的直接结果,网络中的每一层学习到的特征图都能被后续所有层使用。这在整个网络中鼓励特征重用,得到了更紧凑的模型。

图4

图4中的左边两张展现了DenseNet与ResNet的参数效率。DenseNet-BC是参数效率最高的。在同样的准确率下,仅需ResNet的1/3的参数。图4最右显示,仅0.8M可训练的参数的DenseNet-BC与有10.2M参数、1001层的ResNet精度相当。

Implicit Deep Supervision. 一个解释就是每层都从更短的连接中获得了loss函数的监管。可以把DenseNet理解为一种“深度监管”。这一好处已被deeply-supervised net(DSN)所验证,该架构中每个hidden layer都有分类器,强迫中间层学到有识别力的特征。

DenseNet隐式地实施了类似的深度监管,一个分类器对网络所有层进行直接监管,间隔最多2、3个过渡层。但DenseNet的loss函数和梯度明显简单得多:各层共享同一个loss函数。

Stochastic vs. deterministic connection. stochastic depth网络的随机drop有可能得到类似DenseNet的结构。

图5

Feature Reuse. DenseNet允许所有层获得之前层的特征图(有时需要经过过渡层)。我们进行了实验来观察训练后的网络是否利用了这一优势。对一个block钟的每层l,我们计算了它对输入层s的平均权重。图5是3个block的热图。卷积层的平均权重体现了它对之前层的依赖程度。(l,s)坐标处的红色说明第l层对第前s层的特征图依赖大:

  1. 同一block中的所有层的权重遍布其许多输入。这说明一个block中的较早层提取到的特征被较深的层直接使用。
  2. 过渡层的权重同样遍布于之前block的所有层中,说明信息能从网络第一层通过少数迂回流到最后一层。
  3. 第2、3个block中的所有层都给与过渡层的输出最少的权重(第一行),说明过渡层输出了很多多余特征。这与DenseNet-BC的结果一致,它正是压缩了这些输出。
  4. 尽管最终分类层(图中最右列)权重遍布整个block,但明显集中于最终的特征图,说明网络后期提供了一些更high-level的特征。