
5层致密块体,增长率k = 4。每一层都将所有前面的特征图作为输入。

传统的卷积前馈网络将第 l l l 层的输出作为输入连接到第 ( l + 1 ) t h (l+1)^{th} (l+1)th层[Imagenet classification with deep convolutional neural networks],这产生了以下层转换: x l = H l ( x l — 1 ) x_l= H_l(x_{l—1}) xl=Hl(xl—1)。ResNets添加了一个跳跃连接,它使用一个恒等映射函数绕过非线性变换:
ResNets的一个优点是梯度可以直接通过单位函数从后面的层流到前面的层。然而,恒等函数和 H l H_l Hl的输出通过求和来组合,这可能阻碍网络中的信息流。
为了进一步改善各层之间的信息流,本文提出了一种不同的连接模式:引入了从任何一层到所有后续层的直接连接。下图示意性地说明了最终DenseNet的布局。因此,第 l l l 层接收所有前面层的特征映射, x 0 , . . . x l — 1 x_0,...x_{l—1} x0,...xl—1,作为输入:
其中 [ x 0 , x 1 , . . . , x l − 1 ] [x_0,x_1,...,x_{l-1}] [x0,x1,...,xl−1]指的是在层 0 , . . . , l − 1 0,..., l−1 0,...,l−1.由于其密集的连通性,本文将这种网络架构称为密集卷积网络(DenseNet)。为了便于实现,本文将等式(2)中 H l ( ⋅ ) H_l(·) Hl(⋅)的多个输入连接起来转化为单个张量。

A deep DenseNet with three dense blocks.
两个相邻块之间的层被称为过渡层,并通过卷积和池化来改变特征地图的大小。

虽然每一层只产生k个输出特征图,但它通常有更多的输入。在[Rethinking the inception architecture for computer vision,Deep residual learning for image recognition]中已经指出,可以在每个3×3卷积之前引入1×1卷积作为瓶颈层,以减少输入特征图的数量,从而提高计算效率。本文发现这种设计对DenseNet特别有效,将本文的网络称为具有这样一个瓶颈层的网络,即BN-ReLU-conv(1× 1)-BN-ReLU-conv(3×3)版本的 H l H_l Hl,称为DenseNet-B。在本文的实验中,让每个1×1卷积产生4k特征图。
Dense Block是DenseNet的一个基本模块,这里从一般的神经网络说起:

上图是标准神经网络的一个图,输入和输出的公式是 X l = H l ( X l − 1 ) X_l = H_l(X_{l-1}) Xl=Hl(Xl−1),其中 H l H_l Hl 是一个组合函数,通常包括BN、ReLU、Pooling、Conv操作, X l − 1 X_{l-1} Xl−1是第 l 层输入的特征图, X l X_{l} Xl是第 l 层输出的特征图。
而对于DenseNet,则是采用跨通道concat的形式来连接,用公式来说则是 X_l = H l ( X 0 , X 1 , . . . , X l − 1 ) H_l(X_0,X_1,...,X_{l-1}) Hl(X0,X1,...,Xl−1),这里要注意所有的层的输入都来源于前面所有层在channel维度的concat。

在刚才Dense Block中的非线性组合函数是指BN+ReLU+3x3 Conv的组合,尽管每前进一层,只产生K张新特征图,但还是嫌多,于是在进行3×3卷积之前先用一个 1×1卷积将输入的特征图个数降低到 4*k,发现这个设计对于DenseNet来说特别有效。所以本文的非线性组合函数就变成了BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv的结构,由此形成的网络结构我们称之为DenseNet-B。

在除ImageNet之外的所有数据集上,本文实验中使用的DenseNet有三个密集块,每个块都有相同数量的层。在进入第一个密集块之前,对输入图像执行与16个(或DenseNet-BC增长率的两倍)输出通道的卷积。对于核大小为3×3的卷积层,输入的每一边都用一个像素进行零填充,以保持特征图大小固定(same padding)。
使用1×1卷积,然后使用2×2平均池作为两个相邻密集块之间的过渡层。在最后一个密集块的末尾,执行全局平均池化,然后附加softmax分类器。三个密集块中的特征图大小分别为32× 32、16×16和8×8。本文用基本的DenseNet结构进行实验,配置为{L = 40,k = 12}、{L = 100,k = 12}和{L = 100,k = 24}。对于DenseNetBC,评估了具有配置{L = 100,k = 12}、{L= 250,k = 24}和{L= 190,k = 40}的网络。
在ImageNet上的实验中,本文在224×224的输入图像上使用具有4个密集块的DenseNet-BC结构。初始卷积层包括大小为7×7、步幅为2的2*k个卷积;所有其他层中的特征映射的数量也遵循设置k。本文在ImageNet上使用的确切网络配置如下表所示。

