本文是CVPR-2017-best paper之一,在ResNet基础上进一步改变CNN网络连接结构,实现State-of-the-art的效果。论文的想法很值得借鉴。大神还无私的给出了代码实现:
https://github.com/liuzhuang13/DenseNet.
1.Introduction
介绍了CNN的发展,网络层数变多后出现训练梯度消失的问题,之前大名鼎鼎的ResNet通过改变网络连接结构达到了SOTA,让人们认识到对网络结构做简单调整能对网路性能带来很大的提升。DenseNet将每一层都与其后的所有层连接,得到更好的information Flow。同时指出了相比较ResNet将特征图相加,DenseNet是进行连接(in contrast to ResNets, we never combine features throughsummation before they are passed into a layer; instead,we combine features byconcatenating them.)。
2.Related Work
提到了Highway Networks,Stochasticdepth,GoogleNet,Deeply Supervised Network等几种激发DenseNet灵感的网络结构,指出DenseNet主要优势在于挖掘特征图的重复使用的潜力。
3.DenseNet
第三部分是文章核心,介绍DenseNet的结构。
其中Dense Block体现了Dense的意义。注意从第一个图可以看出,当前层只给同一个Dense block里在其后的层输入,而不是给后面所有层输入,而且不容的Denseblock之间没有全连接。上图中x表示层,H表示操作(BN+Relu+Conv)。
(1)Pooling
在dense连接时,为了解决特征图尺寸不一致问题,将网络划分为多个dense block。同时在不同的dense block之间增加transition layers(BN,1*1Conv)
(2)Growth Rate
由于dense连接,特征图数量增加,为了控制数据量,定义了Growth Rate,如上图K=4,所有四个特征图。
(3)bottleneckLayer
每层产生K个特征图,作者觉得还需要压缩,引入1*1*n的卷积层将block中的特征图数量降到n(DenseNet-B)。
(4)Compression
为了进一步压缩特征图,通过在dense block里面用bottleneck layer压缩,同时在transition layer中引入reduce参数(0<reduce<1)进一步减少( DenseNet-BC)
4.文章值得注意的思路:
(1)dense connections have a regularizing effect, which reduces overfitting,即dense connections作用相当于正则项,可以拿来做正则化使用,这个可能会是新的研究思路。
(2)DenseNet主线是如何提升 information flow,所以提出了一个大胆的想法,就是让每一层之间都可以直接的联系(仅在一个dense block里,不同 dense block是不行的!)。
(3) 从perceptual field来看,浅层和深层的 field 可以更自由的组合,会使得模型的结果更加 robust。从 wide-network 来看, DenseNet 看以被看作一个真正的宽网络,在训练时会有比 ResNet更稳定的梯度,收敛速度自然更好。
5.缺陷
内存占用量巨大