【论文】Densely Connected Convolutional Networks

论文题目: Densely Connected Convolutional Networks

作者: Gao Huang, Zhuang Liu, Laurens van der Maaten, Kilian Q. Weinberger

会议/时间:CVPR2017

链接: arXiv

论文目标

在CNN中,增加模型深度可以增加卷积层的感受野,从而提升CNN的性能,但是深度太大的CNN在训练的时候会出现梯度消失的问题。根据ResNet 残差网络的设计,通过添加短路链接可以使得比较深的网络更容易训练和收敛。

为了进一步融合不同尺度特征,本文提出的DenseNet模型通过添加稠密的短路链接可以使特征图得到充分的利用,增大梯度信息流,从而减少参数数量,提升模型的性能。通过稠密的短路连接,每一个卷积层都可以看作与输入的数据和最后的全连接层直接相连,从而得到充分的监督。

相关工作

在Highway Network中,首次引入了短路连接的思想,从而使得训练上百层的神经网络成为可能。在ResNet 残差网络中,通过短路连接,将每一个Residual Block的输入通过恒等映射直接连接到输出,实现了突破性的提升。在Stochastic Depth网络中训练的时候随机跳过了模型中的某些层,实际上也能取得非常不错的效果,这就证明在非常深的模型中有一些卷积层的存在其实是冗余的。

与上述模型不同的是,在GoogLeNet和FractalNet中使用了Inception结构增加模型宽度的方式来提升模型的性能。

其他的提升性能的思路包括:NIN(在卷积层中添加多层感知机提取丰富特征),DSN(使用一些分类器监督卷积的中间结果),DFN(将不同网络的中间层融合在一起)等。

本文方法

将多个卷积层组合得到Dense Block,其中每一个卷积层的输入都是之前所有层的输出按通道连接得到。即 $x_l = H_l([x_0, x_1, …, x_{l-1}])$。同时需要注意,每一个卷积层都是由带有bottleneck的混合卷积操作组成的,其中的混合卷积操作指BatchNorm + ReLU + Conv3x3组成,通道数为 $k$,bottleneck是指BatchNorm + ReLU + Conv1x1组成,通道数为 $4k$。这里的 $k$称为Growth Rate,即每通过一个卷积层,通道数都会增加 $k$个。

densenet-block.png

在每一个Dense Block之中的特征图大小是相同的,在相邻的DenseBlock之间引入Transition层,包括Conv1x1和Pooling2x2,其中的卷积操作用于压缩通道数量,防止通道数量无限制的增大,而池化操作用于压缩特征图数量。最终得到完整的DenseNet结构如下。

densenet-model2.png

在实验中提出的不同大小的模型结构如下:

densenet-structure.png

结果分析

模型在CIFAR、SVHN、ImageNet等任务上测试,结果与现有的SOTA模型相比,取得了比较大的提升。

densenet-vs-sota.png

重点比较了ResNet,证明了DenseNet使用更小的模型参数也能取得与ResNet相近甚至更好的效果,证明了之前提到了使用DenseNet可以减少模型参数的说法。

densenet-vs-resnet.png

需要注意的是,尽管DenseNet模型参数数量很少,但是由于包含稠密连接,最直接的实现在训练和优化的时候中间变量需要占用大量的显存,空间效率很低。因此本文的作者在另一篇文章1中提出了DenseNet的优化实现。

总结

使用稠密的短路连接,使得模型学到丰富的不同尺度的信息,使梯度信息的传播最大化,从而在减少参数数量的基础上提升模型的性能。


  1. G. Pleiss, D. Chen, G. Huang, T. Li, L. van der Maaten, and K. Q. Weinberger. Memory-efficient implementation of densenets. arXiv preprint arXiv:1707.06990, 2017. 5 ↩︎

Lei Yang
Lei Yang
PhD candidate

My research interests include visual speech recognition and semantics segmentation.