ImageNet的DenseNet架构。所有网络的增长率都是k = 32。注意,表中所示的每个“conv”层对应于BN-ReLU-Conv序列。
所有网络都使用随机梯度下降(SGD)进行训练。在CIFAR和SVHN上,分别使用批量大小64训练300和40个epoch。初始学习率设置为0.1,并在训练时段总数的50%和75%时除以10。在ImageNet上,本文训练90个epoch的模型,批量大小为256。学习率最初设置为0.1,在第30和60阶段降低10倍。注意,DenseNet的简单实现可能包含内存低效。为了减少GPU上的内存消耗,请参阅关于DenseNets高效内存实现的技术报告[Memory-efficient implementation of densenets]。
根据[Training and investigating residual nets],使用10e−4的权重衰减,Nesterov动量为0.9,无阻尼。采用引入的权重初始化。对于没有数据扩充的三个数据集,即C10、C100和SVHN,在每个卷积层(第一个除外)之后添加一个dropout层,并将dropout率设置为0.2。对于每个任务和模型设置,只评估一次测试错误。
用不同的深度L和增长率k训练DenseNet。下表显示了CIFAR和SVHN的主要结果。为了突出总体趋势,用粗体标记了所有优于现有最先进水平的结果,并用蓝色标记了总体最佳结果。

CIFAR和SVHN数据集的错误率(%)。k表示网络的增长率。超过所有竞争方法的结果是大胆的,而总体最佳结果是蓝色的。“+”表示标准数据扩充(转换和/或镜像)。∗ 表示自己运行的结果。
使用Dropout获得没有数据增强的DenseNet(C10、C100、SVHN)的所有结果。DenseNet在使用比ResNet更少的参数的同时实现了更低的错误率。如果没有数据扩充,DenseNet的性能会大大提高。
精确:最明显的趋势可能来自上表的最下面一行,这表明L=190和k=40的DenseNet BC在所有CIFAR数据集上均优于现有技术。其在C10+上的错误率为3.46%,在C100+上为17.18%,显著低于宽ResNet架构实现的错误率。
在C10和C100(没有数据扩充)上的最佳结果甚至更令人鼓舞:两者都比具有下降路径正则化的FractalNet低近30%。在SVHN上,L=100和k=24的DenseNet也超过了宽ResNet目前取得的最佳结果。然而,250层DenseNet BC并没有比其更短的同类产品进一步提高性能。这可以通过SVHN是一项相对容易的任务来解释,并且极深的模型可能会过度拟合到训练集。
容量:如果没有压缩层或瓶颈层,一般趋势是随着L和k的增加,DenseNet的性能会更好。将这主要归因于模型容量的相应增长。C10+和C100+柱最能说明这一点。在C10+上,随着参数数量从1.0M增加到27.2M,误差从5.24%下降到4.10%,最后下降到3.74%。在C100+上,观察到类似的趋势。这表明DenseNet可以利用更大和更深模型的更强大的代表性。它还表明,它们不会遭受过度拟合或残差网络的优化困难。
参数效率。上表中的结果表明,DenseNet比替代架构(特别是ResNets)更有效地利用参数。在过渡层具有瓶颈结构和尺寸减小的DenseNetBC是特别有效的参数。
例如,本文的250层模型只有15.3M个参数,但它始终优于其他模型,例如FractalNet和Wide ResNets,这些模型的参数超过30M。本文还强调,L=100和k=12的DenseNet BC与1001层预激活ResNet相比,使用更少90%的参数,实现了相当的性能(例如,C10+上的4.51%对4.62%的误差,C100+上的22.27%对22.71%的误差)。
下图(右面板)显示了C10+上这两个网络的训练损失和测试错误。1001层深的ResNet收敛到较低的训练损失值,但具有类似的测试误差。我们将在下面更详细地分析这种影响。

