解读Dual Path Networks(DPN,原创)

Dual Path Networks,论文链接:https://arxiv.org/pdf/1707.01629.pdf

ResNet和DenseNet是近几年两种比较热门的网络结构,ResNet把输入直接加到(element-wise adding)卷积的输出上,DenseNet则把每一层的输出都拼接(concatenate)到了其后每一层的输入上。在这篇论文中作者用High Order RNN结构(HORNN)把DenseNet和ResNet联系到了一起,证明了DenseNet能从靠前的层级中提取到新的特征,而ResNet本质上是对之前层级中已提取特征的复用。通过把这两种结构的优点结合到一起,就有了最新结构Dual Path Networks(DPN)。

一、原理篇

1、DenseNet和HORNN的联系

High Order RNN(HORNN)就是高阶循环卷积网络,我们可以把HORNN泛化成公式1。这个公式中当前的状态是hk,ht则表示结构中的第t个状态 (t<k),ftk(.)表示从ht中提取和第k个状态有关的特征的过程,xt表示第t个状态的输入数据(明显有x0=h0),gk(.)表示把之前所有的状态汇聚后再用gk(.)处理就得出当前状态hk。如果对于任意k,t,都有ftk(.)=ft(.),gk(.)=g(.),那公式1就是一个普通的HORNN。

《解读Dual Path Networks(DPN,原创)》 公式1

为什么说DenseNet就是个特殊的HORNN呢?DenseNet一个Block可以看成图1的结构,其中的红框部分是对之前各层的输出在特征维度做拼接,然后做1X1卷积。拼接后做1X1卷积可以等效为先在各层的直连线上分别做1X1卷积(每一条直连线上的1X1卷积系数都不同),然后再算术相加。即红框里的结构可以等效为图1下半部分的结构,一个DenseNet的Block就等效于图2的结构(其中f
k-1
k、f
k-2
k、f
k-3
k……都不相同)。这样图2就和公式1完全对应上了,所以说DenseNet是在不满足f
t
k(.)=f
t(.),g
k(.)=g(.)时的特殊HORNN。

《解读Dual Path Networks(DPN,原创)》 图1:DenseNet的结构

《解读Dual Path Networks(DPN,原创)》 图2:DenseNet结构

2、DenseNet和ResNet的联系

把公式1做下变形,引入一个中间量rk,再假设对于任意t、k,都有ftk(.)=ft(.),公式1可以变化成公式2的表达式:

《解读Dual Path Networks(DPN,原创)》 公式2

把上面两个表达式组合在一起就有了公式3,其中Φ
k-1(r
k-1)=f
k-1(g
k-1(.)),明显这是一个残差的表达式:

《解读Dual Path Networks(DPN,原创)》 公式3

因为公式2是在f
t
k(.)=f
t(.)前提下,从公式1得出的,而公式1是DenseNet,所以可以认为ResNet是DenseNet在f
t
k(.)=f
t(.)时的一种特殊表达式。图3是ResNet结构的等效变换,图3下侧的表达形式和公式2的ResNet公式是完全一样的,其中g
k(.)就是1×1降维的卷积,f
k(.)就是其他卷积部分,从图3看出ResNet中任意层都复用了之前所有层次输出的特征。

《解读Dual Path Networks(DPN,原创)》 图3:ResNet结构

3、DenseNet和ResNet各自的优势

从前面的描述可以看出ResNet复用了前面层已提取过的特征,除去这些直连的复用特征外,真正由卷积提取出来的特征“纯度”就比较高了,基本都是之前没有提取到过的全新特征,所以作者说ResNet提取的特征中冗余度比较低。而DenseNet从图1可以看出fk-1k、fk-2k、fk-3k……都不相同,前面层提取出的特征不再是被后面层简单的复用,而是创造了全新的特征,这种结构后面层用卷积提取到的特征很有可能是前面层已提取过的,所以作者说DenseNet提取的特征冗余度高。一个有高复用率,但冗余度低;一个能创造新特征,但冗余度高,如果把这两种结构结合起来,就能发挥更大的威力,这就有了DPN。

二、结构篇

DPN的表达式如公式4,它结合了DenseNet和ResNet,xk分支代表了DenseNet,yk分支代表了ResNet。

