Densely Connected Convolutional Networks(DenseNet)

读了一天终于把DenseNet这篇巨屌无比的文章读完了,为何说它厉害呢,因为它在很多方面超越了ResNet。大家知道,ResNet是何凯明大神15年的大作,它让深度学习的检测效果更上一层楼,后来很多的网络也都是在ResNet的基础上改进的。DenseNet是17年CVPR的Best Paper,那俩年后的这个新网络结构是怎样的,是如何超越ResNet,接下来我就一一道来。

首先我先给一个图,让大家有一个直观的认识:
Densely Connected Convolutional Networks(DenseNet)_第1张图片
这是DenseNet的一个基本结构单元,叫做一个Dense Block,几个这样的单元串在一块儿就形成了完整的DenseNet。
先说一下这里的符号,其中图里的x代表输入以及得到的特征图,H代表执行的操作,比如讲BN,Relu,Conv打包成一个操作就叫H,k是叫做growth rate,我个人理解就是指的每层输出的特征图个数,比如图中每层输出特征图为4,所以k=4,另外从图中也可以看出这里有x0,x1…x4一共五层卷积。
再说一下重要结构,这里和普通的卷积神经网络的一个重要区别就是每一层的输入不仅仅是紧邻上一层的输出,还包括之前所有层的输出,也就是每一层的输出与后边每一层相连。

继续上图!
Densely Connected Convolutional Networks(DenseNet)_第2张图片

完整的结构如图所示,每俩个Dense Block中间的Conv和Pooling叫做Transition Layer。

当然,根据不同的数据要去构建不同数量的Dense Block,文章作者在训练ImageNet数据集的时候选用了4个,实现详情如下图:
Densely Connected Convolutional Networks(DenseNet)_第3张图片

从表格可以看出,作者分别尝试了121,169,201,264层的DenseNet,每一层对应的那一列是其网络结构,这里,作者将1x1卷积和3x3卷积连用,作为一组,这里在3x3卷积前用1x1是为了减少输入特征图数量,提高计算效率,事实证明在DenseNet中这种结构很有效,添加了1x1的DenseNet叫做DenseNet-B

为了获得紧凑的模型,作者在Transition Layer对输出的特征图个数进行控制,加入了一个叫theta的参数,假设原本输出的特征图个数为m,现在输出的特征图个数就是theta*m,其中0 < theta<=1,文章设置theta=0.5,这样压缩过的DenseNet叫做DenseNet-C,将DenseNet-B和DenseNet-C方法连用产生的DenseNet称为DenseNet-BC

接下来就是一些实验结果了,总而言之就是从各个方面证明DenseNet比ResNet牛逼,100层的效果就和ResNet1000层的效果相当,图就不贴了,看得眼花,我直接引用一些文字来说明吧:
摘自:http://www.sohu.com/a/161639222_114877

DenseNet 有什么优点?

省参数。在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半。对于工业界而言,小模型可以显著地节省带宽,降低存储开销。
省计算。达到与 ResNet 相当的精度,DenseNet 所需的计算量也只有 ResNet 的一半左右。计算效率在深度学习实际应用中的需求非常强烈,从本次 CVPR 会上大家对模型压缩以及 MobileNet 和 ShuffleNet 这些工作的关注就可以看得出来。最近我们也在搭建更高效的 DenseNet,初步结果表明 DenseNet 对于这类应用具有非常大的潜力,即使不用 Depth Separable Convolution 也能达到比现有方法更好的结果,预计在近期我们会公开相应的方法和模型。
另外,我们还提出了一个可实现自适应推理的多尺度 DenseNet,用于提高深度学习模型的推理效率。这个方法的主要思想是用浅层的特征来预测相对「简单」的图片,而只用深层的特征来预测比较「难」的图片。由于很多实际应用中,简单的图片占有较大的比例,而它们并不需要非常深的模型也能被正确预测,因此这种自适应推理方法可以有效的降低深度模型推理时的平均计算开销,而不降低精度。感兴趣的读者请关注我们的 arXiv 论文 《Multi-Scale Dense Convolutional Networks for Efficient Prediction》(),代码参见。
抗过拟合。DenseNet 具有非常好的抗过拟合性能,尤其适合于训练数据相对匮乏的应用。这一点从论文中 DenseNet 在不做数据增强(data augmentation)的 CIFAR 数据集上的表现就能看出来。例如不对 CIFAR100 做数据增强,之前最好的结果是 28.20% 的错误率,而 DenseNet 可以将这一结果提升至 19.64%。对于 DenseNet 抗过拟合的原因有一个比较直观的解释:神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。实际上,DenseNet 的泛化性能优于其他网络是可以从理论上证明的:去年的一篇几乎与 DenseNet 同期发布在 arXiv 上的论文(AdaNet: Adaptive Structural Learning of Artificial Neural Networks)所证明的结论(见文中 Theorem 1)表明类似于 DenseNet 的网络结构具有更小的泛化误差界。

你可能感兴趣的:(深度学习)