左图:DenseNet变化之间C10+的参数效率比较。中间:DenseNet BC和(预激活)ResNets之间的参数效率比较。DenseNet BC需要约为ResNet的1/3的参数才能达到可比的精度。右图:1001层预激活ResNet(参数超过10M)和100层DenseNet(参数仅为0.8M)的训练和测试曲线。
过度拟合:更有效地使用参数的一个积极副作用是DenseNet不太容易过度拟合。本文观察到,在没有数据扩充的数据集上,DenseNet架构比先前工作的改进尤为显著。在C10上,改进表示误差从7.33%相对减少了29%至5.19%。在C100上,减少约30%,从28.20%降至19.64%。
在本文的实验中,观察到了单个设置中的潜在过度拟合:在C10上,通过将k=12增加到k=24产生的参数的4倍增长导致误差从5.77%适度增加到5.83%。DenseNet BC瓶颈和压缩层似乎是应对这一趋势的有效方法。
在ImageNet分类任务中评估了具有不同深度和增长率的DenseNet BC,并将其与最先进的ResNet架构进行了比较。为了确保两种体系结构之间的公平比较,在[Training and investigating residual nets]之前采用ResNet公开可用的Torch实现,消除了所有其他因素,如数据预处理和优化设置的差异。
只需将ResNet模型替换为DenseNetBC网络,并保持所有实验设置与ResNet使用的设置完全相同。

ImageNet验证集的前1和前5错误率,单作物/10作物测试。
在上表中报告了ImageNet上DenseNet的单作物和10作物验证错误。下图显示了DenseNet和ResNets的单作物前1位验证错误与参数数量(左)和FLOP(右)的关系。图中所示的结果表明,DenseNet的性能与最先进的ResNets相当,同时需要显著更少的参数和计算才能实现可比的性能。

ImageNet验证数据集上的DenseNet和ResNets top 1错误率(单作物测试)与测试期间学习的参数(左)和FLOP(右)的比较。
例如,具有20M参数的DenseNet-201模型与具有超过40M参数的101层ResNet模型产生类似的验证误差。从右侧面板可以观察到类似的趋势,该面板将验证错误绘制为FLOP数量的函数:DenseNet需要与ResNet-50相同的计算量,而ResNet-101需要两倍的计算量。
值得注意的是,本文的实验设置暗示使用针对ResNets而非DenseNet优化的超参数设置。可以想象,更广泛的超参数搜索可以进一步提高ImageNet上DenseNet的性能。
DenseNet-121由121层权重层组成,其中4个Dense block,共计2×(6+12+24+16) = 116层权重,加上初始输入的1卷积层+3过渡层+最后输出的全连接层,共计121层;
训练时采用了DenseNet-BC结构,压缩因子0.5,增长率k = 32;
初始卷积层有2k个通道数,经过7×7卷积将224×224的输入图片缩减至112×112;Denseblock块由layer堆叠而成,layer的尺寸都相同:1×1+3×3的两层conv(每层conv = BN+ReLU+Conv);Denseblock间由过渡层构成,过渡层通过1×1卷积层来减小通道数,并使用步幅为2的平均池化层减半高和宽。最后经过全局平均池化 + 全连接层的1000路softmax得到输出。
从表面上看,DenseNet与ResNets非常相似:等式(2)与等式(1)的不同之处仅在于Hl(·)的输入是串联的,而不是求和的。然而,这一看似微小的修改所带来的影响导致了两种网络架构的显著不同的行为。
更强的梯度流动
DenseNet可以说是一种隐式的强监督模式,因为每一层都建立起了与前面层的连接,误差信号可以很容易地传播到较早的层,所以较早的层可以从最终分类层获得直接监管(监督)。

能够减少参数总量

保存了低维度的特征

在标准的卷积网络中,最终输出只会利用提取最高层次的特征。

