解读DenseNet(原创)

Densely Connected Convolutional Networks,原文链接:https://arxiv.org/pdf/1608.06993.pdf

自从2016年何恺明大神提出ResNet后,众多神经网络的研究者似乎突然悟到了很多,各种利用short path来提升性能的结构如雨后春笋,层出不穷。有点名头的比如Stochastic depth、FractalNets,影响最大的就是这个康奈尔大学、清华、Facebook研究者联合搞的DenseNet。DenseNet可以算是short path类型网络的终极版了,它把每一层的输出都直连到了后面每一层的输入上。图1是论文原作者给的示意图,这个图漏画了总的输入数据的连接,总的输入也连到了其后的每一层输入上,所以对于一个L层的网络来说就有Lx(L+1)/2条连线。

解读DenseNet(原创)_第1张图片
图1:论文中的DenseNet示意图

搞这么多直连有什么好处呢?作者给了两个解释:

原因一:这种结构需要的参数更少。传统结构里靠后的某层如果要用到靠前的某层已提取过的特征,还得用卷积来重新提取;而DenseNet中某层的输出直连到之后的每一层,这些特征是不需要重新做卷积的,拿来就可以给后面层使用,对于这些靠后的层次来说唯一要用卷积来提取的,只有前面层次没有提取过的新特征,所以真正要用的卷积个数就少了,也就意味着总的参数更少。图2是个直观的比较 ,蓝色的特征是第n层提取出的特征在第m层重新恢复出来的结果(m>n),红色的特征是前m-1层都不曾出现过的新特征。上侧的传统结构可以看出无论是红色(k2个特征)还是蓝色(k1个特征)的特征都需要靠前面层的卷积才能得到;图2下侧的DenseNet(为了简化假设只有第n层直连到了第m层)可以看到只有红色的k2个特征才是卷积得到。比较而言下侧图就更节省参数。

解读DenseNet(原创)_第2张图片
图2:使用DenseNet能够减少参数总量

原因二:梯度能通过直连直接传到靠前的层级,减少了梯度消失的可能性。

说完了原理再来看看DenseNet结构中的关键点:

1、DenseNet中某层的多个输入源不是直接算术相加,而是在特征维度上进行拼接(concatenate),这和ResNet的方法不同;

2、层与层间的直连只限于有相同尺寸的特征映射的层间,所以跨了Pooling的层就不要连了,图3是个典型的DenseNet网络,由三个DenseNet模块构成,模块内所有的层都会有直连线,而模块间靠卷积和Pooling来改变特征的尺寸;

解读DenseNet(原创)_第3张图片
图3:典型的DenseNet网络

3、如果在DenseNet模块中每一层的输入前都用1X1卷积降维,来减少计算量,这种结构作者取名叫DenseNet-B;

4、DenseNet模块中每一个卷积层前(包括1X1卷积)都会有BN,形成BN-Relu-1X1卷积-BN-Relu-3X3卷积的结构,完整地结构见图4;

5、不同的DenseNet模块间如果也用1X1 卷积来降维,这种结构作者取名叫DenseNet-C;

6、如果同时用到了第3点和第5点,这种结构就叫DenseNet-BC;

解读DenseNet(原创)_第4张图片
图4:各种深度的DenseNet结构

最后来看看DenseNet的实测结果,毕竟性能数据才是硬道理:

一:CIFRA和SVHN的测试结果:不同网络的结果比较见图5,C10代表CIFAR10数据,C100代表CIFAR100 数据,后面跟个"+"表示通过镜像、移位等操作来增大过数据集。 图5中的k叫做增长率,指DenseNet中每一个卷积层输出的特征数。

解读DenseNet(原创)_第5张图片
图5:CIFAR和SVHN数据集的测试结果

1、错误率:可以看到当网络深度为190、k=40时,DenseNet-BC达到了C10+3.46%、C100+ 17.18%的错误率;当网络深度为100、k=12时,DenseNet达到了SVHN 1.59%的错误率,这样的结果超过了同期所有其他的网络结构。

2、模型的能力:从图5可以看出,虽然用的是样本数极少的C10/C100,随着网络深度和增长率加大,错误率仍会降低,没有出现overfit,作者认为这是因为DenseNet在充分消化深度增长带来的性能提升,这能证明DenseNet有较强的能力。

3、参数的效率:作者作了两个比较--250层的DenseNet-BC有15.3M的参数,它的错误率和30M参数的FractalNet大致相当;100层、增长率为12的DenseNet-BC错误率和1001层的ResNet相当,但参数只有后者的90%。

二、ImageNet的测试结果

作者使用了ImageNet2012的数据,对源图片作了1次crop和10次crop两种测试,结果见图6。图7显示了DenseNet和ResNet在相同的错误率时需要的参数(左)和计算量(右)的比较,DenseNet明显有很大的优势。

解读DenseNet(原创)_第6张图片
图6:ImageNet测试结果
解读DenseNet(原创)_第7张图片
图7:相同错误率下的参数量和计算量比较

总结:从测试来看,DenseNet有极高的参数利用率,在增大层数时也没有表现出overfit或准确率下降的问题,由于它利用了每一层输出的特征,信息提炼的更为彻底丰富,使得他的准确率更高。所以综合来看DenseNet是种很有前途的全新结构。

你可能感兴趣的:(解读DenseNet(原创))