DenseNet论文总结

本篇文章是CVPR2017的oral ,提出了DenseNet(Dense Convolutional Network)。此网络结构借鉴了Inception和ResNet的思想,效果非常好。最近几年网络结构一般沿着两个方向发展:要么更深(ResNet解决了网络更深梯度消失的问题);要么更宽(GoogleNet的Inception)。本文则是从feature入手,将feature的极致利用达到更好的效果和更少的参数

DenseNet有以下优点:

1. 减轻梯度消失

2. 加强feature传递

3. 更有效地利用feature

4. 减少了参数

在深度学习网络中,随着网络深度的增加,梯度消失的问题愈发明显。针对此问题,目前提出了很多解决方案,比如:Highway Networks、ResNet、stochastic depth等。这些方法都有一个明显的特征:create short paths from early layers to later layers 。作者也是借鉴了这个思路,在保证网络中层与层之间最大程度的信息传输的前提下,直接将所有层两两相连 。如下图所示:

在传统卷积神经网络中,假设有L层,那么就会有L个连接。而在DensNet中,则会有L(L+1)/2个连接。DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于这种dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。原文的一句话:Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision.直接解释了为什么这个网络的效果会很好。前面提到过梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信息在很多层之间传递导致的,而现在这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。 另外作者还观察到这种dense connection有正则化的效果 ,因此对于过拟合有一定的抑制作用。

Figure1给出了dense block的组成结构,下面给出DenseNet的整体结构,如下图所示:

Table1给出DenseNet在ImageNet上的详细设计,如下图所示:

这个表中的k=32,k=48中的k是growth rate,表示每个dense block中每层输出的feature map个数。为了避免网络变得很宽,作者都是采用较小的k,比如32这样,作者的实验也表明小的k可以有更好的效果。根据dense block的设计,后面几层可以得到前面所有层的输入,因此concat后的输入channel还是比较大的。另外这里每个dense block的3*3卷积前面都包含了一个1*1的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征。

ResNet vs DenseNet

这两个网络有本质的区别,从它们的公式就可以看出:

第一个公式是ResNet的。这里的l表示层,xl表示l层的输出,Hl表示一个非线性变换。所以对于ResNet而言,l层的输出是l-1层的输出加上对l-1层输出的非线性变换。

第二个公式是DenseNet的。[x0,x1,…,xl-1]表示将0到l-1层的输出feature map做concatenation。concatenation是做通道的合并,就像Inception那样。而前面ResNet是做值的相加,通道数是不变的。Hl包括BN,ReLU和3*3的卷积

参考:

论文:《densely connected convolutinal networks》