在DenseNet中,它使用了不同层次的特征,倾向于给出更平滑的决策边界。这也解释了为什么训练数据不足时DenseNet表现依旧良好。
DenseNet的不足在于由于需要进行多次Concatnate操作,数据需要被复制多次,显存容易增加得很快,需要一定的显存优化技术。另外,DenseNet是一种更为特殊的网络,ResNet则相对一般化一些,因此ResNet的应用范围更广泛。
作为输入串联的直接结果,所有后续层都可以访问由任何DenseNet层学习的特征图。这鼓励了整个网络中的功能重用,并导致了更紧凑的模型。
上上图中左侧的两幅图显示了一项实验的结果,该实验旨在比较DenseNet(左侧)和可比ResNet架构(中间)的所有变体的参数效率。在C10+上训练具有不同深度的多个小型网络,并将其测试精度绘制为网络参数的函数。
与其他流行的网络架构(如AlexNet或VGG net)相比,具有预激活的ResNets使用更少的参数,同时通常获得更好的结果。因此,将DenseNet(k=12)与此架构进行比较。DenseNet的训练设置与上一节中的相同。
该图显示,DenseNet BC始终是DenseNet的参数效率最高的变体。此外,为了达到相同的精度水平,DenseNet BC只需要ResNets(中间图)大约1/3的参数。该结果与在上图中展示的ImageNet上的结果一致。上上图中的右图显示,仅具有0.8M可训练参数的DenseNet BC能够实现与具有10.2M参数的1001层(预激活)ResNet相当的精度。
密集卷积网络精度提高的一种解释可能是,各个层通过较短的连接从损耗函数接收额外的监督。人们可以将DenseNet解释为执行某种“深度监督”。深度监督的好处以前已经在深度监督网络(DSN)中得到了证明,该网络在每个隐藏层上都附加了分类器,强制中间层学习辨别特征。
DenseNet以隐式方式执行类似的深度监管:网络顶部的单个分类器通过最多两个或三个过渡层向所有层提供直接监管。然而,由于在所有层之间共享相同的损失函数,DenseNet的损失函数和梯度基本上不那么复杂。
根据设计,DenseNet允许层访问其所有先前层的特征图(尽管有时通过过渡层)。我们进行了一项实验,以调查训练有素的网络是否利用了这一机会。首先在C10+上训练一个密度网,L=40,k=12。对于一个块内的每个卷积层,计算分配给与层s连接的平均(绝对)权重。下图显示了所有三个密度块的热图。平均绝对权重用作卷积层对其先前层的依赖性的替代。位置(',s)中的红点表示图层“平均而言,强烈使用了之前生成的s图层的特征图。从图中可以看出以下几点:
所有层将其权重分布在同一块中的多个输入上。这表明,早期层提取的特征实际上直接被同一密集区块的深层使用。
过渡层的权重还将其权重分布在前一个密集块内的所有层上,指示通过很少的间接从DenseNet的第一层到最后一层的信息流。
第二和第三密集块内的层一致地将最小权重分配给过渡层(三角形的顶行)的输出,表明过渡层输出许多冗余特征(平均权重较低)。这与DenseNet BC的强大结果一致,在那里,这些输出被压缩。
尽管最后的分类层(如右图所示)也使用了整个密集区块的权重,但似乎集中于最终的特征图,这表明网络中可能会产生一些更高级的特征。

训练的DenseNet中卷积层的平均绝对滤波器权重。像素(s,')的颜色编码将卷积层s与密集块内的’连接起来的权重的平均L1范数(通过输入特征图的数量归一化)。由黑色矩形突出显示的三列对应于两个过渡层和分类层。第一行对连接到密集块的输入层的权重进行编码。
本文提出了一种新的卷积网络架构,称之为密集卷积网络(DenseNet)。它引入了具有相同特征图大小的任意两个图层之间的直接连接。本文发现,DenseNet可以自然扩展到数百层,同时不存在优化困难。在本文的实验中,随着参数数量的增加,DenseNet趋向于在精度上产生一致的提高,而没有任何性能退化或过度拟合的迹象。
在多种设置下,它在几个竞争激烈的数据集上取得了最先进的结果。此外,DenseNet需要更少的参数和更少的计算来实现最先进的性能。由于本文在研究中采用了针对残差网络优化的超参数设置,本文认为,通过更详细地调整超参数和学习速率计划,可以进一步提高DenseNet的准确性。
在遵循简单的连接规则的同时,DenseNet自然地集成了身份映射、深度监管和多样化深度的属性。它们允许在整个网络中重复使用特征,因此可以学习更紧凑的模型,根据本文的实验,也可以学习更精确的模型。由于其紧凑的内部表示和减少的特征冗余,DenseNet可能是基于卷积特征的各种计算机视觉任务的良好特征提取器,例如[Deep manifold traversal,A neural algorithm of artistic style]。本文计划在未来的工作中与DenseNet一起研究这种功能转移。