文章是CVPR2017的oral。论文中提出的DenseNet主要还是和ResNet及Inception网络做对比,思想上有借鉴,但却是全新的结构,网络结构并不复杂,却非常有效,在CIFAR指标上全面超越ResNet。DenseNet论文中本身引入太多公式,所以仅对其进行总结。作者则是从feature入手,通过对feature的极致利用达到更好的效果和更少的参数。

下图是DenseNet的主体框架(在每个Dense Block内部采用了密集连接,而在相邻的Dense Block之间采用的时Conv+Pool的方式)。

dense层 深度学习 densenet算法_计算机视觉

这个图中的k=32,表示每个dense block中每层输出的feature map个数。实验表明小的k可以有更好的效果。每个dense block的3*3卷积前面都包含了一个1*1的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征。

创新点:

1、Dense Block,Res Block的密集连接升级版

基础结构为Res Block在每一个Dense Block中,任何两层之间都有直接的连接。通过密集连接,缓解梯度消失问题,加强特征传播,鼓励特征复用,极大的减少了参数量。

dense层 深度学习 densenet算法_desnet_02

ResNet的Residual Block:

DenseNet的Dense Block(一个5层(L=5)的Dense Block,增长率(growth rate k=4))。

dense层 深度学习 densenet算法_resnet_03

2、将维或降采处理上改进

在特征图数量或尺寸不匹配的问题上:

ResNet采用1x1的Conv来调整特征图数量、零填充解决尺寸问题;

DenseNe是在两个Dense Block之间使用Batch+1x1Conv、2x2AvgPool作为transition layer的方式来匹配特征图的尺寸。

这样就充分利用了学习的特征图,而不会使用零填充来增加不必要的外在噪声,或者使用1x1Conv+stride=2来采样已学习到的特征(stride=2会丢失部分学习的特征)。

密集连接提高Dense Block之间的特征提取和传递,并注意到下采样过程中额特征丢失问题。

3、DenseNet的不同变体

1)DenseNet-A:在每个Dense Block中,使用BN-ReLU-Conv(3x3)来运算,transiton layer使用BN-Conv(1x1)-AvgPOOL(2x2);

2)DenseNet-B:在每个Dense Block中,采用Bottleneck layers,使用BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)来运算,这样能减少运算量,在Conv(1x1)中,产生4×k个特征图,在Conv(3x3)中,产生k个特征图。transiton layer使用BN-Conv(1x1)-AvgPOOL(2x2);

3)DenseNet-C:为了进一步提高模型紧密度,Dense Block中的操作使用DenseNet-B不变,当Dense Block产生m个特征图时,在transiton layer使用BN-Conv(1x1)-AvgPOOL(2x2)产生[θm]特征图(0<θ≤1)。作者在实验中使用θ=0.5;

4)DenseNet-BC:在Dense Block和transition layer中,都使用θ来减少输出的特征图数量。

4、DenseNet模型结构

k=32。

dense层 深度学习 densenet算法_resnet_04

5、DenseNet的优点

密集连接本身增加了网络的参数量和计算量。所以在DenseNet中特征通道的维度都相对较小,同时给出一个参数K调整通道维度。

梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信息在很多层之间传递导致的,而现在这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。

另外作者还观察到这种dense connection有正则化的效果,对于过拟合有一定的抑制作用,主要是因为参数减少了,所以过拟合现象减轻。

总结起来就是:减轻了vanishing-gradient(梯度消失),加强了feature的传递、更有效地利用了feature、一定程度上较少了参数数量。