极简笔记 语义分割中的self-attention变种模型

极简笔记 语义分割中的self-attention变种模型

Self-attention模块在近年来取得了比较不错的成功,其核心公式就是:
y i = 1 C ( x ) ∑ ∀ j f ( x i , x j ) g ( x j ) y_i=\frac{1}{\mathcal{C}(x)}\sum_{\forall j}f(x_i,x_j)g(x_j) yi=C(x)1jf(xi,xj)g(xj)
与以往的卷积网络项目,self-attention module的核心在于计算了全图特征的相似性 f ( x i , x j ) f(x_i,x_j) f(xi,xj)(当然这个相似性计算方式可以自己各种定义啦),然后将全图的特征 g ( x j ) g(x_j) g(xj)按照相似性进行聚合得到当前位置 i i i的聚合后的特征。

这样一个模块可以直接套在任何网络上,当然也包括所有semantic segmentation模型。但是只加这么一点肯定还不够发文章,于是各种针对公式和模块结构的魔改就开始了:

PSANet

https://hszhao.github.io/papers/eccv18_psanet.pdf
原公式的相似性是一个双向的相似性计算,将 f ( x i , x j ) f(x_i,x_j) f(xi,xj)拆分成两部分,理解成信息的collect和distribute,即
f ( x i , x j ) = F △ i j ( x i , x j ) ≈ F △ i j ( x i ) + F △ i j ( x j ) f(x_i,x_j)=F_{\triangle_{ij}}(x_i,x_j)\thickapprox F_{\triangle_{ij}}(x_i)+F_{\triangle_{ij}}(x_j) f(xi,xj)=Fij(xi,xj)Fij(xi)+Fij(xj)
然后核心共识就可以分成两部分:
y i = 1 C ( x ) ∑ ∀ j F △ i j ( x i ) g ( x j ) + 1 C ( x ) ∑ ∀ j F △ i j ( x j ) g ( x j ) y_i=\frac{1}{\mathcal{C}(x)}\sum_{\forall j}F_{\triangle_{ij}}(x_i)g(x_j)+\frac{1}{\mathcal{C}(x)}\sum_{\forall j}F_{\triangle_{ij}}(x_j)g(x_j) yi=C(x)1jFij(xi)g(xj)+C(x)1jFij(xj)g(xj)
这里的重点在于 F △ i j ( x i ) F_{\triangle_{ij}}(x_i) Fij(xi)的生成不再是 f ( x i , x j ) f(x_i,x_j) f(xi,xj)那种需要计算feature map矩阵相乘,而是可以直接通过卷积得到
极简笔记 语义分割中的self-attention变种模型_第1张图片
极简笔记 语义分割中的self-attention变种模型_第2张图片

OCNet

https://arxiv.org/pdf/1809.00916.pdf
f ( x i , x j ) f(x_i,x_j) f(xi,xj)针对feature map每个位置的特征都要算相似性,计算量不是挺大嘛,最直接的想法就是down-sample,减少resolution,这样再两两算相似计算量就下来很多。但是resolution降到多少才算好呢?小孩子才做选择,成年人全都要!之前不是有PPM和ASPP嘛,在空间金字塔下多个分支都做attention,最后合一起不就好了,这就是OCNet

极简笔记 语义分割中的self-attention变种模型_第3张图片

###ISA
https://arxiv.org/pdf/1907.12273.pdf
同样是为了减少feature map两两相似计算的计算量,OCNet直接降低resolution太暴力,那么换种思路就是稀疏拆分,把计算过程分成long-range和short-range。利用像素重排让每次计算还是只在局部进行,减少了计算量又可以间接覆盖全图。
极简笔记 语义分割中的self-attention变种模型_第4张图片

CCNet

https://arxiv.org/pdf/1811.11721.pdf
还是因为计算量太大,这次想的办法是只计算十字交叉的区域的相似性,然后通过连续两次Criss-Cross module的叠加来实现覆盖全部pixel(和ISA想法挺像,但就是实现覆盖的方式不一样)
极简笔记 语义分割中的self-attention变种模型_第5张图片

DANet

https://arxiv.org/pdf/1809.02983.pdf
原公式的相似度计算只涵盖了spatial层面的,作为成年人我全都要,那当然少不了channel角度的特征,于是DANet把self-attention同时应用到了spatial和channel层面(当然带来的困惑就是计算量又变大了)
极简笔记 语义分割中的self-attention变种模型_第6张图片

ACPNet

http://openaccess.thecvf.com/content_CVPR_2019/papers/He_Adaptive_Pyramid_Context_Network_for_Semantic_Segmentation_CVPR_2019_paper.pdf
原公式相似性聚合的矩阵乘法两边是 H W × H W HW\times HW HW×HW H W × C HW\times C HW×C俩矩阵,除了像OCNet一样直接降低 H W HW HW的大小,另一种方式则是只降低第一个矩阵的列数和第二个矩阵的行数,变成 H W × s 2 HW\times s^2 HW×s2 s 2 × C s^2\times C s2×C s 2 ≪ H W s^2\ll HW s2HW,同样可以起到减少计算量的效果。而且既然中间的 s s s到底降到不好确定,那么还是利用ASPP方法,多分支融合。不过ACPNet并没有严格按照 f ( x i , x j ) f(x_i,x_j) f(xi,xj)去计算每个像素对的相似性而是直接用 1 × 1 1\times1 1×1卷积进行了替代然后reshape。所以这个 H W × s 2 HW\times s^2 HW×s2这个矩阵能不能叫Affinity Matrix还有待商榷。
极简笔记 语义分割中的self-attention变种模型_第7张图片

CFNet

http://openaccess.thecvf.com/content_CVPR_2019/papers/Zhang_Co-Occurrent_Features_in_Semantic_Segmentation_CVPR_2019_paper.pdf
基本就是原教旨版本的non-local在语义分割上的再应用,中间的函数设计也不多讲了,多加了一个channel attention的分支。不过毕竟知乎大佬出品,占坑速度快,理论功底扎实,看得我一愣一愣的。。。
极简笔记 语义分割中的self-attention变种模型_第8张图片

你可能感兴趣的:(极简笔记)