Dual-Flattening Transformers through Decomposed Row and Column Queries for Semantic Segmentation 论文解读
论文解读)
前言
本篇文章将输入特征图分别按行和列展开,获得两个序列特征图,将这两个序列做类似于cross-attention的自注意力。这么做的好处在于以往从低分率特征图h * w到高分辨率特征图H * W需要O(hwHW)的复杂度,现在只需要O(hw(H+W)),同时也能有效的恢复细粒度细节。
论文PDF地址
1. flatten
下图是整体架构图。
输入图片的shape为HxWx3,通过特征提取器shape变为(H/4)x(W/4)xd,这个特征图(m)被逐行flatten展平为上面的序列R,shape为(HxW/16,d)相当于只有一行,HxW/16列,d维度。同样的,前面的特征图(m)逐列flatten展平为下面的序列C。shape为(HxW/16,d)相当于只有一列,HxW/16行,d维度。下面我们将H/4称为h,W/4称为w。
接下来我们会引入一个seq,这个seq是可学习的,是用来充当attention过程中Q的角色的,对于行来说,seq的shape是Hxd,对于列来说shape是Wxd.注意他们的长度和高度是和输出特征图对齐的而不是输入特征图的长度和高度。
2.Row Transformer Layer
有了输入我们就可以送入transformer模块了。本文称之为Row Transformer Layer和Column Transformer Layer,共有L层。
还是以行为例,一个Row Transformer Layer中包含MHA和Row-Col interactive attention .
MHA(multi head attention)的计算方法原文如下:
有点复杂,简单来看就是上一层输出加上可学习的seq当Q,放倒的输入R加上位置编码当K,放倒的输入R当V。
分析一下shape。Q的shape是Hxd,K与V的shape是hxd,这样attention计算过程中shape变化过程为:
Q * KT : (Hxd) * (dxh) -> (Hxh)
(Q * KT) * V : (Hxh) * (hxd) -> (Hxd)
上一层输入在第一层时取0.后面的多头合并和FFN都有,就不再表述。
Row-Col interactive attention 的计算方法原文如下:
从原文来看,以行为例,我们将行的MHA输出结果作为Q,列的MHA输出结果作为K,V来进行attention计算。shape变化情况如下:
Q * KT : (Hxd) * (dxW) -> (HxW)
(Q * KT) * V : (HxW) * (Wxd) -> (Hxd)
所以从结果来说从transformer块里面出来的输出shape和可学习seq的shape是一样的。
那么,经过了L层transformer模块后,我们获得了Hxd和Wxd的两个输出。现在怎么获得最后HxW的输出特征图呢?
HxW输出特征图的每一个像素点(i,j)的值是第i行行输出的结果与第j列列输出的结果之和。
3.grouping & pooling
为了进一步减少计算复杂度,本文还使用了两种策略,包括分组和池化。分组和池化是独立进行的,互不干扰。就分组而言就是把输入特征图分为n组。相对应的可学习的seq也要分为n组,然后每一组进行并行的attention计算,最后得到分组输出。就池化来说,将输入特征图池化,注意这时候没有分组,依然是一张特征图,然后再与没有分组的seq进行attention计算。最后得到输出,将分组的输出与池化的输出相加可得最后的结果。
4.Row-wise positional encodings
下面我们专门介绍一下位置编码是怎么处理的。首先取一个hxd的向量,如果不考虑维度的话,它就是一个h高的一维向量,它的值按原生transformer的位置编码所使用的正弦函数来取。我们将它复制w遍,这样他就有hxwxd,然后按行flatten,shape就能和行seq.R对应上了。下图是简要版的示意图。如果h=3,w=4.就会变成下图这样。那Qseq的位置编码呢?则使用hxd的向量使用线性插值上采样到Hxd就吻合Qseq的shape了。列的位置编码可以类推。上述过程就是绝对位置编码与flatten后的输入对齐的过程。