DenseNet是一种密集练级的卷积神经网络。
首先,作者在摘要中概述了DenseNet的优点:
虽然卷积神经网络早在20年前就被提出,但是,直到近期研究学者们才成功的训练了非常深的网络。这主要得益于网络结构的优化和计算机硬件的发展。计算机硬件的发展为其提供了足够的算力;网络结构的优化缓解了网络加深出现的梯度消失问题。
1)ResNet和HightWay Net使用旁路连接增强梯度的传播
2)Stochastic depth在训练过程中随机丢弃网络层来达到缩短ResNet的目的。
以上的方法有个共同的特点:都建立了短连接
前人在优化网络结构时,有个共同点是都建立了短连接,作者将短连接做到了极致,所有具有相同尺寸特征图的网络层都直接与其他层连接。这进一步增强了信息/梯度在整个网络中的流动。如下图所示。并且与Res的合并方式不同,使用concatenate通道合并的方式代替求和的方式。
DenseNet与ResNet和传统模型前向传播方式的对比
主要由Dense Block和Transition layers组成。
1)Dense block:
是DenseNet的核心模块。一个Dense Block中所有特征图尺寸相同。每层与其他层都直接连接
Growth Rate:每层的卷积核个数。DenseNet的网络都非常窄,也就是卷积核的个数都很少。
Bottleneck layers:虽然每层网络的卷积核很少(输出信息很少),但是每层的输入信息非常多(因为其输入包含其前面所有层的特征图)。为降低计算量,使用1x1卷积作为bottleneck layers减少特征图的数量。然后进行3X3卷积操作。
2)Transition layers 过渡层
由于Dense block的通道合并concatrnate操作要求特征图尺寸相同,所以在Dense block中不会进行下采样的操作。但下采样是CNN中必不可少的一步,可有效减少计算量。为此每两个Dende block之间增加Transition layers。
transition laysrs包含三个部分:Batch Normalization,1x1卷积,2x2平均池化
1)更少的参数量
直观上,DenseNet特征图尺寸相同的层都直接连接,应该会有更多的参数量,但实际上,DenseNet的参数更少。这主要是由于DenseNet的网络层都很窄(网络卷积核很少,例如12个,正常VGG16的卷积核【64,128,256,512】,差距还是很大的)。卷积层的参数量NxHxMxc+c。c大大较少肯定会减少参数量。
那么大大减少每层输出的特征图不会影响模型的性能么?
作者给出的解释是传统的模型中,信息从输入层逐层向后传递。每层既要学习新的信息,也要传递需要保存的信息(所有需要更多的卷积核个数)。然后在将新信息和保存的信息一起传递给后层。Dense block架构清晰的区分新的信息和需要保存的信息。因为需要保存的信息Dense block会直接通过短连接传递给后层,所以每个网络层只需要学习新的信息即可。然后将新的信息加到模型的整体信息中。实际上,每层只需向整体信息总加入少量的信息即可。
传统模型结构
传统的模型是简单的线性结构,每层接受上一层的输出作为输入,做该层的非线性操作后,输出到下一层。每层都会改变信息的状态。论文中作者将每层传递的信息概述为两部分:
DenseNet 结构
DenseNet使用密集的短连接结构。
既然网络层需要将部分输入信息保留传递到后层,那为何不直接使用短连接直接传递呢呢。DenseNet使用旁路连接将该层前所有层生成的特征图作为输入。这样使得每层只需要负责产生新的特征,不需要负责将输入向后传递,所以DenseNet的网络层都很窄(需要很少的卷积核)。每层只需要向“整体知识”中添加很少的信息。这样子清晰的区分了这两部分信息:旁路快捷连接负责传递需保留的输入信息,网络层负责学校生成新的信息。
同时、直接旁路直接传递避免了网络层去重复的学习特征。增强了网络的特征复用。
2)更容易训练