转载:http://www.yyliu.cn/post/7cabb4ff.html
背景:CVRP2017上,Densely Connected Convolutional Networks获得了CVRP2017最佳论文。
摘要:
最近的研究表明,当靠近输入的层和靠近输出的层之间的连接越短,卷积神经网络就可以做的更深,精度更高而且可以更加有效的训练。本论文根据这一结论,提出了DenseNet,这种结构将每一层与之前所有层相连接。传统的L层神经网络有L个连接,换句话说就是传统的神经网络层与层之间的连接只存在于相邻的两个层之间,而DenseNet有L(L+1)/2个直接连接。对于每一层,其输入的特征是之前所有的层,而它自己的特征图会输出到之后的所有层中去。
DenseNet的优点:缓解梯度消失问题,加强特征传播,鼓励特征复用,极大的减少了参数量(但是训练是非常消耗现显存的)
作者在(CIFAR-10,CIFAR-100, SVHN, and ImageNet)上对DenseNet的结构进行了测试,结果表明DensNet在大多数的测试图像库中都获得了最好的效果,然而它只需要很少的计算量来达到很高的性能。
代码参见:https://github.com/liuzhuang13/DenseNet
DenseNet与ResNet对比:
作者受到了ResNet和Highway NetWorks的启发,通过与之后的某一层进行直接连接传递信息,下面我们将一一对比:
DenseNet与ResNet的区别:
ResNet的结构可以使用下面这个公式表示,其中Hl代表一个非线性变换。
而DenseNet的结构用公式表示则如下:
这两个公式可以充分表现出两个网络的区别,言简意赅!
缺点:
DenseNet在训练时十分消耗内存,这是由于算法实现不优带来的。当前的深度学习框架对DenseNet的密集连接没有很好的支持,所以只能借助反复的拼接(Concatenation)操作,将之前层的输出与当前层的输出拼接在一起,然后传递给下一层,对于大多数框架(Torch和Tensorflow),每次拼接都会开辟新的内存在保存拼接后的特征。这样就导致了一个L层的网络,要消耗相当于L(L+1)/2层网络的内存,为此作者又写了一份技术报告,专门介绍这一问题,介绍如何提升对内存的使用率,同时提供的Torch,PyTorch,MxNet以及Caffe的实现,代码参见:
Torch implementation:https://github.com/liuzhuang13/DenseNet/tree/master/models
PyTorch implementation:https://github.com/gpleiss/efficient_densenet_pytorch
MxNet implementation:https://github.com/taineleau/efficient_densenet_mxnet
Caffe implementation:https://github.com/Tongcheng/DN_CaffeScript
参考资料:
1、CVPR 2017最佳论文作者解读:DenseNet 的“what”、“why”和“how”|CVPR 2017
2、Huang G, Liu Z, Weinberger K Q, et al. Densely connected convolutional networks[J]. arXiv preprint arXiv:1608.06993, 2016.
3、如何评价Densely Connected Convolutional Networks?