thesis:Densely Connected Convolutional Networks
slides: http://www.gaohuang.net/papers/DenseNet-CVPR-Slides.pdf
CNN的发展势头迅猛,从最初的LeNet5网络,到AlexNet、VGGNet、Inception和ResNet等等网络的出现,使得CNN不仅仅拓宽了宽度,而且也加深了深度,但是随着深度的加深,梯度消失问题也越来越严重,很多研究者也相继发表著作减轻梯度消失问题,ResNet,Highwa Network,FractalNets等等,虽然这些网络结构有所不同,可是核心特点却是相似,它们尽可能使得early layers到later layers之间的路径尽可能短(they create short paths from early layers to later layers)。基于此,作者提出了Dense Convolutional Network(DenseNet),让所有的层之间两两直接连接来确保网络中层与层之间的最大信息流,第层有
个输入,这
个输入包括前
卷积层的特征图输出,第一层有一个输入,第二层有2个输入,第三层有三个输入,以此类推,那么一个L层的网络总共有
连接。DenseNet包含两部分,dense block和transition layers,一个带有3个dense block的denseNet分类网络如下图所示:
- dense block中的每一层之间直接连接,不同层之间的直接连接增加了每层输入的多样性和提高了效率
- 每两个相邻的dense block之间的卷积+池化层被称为transition layers,其作用是通过下采样来改变特征图的大小。
dense block
- 假设一个图片
为一个L层卷积网络的输入;
- 定义非线性转换函数
,其中
表示第
层。
是各类操作的复合函数,例如BN,ReLU,Pooling和Conv等等,论文中定义
为BN,ReLU和3*3Conv操作的复合函数;
- 定义第
层的输出为
传统的卷积网络第层的输出特征图作为第
层的输入,
;ResNet引入了能够跳过一层或多层的“shortcut connection”,
;DenseNet则是让前
层输出的特征图作为第
层的输入,
,其中
是从第0层到第l层输出的连接。
如果每一个函数输出
个特征图,那么第
层的输入特征图数目为
,其中
为输入层的通道数。将超参数
定义为网络的growth rate,k的取值一般不大,导致DenseNet与已经存在的网络之间的不同之一在于:DenseNet can have very narrow layers。
下图展示了一个5层且growth rate为4的dense block,如下图所示,函数为BN-ReLU-Conv的复合函数,每一层的输入都是前面几层的输出的连接,每一层的输出4个特征图。
transition layers
dense block中的连接操作在特征图大小改变的情况下是不可行,也就是说在一个dense block中并不能改变特征图的大小,所以讲网络拆分这个多个dense blocks,每两个相邻的dense block之间添加一个做卷积和池化运算的transition layer。在实验中,transition layer包括一个BN,一个1*1的卷积层和一个2*2的平均池化层。
DenseNet-B
尽管每一个层仅仅输出个特征图,但是由于每一层的输入都是前几层特征图的连接,这样算一下,每一层输入的通道数数量还是蛮大的,所以为了提高计算效率,较少输入特征图的数量,在每一个3*3的卷积层之前增加一个1*1的卷积层作为bottleneck layer,那么每一个
函数则为BN-ReLU-Conv(1*1)-BN-ReLU-Conv(3*3),是为DenseNet-B结构。每一个1*1卷积层输出
个特征图。
DenseNet-C
为了使模型更紧凑,在transition layers中减少特征图的数量。如果经过dense block后输出m个特征图,接下来的transition layer输出个特征图,其中
被称为compression factoe。当
时,说明transition layer并没有改变特征图的数量。在论文中,将
的DenseNet定义为DensetNet-C,在实验中设置
。将同时拥有bottleneck和满足
的transition layer的DenseNet定义为DenseNet-BC结构。DenseNet-BC的网络参数和相同深度的DenseNet相比确实减少了很多,如下图所示。参数减少除了可以节省内存,还能减少过拟合。
优点
省参数和省计算:下图展示了ReNet和DenseNet在参数和flops方面的验证错误率比较。左子图是参数和验证错误率的折线图,可以看出,当参数量相同的情况下,DenseNet比ResNet拥有更小的错误率;当验证错误率相同的时候,DenseNet比ResNet拥有更少的参数。右子图展示了flops和验证错误率的折线图,可以看出,DenseNet的表现比ResNet要好。
抗过拟合:作者观察出,对于没有对数据进行数据增广的数据集,DenseNet架构要比其他网络架构表现地更优秀,尤其DenseNet-BC。对于 DenseNet 抗过拟合的原因有一个比较直观的解释:神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 利用特征复用(feature reuse)综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。
参考:
[1]. CVPR 2017最佳论文作者解读:DenseNet 的“what”、“why”和“how”|CVPR 2017