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。
为什么说DenseNet就是个特殊的HORNN呢?DenseNet一个Block可以看成图1的结构,其中的红框部分是对之前各层的输出在特征维度做拼接,然后做1X1卷积。拼接后做1X1卷积可以等效为先在各层的直连线上分别做1X1卷积(每一条直连线上的1X1卷积系数都不同),然后再算术相加。即红框里的结构可以等效为图1下半部分的结构,一个DenseNet的Block就等效于图2的结构(其中fk-1k、fk-2k、fk-3k......都不相同)。这样图2就和公式1完全对应上了,所以说DenseNet是在不满足ftk(.)=ft(.),gk(.)=g(.)时的特殊HORNN。
2、DenseNet和ResNet的联系
把公式1做下变形,引入一个中间量rk,再假设对于任意t、k,都有ftk(.)=ft(.),公式1可以变化成公式2的表达式:
把上面两个表达式组合在一起就有了公式3,其中Φk-1(rk-1)=fk-1(gk-1(.)),明显这是一个残差的表达式:
因为公式2是在ftk(.)=ft(.)前提下,从公式1得出的,而公式1是DenseNet,所以可以认为ResNet是DenseNet在ftk(.)=ft(.)时的一种特殊表达式。图3是ResNet结构的等效变换,图3下侧的表达形式和公式2的ResNet公式是完全一样的,其中gk(.)就是1x1降维的卷积,fk(.)就是其他卷积部分,从图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。
从ResNet、DenseNet到DPN的结构演进关系见图4和图5,图4(b)DenseNet结构中绿色和红色的1x1卷积就是图2中的fk-1k(·)、fk-2k(·),两个1x1卷积是有独立的系数的,图4(b)在ftk(·)=ft(·)时可以演变成图4(c),图4(c)是满足ftk(·)=ft(·)后的DenseNet结构,也就是ResNet。在图4(b)和图4(c)中可以看到算术相加后有一个1x1卷积(带下划线)在图2中没有出现过,加这个1x1卷积是为了让图4(c)能与图4(a)的ResNet对应上,纯粹是用于证明共享ft(·)后的DenseNet就是个ResNet,并无特殊作用。图5(d)就是DenseNet和ResNet组合在一起的DPN,结构中最后一个1x1卷积的输出分成了两半,一半的特征数和ResNet分支的输入的特征数相同,这样才能和ResNet分支的输入正好相加。
图5(e)是真正使用的DPN结构,和d的区别是DenseNet和ResNet分支共用了第一个1x1卷积。实际应用时3x3卷积使用ResNeXt中的GROUP方式来提升性能;ResNet分支的特征数也会更多点,这样可以减缓DenseNet随着层级加深特征宽度不停加大的问题。图6是几种DPN结构和ResNet结构的比较。
三、测试篇
作者使用了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的结果。
2、场景分类测试(scene classification)
作者用Place365数据集作场景分类的测试,结果见图8,从结果可以看出DPN-92的准确率要比其他结构都高。
3、目标检测测试(object detection)
作者用PASCAL VOC 2007数据集作目标检测的测试,结果用平均准确度(AP)和平均准确度的期望(mAP)两种方式来衡量 ,测试时都用了Fast R-CNN框架,把Fast R-CNN中的ResNet替换成了需要验证的结构,其他部分保持不变。结果见图9,能看出DPN有很大优势。
4、语义分割测试(semantic segmentation)
语义分割测试用的是PASCAL VOC 2012数据集,用的框架是DeepLab-ASPP-L,图10是测试结果,可以看出DPN-92的mIoU准确度最高。
总结:从测试结果来看DPN结构无论在图像分类、目标检测还是语义分割领域都有极大的优势,是当前性能比较优秀的图像识别结构。