项目原因,从事过高像素精度的前景语义分割算法的研发,实际验证后细粒度最好的算法为PSPnet,其他还尝试了deeplabv3+,DAnet,DASSP,想要训练像素精度极高的分割网络需要大量tricks,有兴趣的同学可以私聊讨论。
基于对现有项目精度进一步迭代的想法,关注到了CVPR2020的CascadePSP,该算法级联于常规分割算法之后,可以对PSPnet分割结果做进一步finer,算法原理直接上图
算法原理很清晰,主体backbone以及head和pspnet一致,Resnet连接一个金字塔池化头,该算法相比于常规PSPnet的改进在于两部分
1.输入不再只是原始RGB图片,而是额外融合3张分割结果,输出不再是单尺度的结果,而是分阶段输出3种尺度的结果
2.级联,该算法使用一个网络并复用不同阶段的结果作为输入实现级联,以三阶段前向为例做说明,
第一阶段,输入为RGB原图+PSPnet网络输出结果*3(该算法不足之处在于,不是end2end的,需要提前有一个训练好的分割网络),输出OS8
第二阶段,输入RGB原图+PSPnet网络输出+OS8上采样*2,输出OS4
第三阶段,输入RGB原图+PSPnet网络输出+OS8上采样+OS4上采样,输出最终结果OS1
使用一个网络实现级联想法还是挺巧妙的,网络的loss有四部分组成,看到如此复杂的loss fun,我内心也是嘿嘿一笑,说明作者也是踩过坑的人,还是那句话,想要训练高像素精度的分割网络需要tricks
该算法不足之处上述已经提到无法end2end,当然单纯训练Cascadepsp是可以end2end的,不过对于论文的训练方法,我还是略感不妥,想要业界实际使用估计还要进一步微调
引用:CascadePSP: Toward Class-Agnostic and Very High-Resolution Segmentation via Global and Local Refinement
代码链接: https://github.com/hkchengrex/CascadePSP