《解读Dual Path Networks(DPN,原创)》 公式4

从ResNet、DenseNet到DPN的结构演进关系见图4和图5,图4(b)DenseNet结构中绿色和红色的1×1卷积就是图2中的f
k-1
k(·)、f
k-2
k(·),两个1×1卷积是有独立的系数的,图4(b)在f
t
k(·)=f
t(·)时可以演变成图4(c),图4(c)是满足f
t
k(·)=f
t(·)后的DenseNet结构,也就是ResNet。在图4(b)和图4(c)中可以看到算术相加后有一个1×1卷积(带下划线)在图2中没有出现过,加这个1×1卷积是为了让图4(c)能与图4(a)的ResNet对应上,纯粹是用于证明共享f
t(·)后的DenseNet就是个ResNet,并无特殊作用。图5(d)就是DenseNet和ResNet组合在一起的DPN,结构中最后一个1×1卷积的输出分成了两半,一半的特征数和ResNet分支的输入的特征数相同,这样才能和ResNet分支的输入正好相加。

图5(e)是真正使用的DPN结构,和d的区别是DenseNet和ResNet分支共用了第一个1×1卷积。实际应用时3×3卷积使用ResNeXt中的GROUP方式来提升性能;ResNet分支的特征数也会更多点,这样可以减缓DenseNet随着层级加深特征宽度不停加大的问题。图6是几种DPN结构和ResNet结构的比较。

《解读Dual Path Networks(DPN,原创)》 图4:ResNet和DenseNet结构

《解读Dual Path Networks(DPN,原创)》 图5:DPN结构

《解读Dual Path Networks(DPN,原创)》 图6:几种DPN结构

三、测试篇

作者使用了ImageNet 1k数据集来做图像分类测试、用Place365标准数据集来做场景分类测试、用PASCAL VOC数据集来做目标检测和语义分割测试。

1、图像分类测试(image classification)

从图7表格的第一部分可以看出92层的DPN的top-1错误率比101层的ResNeXt(32x4d)的错误率低0.5%,要比161层的DenseNet的错误率低1.5%,FLOPS也比他们要低;从图7表格的第二部分看出98层的DPN的错误率比ResNeXt性能最好的结构ResNeXt-101(64x4d)的错误率还要低,而且FLOPS要少25%,参数量也要少。
作者再把DPN的深度进一步加深到了131层(见图7表格最后一部分),他的错误率比当前性能最好的结构–Very Deep PolyNet还要低,同时参数量也更少,训练速度却要比PolyNet快一倍,作者还比较了各种结构训练时GPU显存的使用量和训练速度,结果见图7下方的三张图,可以看到DPN-98比性能最好的ResNeXt训练时要快15%,现存占用少9%。而性能更好的DPN-131只是比ResNeXt多用了19%的训练时间,就达到了state-of-art的结果。

《解读Dual Path Networks(DPN,原创)》 图7:不同结构的参数量、FLOPS、错误率、训练速度、显存占用量的比较

2、场景分类测试(scene classification)

作者用Place365数据集作场景分类的测试,结果见图8,从结果可以看出DPN-92的准确率要比其他结构都高。

《解读Dual Path Networks(DPN,原创)》 图8:不同结构的显存占用量和准确率比较

3、目标检测测试(object detection)

作者用PASCAL VOC 2007数据集作目标检测的测试,结果用平均准确度(AP)和平均准确度的期望(mAP)两种方式来衡量 ,测试时都用了Fast R-CNN框架,把Fast R-CNN中的ResNet替换成了需要验证的结构,其他部分保持不变。结果见图9,能看出DPN有很大优势。

《解读Dual Path Networks(DPN,原创)》 图9:目标检测测试

4、语义分割测试(semantic segmentation)

语义分割测试用的是PASCAL VOC 2012数据集,用的框架是DeepLab-ASPP-L,图10是测试结果,可以看出DPN-92的mIoU准确度最高。

《解读Dual Path Networks(DPN,原创)》 图10:语义分割测试

总结:从测试结果来看DPN结构无论在图像分类、目标检测还是语义分割领域都有极大的优势,是当前性能比较优秀的图像识别结构。

    原文作者:张磊_0503
    原文地址: https://www.jianshu.com/p/c13a9900d643
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