paper: Pyramid Scene Parsing Network
Abstract
-
PSPNet是港中文和商汤在CVPR2017上的一篇工作,将pyramid pooling引入到场景解析的分割任务中,取得很好的效果,2016年ImageNet的scene parsing任务冠军。在PASCAL VOC2012 test上的mIoU能够达到85.4%
- PSPNet的主要贡献点在于:
- 将pyramid pooling引入到场景解析任务任务中
- 模型训练时增加了一个辅助loss(auxiliary loss),即文中表述的effective optimization strategy
- 实践技巧
- 个人想法:从多尺度特征的角度理解,PSPNet其实也只是使用了backbone网络最后的某一个特征层,那么是否可以替换为FPN结构,真正的将低层特征融合进来。(巧合的是,FPN也是CVPR2017的一片工作)
Details
- Pyramid pooling module
- 这个金字塔池化其实是对SPP的改进,见下图:
- 具体的网络结构见下图:
- 在pyramid pooling模块,根据不同大小的kernel和stride将feature map分为不同个\( 1\times1, 2\times2, 3\times3, 6\times6 \)个bin,然后每个模块后加上一个\( 1\times1\)的conv,以降低channel个数为512(前面resnet用的是bottleneck结构,
con5_3/relu
的输出channel个数为2048);再然后,每个模块再通过bilinear interpolation缩放到pyramid pooling模块输入前的尺寸\( 60 \times 60\);再之后,将4个模块的特征图concat到一起,最终再通过bilinear interpolation返回到原图大小
- 在pyramid pooling模块,根据不同大小的kernel和stride将feature map分为不同个\( 1\times1, 2\times2, 3\times3, 6\times6 \)个bin,然后每个模块后加上一个\( 1\times1\)的conv,以降低channel个数为512(前面resnet用的是bottleneck结构,
- auxiliary loss
- 个人理解是增加在网络的中间某一个地方引入一个loss,这个loss和网络最后的loss一样,都是cross entropy,加入尽量应该是为了是网络的backbone部分更加鲁棒,这样用于后面执行pyramid pooling的feature map表达能力也更强
- 实践技巧
- 对比了avg/max pooling,avg pooling的效果更好
- 使用auxiliary loss,权重设置为0.4
- 对比不同深度的resnet作为backbone,明显越深越好
- pyramid pooling的每个模块后加入dimension reduction的\( 1 \times 1\)卷积也能够提升效果
- data augmentation:random mirror/resize/rotation/Gaussian blur
- 学习率更新策略poly
- appropriately large “cropsize” can yield good performance and “batchsize” in BN(不过这部分并没有公布代码,PSPNet的训练部分代码没有)