DenseNet

1、网络结构(CVPR2017最佳论文)

    与Inception系列和ResNet网络不通,Inception网络主要是从网络的宽度方面改进网络的结构从而提高网络的表达能力,而ResNet主要是从网络的深度方面改进网络的结构来提高表达能力,而DenseNet则是通过特征图重用的方式来探索网络的潜能。DenseNet让网络的每一层的输入变成所有前面层的叠加(concat),然后把它的特征图传递给所有接下来的网络层。传统的CNN如果有L层则有L个连接,而DenseNet如果有L层,则有1/2 L(L+1)个连接,如下图所示:

                                          DenseNet_第1张图片

    用公式来表示的话,ResNet可以用公式表示为:

                                              

    而DenseNet用公式表示则为:

                                         

    参照ResNet v2的设计,其中H()函数由 BN + ReLU + 3*3 Conv 组成。此外,由于当特征图的尺寸发生变化时,公式(2)中的concat操作是不可行的。卷积网络中一个关键的部分是下采样层,它用来改变特征图的大小。为了使得我们网络的下采样更便利,我们把网络分解为多个Dense Block,如下图所示。我们把介于两个Dense Block之间的网络层称为转换层,它用来卷积和池化。转换层由 BN + 1*1 Conv + 2*2 Avg pooling 组成。    

    DenseNet_第2张图片

    此外,如果每个H()函数产生k个特征图,则第l层有 k0 + k*(l - 1)个输入特征图,其中k0是输入层的通道数。DenseNet和现在的网络的一个重要区别是DenseNet的网络层很窄,比如k = 12。我们把超参数k称为网络的增长率,增长率调节每层的网络对整个网络贡献多少新信息。尽管每个网络层值输出k个特征图,但是它的输入会非常多。根据ResNet,可以在3*3的卷积之前使用1*1的卷积来减少输入的特征图数量,从而提高计算效率。因此我们在网络中使用了1*1的卷积,我们把这个变种称为Dense-Net-B,一个网络层则由 BN - ReLU - Conv(1*1) - BN - ReLU - Conv(3*3) 组成,我们把这个网络层称为Bottleneck layers,其中每个1*1的卷积生成4k个特征图。

    为了进一步改善模型的性能,我们可以在转换层进一步减少特征图的数量。假设Dense Block有m个特征图,我们让接下来的转换层生成个特征图,其中,我们把的变种称为DenseNet-C,在我们的实验中,我们设置。当同时使用Bottleneck layer和时,我们把这个变种称为DenseNet-BC。整个DenseNet的网络结构如下:

        DenseNet_第3张图片

      这个网络是为ImageNet设计的,增长率k = 32。它有4Dense Block,初始的卷积层为7*7的步长为2的卷积,它生成的特征图为2k,即64个特征图,而其它层的输出结果都遵循k的设定,1*1输出4k,3*3的输出k。表中的“conv”表示:BN - ReLU - Conv序列。

2、实验结果

    实验是基于ILSVRC2012做的,采用和ResNet相同的数据增强方式,在测试是采用single-crop和10-crop的方式,在验证集上测试了我们的结果。

  DenseNet_第4张图片

3、参考

DenseNet源码和预训练模型(caffe):https://github.com/shicai/DenseNet-Caffe

论文:《Densely Connected Convolutional Networks》

你可能感兴趣的:(Classification,Networks)