目前英文PANet算法笔记
香港张国强这篇是CVPR2018关于实例分割(instance gmentation)的⽂章,既是COCO2017实例分割⽐赛的冠军,也是⽬标检测⽐赛的第⼆名。
这篇⽂章提出的Path Aggregation Network (PANet)整体上可以看做是在Mask RCNN上做多处改进,充分利⽤了特征融合,⽐如引⼊bottom-up path augmentation结构,充分利⽤⽹络浅特征进⾏分割;引⼊adaptive feature pooling使得提取到的ROI特征更加丰富;引⼊fully-connected fusion,通过融合⼀个前背景⼆分类⽀路的输出得到更加精确的分割结果。整体⽽⾔对于⽬标检测和分割系列算法有不少启发,接下来就来看看具体是怎么做的吧。
天宫寺塔Figure1是关于PANet的⽰意图,主要包含FPN、bottom-up path augmentation、adaptive feature pooling、fully-connected fusion四个部分。
FPN是CVPR2017的⼀篇⽂章,主要是通过融合⾼低层特征提升⽬标检测的效果,尤其可以提⾼⼩尺⼨⽬标的检测效果。
Bottom-up Path Augmentation的引⼊主要是考虑⽹络浅层特征信息对于实例分割⾮常重要,这个也⾮常容易理解,毕竟浅层特征多是边缘形状等特征,⽽实例分割⼜是像素级别的分类。那么为什么bottom-up
path augmentation能保留更多的浅层特征呢?作者在Figure1中⽤红绿两个箭头来解释了。红⾊虚线箭头表⽰在FPN算法中,因为要⾛⾃底向上的过程,浅层的特征传递到顶层要经过⼏⼗甚⾄⼀百多个⽹络层(在FPN中,对应Figure1中那4个蓝⾊矩形块从下到上分别是ResNet的res2、res3、res4和res5层的输出,层数⼤概在⼏⼗到⼀百多左右),显然经过这么多层的传递,浅层特征信息丢失会⽐较厉害。绿⾊虚线箭头表⽰作者添加⼀个bottom-up path augmentation,本⾝这个结构不到10层,这样浅层特征经过底下原来FPN的lateral connection连接到P2再从P2沿着bottom-up path augmentation传递到顶层,经过的层数就不到10层,能较好地保留浅层特征信息。关于bottom-up path augmentation的具体设计参考后⾯的Figure2,最后融合得到的特征层是N2、N3、N4、N5,其中N2和P2相同,这些特征层⽤于后续的预测框分类、回归和mask⽣成。
Adaptive Feature Pooling主要做的还是特征融合。我们知道在Faster RCNN系列的⽬标检测或分割算法中,RPN⽹络得到的ROI需要经过ROI Pooling或ROI Align提取ROI特征,这⼀步操作中每个ROI所基于的特征都是单层特征(FPN也是如此),⽐如ResNet⽹络中常⽤的res5的输出。⽽adaptive feature pooling则是将单层特征也换成多层特征,也就是说每个ROI需要和多层特征(⽂中是4层)做ROI Align的操作,然后将得到的不同层的ROI特征融合在⼀起,这样每个ROI特征就融合了多层特征。具体内容可以看后⾯的Figure6。
Fully-connected Fusion是针对原有的分割⽀路(FCN)引⼊⼀个前背景⼆分类的全连接⽀路,通过融拔罐拔出水泡是好是坏
选举
合这两条⽀路的输出得到更加精确的分割结果。具体内容可以看后⾯的Figure4。
Figure2是bottom-up path augmentation的⽰意图,是⽐较常规的特征融合操作,⽐如Ni经过卷积核尺⼨为3*3,stride=2的卷积层,特征图尺⼨缩减为原来的⼀半,然后和Pi+1做element-wi add,得到的结果再经过⼀个卷积核尺⼨为3*3,stride=1的卷积层得到
Ni+1,特征图尺⼨不变。
基础工程施工方案
Figure6是adaptive feature poolng的⽰意图。RPN⽹络得到的每个ROI都要分别和N2、N3、N4、N5层特征做ROIAlign操作,这样每个ROI就提取到4个不同的特征图,然后将4个不同的特征图融合在⼀起就得到最终的特征,后续的分类和回归都是基于最终的特征进⾏。
之所以引⼊adaptive feature pooling其实是基于FPN中提取ROI特征的思考,虽然FPN⽹络基于多层特征做预测,但是每个ROI提取特征时依然是基于单层特征,然⽽单层特征就⾜够了吗?于是作者做了Figure3这个实验,Figure3中有4条曲线,对应FPN⽹络中基于4层特征做预测,每⼀层都会经过RPN⽹络得到ROI,所以这4条曲线就对应4个ROI集合。横坐标则表⽰每个ROI集合所提取的不同层特征的占⽐。⽐如蓝⾊曲线代表level1,应该是尺度⽐较⼩的ROI集合,这⼀类型的ROI所提取的特征仅有30%是来⾃于level1的特征,剩下的70%都来⾃其他level的特征,leve2、leve3、leve4曲线也是同理,这说明原来RPN⽹络的做法(level x的ROI所提取的特征100%来⾃于leve x的特征,x可取1、2、3、4)并不是最佳的。因此就有了特征融合的思考,也就是每个ROI提取不同层的特征并做融合,这对于提升模型效果显然是有利⽆害。
桌面壁纸电脑
玻璃水冻住了怎么办Figure4是fully-connected fusion的⽰意图。主要是在原来的mask⽀路(Figure4上⾯那条⽀路,也就是传统的FCN结构)上增加了Figure4下⾯那条⽀路做融合。增加的这条⽀路包含2个3*3的卷积层(其中第⼆个为了降低计算量还将通道缩减为原来的⼀半),然后接⼀个全连接层,再经过reshape操作得到维度和上⾯⽀路相同的前背景mask,也就是说下⾯这条⽀路做的是前景和背景的⼆分类,因此输出维度类似⽂中说到的28*28*1。上⾯这条⽀路,也就是传统的FCN结构将输出针对每个类别的⼆分类mask,因此输出的通道就是类别的数量,输出维度类似28*28*K,K表⽰类别数。最终,这两条⽀路的输出mask做融合得到最终的结果。因此可以看出这⾥增加了关于每个像素点的前背景分类⽀路,通过融合这部分特征得到更加精确的分割结果。
在附录B中作者提到跨GPU的BN层计算,引⼊这个的⽬的主要是为了在训练过程中BN层的计算会更加稳定,因为BN层的计算依赖batch size的设置,过⼩的batch size容易导致BN层的参数不稳定,但是two stage的⽬标检测算法搭配Caffe框架,其batch size会⼩的可怜,因此跨GPU计算BN是必须的。
实验结果:
Table1是PANet和Mask RCNN、FCIS算法(COCO2016实例分割算法冠军)在COCO数据集上的分割效果对⽐。
Table2是PANet和Mask RCNN、FCIS、RentinaNet算法在COCO数据集上的检测效果对⽐,优势还是⽐较明显的(主⽹络为ResNeXt-101时,单模型效果达到45算很⾼了)。
Table3是关于⽂章中提到的⼏个优化点带来的效果提升,其中RBL是这篇⽂章的baline,也就是Mask RCNN。
Table6和Table7是关于在COCO实例分割和⽬标检测⽐赛上的结果。可以重点看下在实例分割中的⼀些涨点⽅法。1、deformable convolution(DCN),这个基本上已经是标配了。2、testing tricks,提了2.5个mAP,主要包括multi-scale tesing,这个⽐较耗时,但是效果⼀般都不差;horizontal flip tesing,这个应该是在训练过程中做到;mask voting和box voting,投票机制,这⾥应该是在单模型⾥⾯做的,⽐较好奇。3、larger model,更深更宽的⽹络⼀般效果更好,只是速度也更慢。4、enmble,也就是模型融合,融合多个了ResNeXt-101、ResNet-269、SE-ResNeXt-101等⽹络的结果。