论文:SEAFORMER: SQUEEZE-ENHANCED AXIAL TRANSFORMER FOR MOBILE SEMANTIC SEGMENTATION
代码:https://github.com/fudan-zvg/SeaFormer
seafomrer是一种实时语义分割算法,主要对标的是topfomer和segformer,seafomer之后百度也出了一个实时语义分割算法叫做pp_mobileseg,但是pp_mobileseg笔者本人实际测试下来,不管是精度和速度都没有seaformer好,跟论文的数据有较大的差距。
seaformer主要解决的是transformer的复杂度与分辨率呈二次方的问题,这对于高分辨率输入任务非常不友好,从从下图可以看到,seaformer的对于分辨率不怎么敏感,所以速度也比较快。
seaformer整体是非对称编解码结构,特征提取用的是topformer的STEM,其实就是几层倒置残差块,后边接了3层特征融合块,吸收了bisenet的双路分支思想,粗粒度和细粒度特征融合,seafromer是渐进式融合法啊,而topformer是一口气将所有细粒度特征提取出来,再分别跟不同层级的粗粒度特征融合。
seafromer的核心是压缩轴注意力,这个是对传统多头自注意力的改进,首先看下边的Squeeze Axial attention,这个是使用了池化对QKV进行X轴和Y轴分别压缩,然后再进行自注意力操作,这么做可以大大降低传统自注意力的计算量,当然直接使用池化暴力压缩固然会导致信息损失,所以作者增加了一条Detail enhancement kernel用于增强细节信息,就是将QKV拼接一起然后卷积特征提取,最后细节增强分支产生卷积注意力权重更下面的分支相乘,悄悄有做了一步卷积注意力,估计参考了segnext的方法。
seaformer整体还是非常简洁的比较容易懂,实际项目使用也非常高效。我这边使用电芯数据集测试下来的结果如下,最后一列是耗时ms,分辨率是512x512: