来自清华大学的团队于2023年4月份提出的一篇论文,主要介绍了一种轻量级vision transformer架构——CloFormer,用以处理移动端的图像任务。
作者从频域编码的角度认为,现有的轻量级视觉Transformer中,大多数方法都只关注设计稀疏注意力,来有效地处理低频全局信息,而使用相对简单的方法处理高频局部信息。很少有方法尝试结合共享和上下文感知权重的优势来处理高频局部信息。
模型引入了AttnConv,将普通卷积运算中的全局共享权重和注意力操作中的上下文感知权重结合起来,相比于Transformer能够更好地捕捉高频的局部信息,相比于传统卷积操作能够更好地处理图像中不同位置的关系。
CloFormer采用两分支的结构。
局部分支中,AttnConv利用深度可分离卷积(depth-wise Convolution),其具有共享权重来提取局部特征。然后,利用上下文感知权重来增强局部特征。与以前通过局部自注意力生成上下文感知权重的方法不同,AttnConv使用门控机制生成上下文感知权重,引入了更强的非线性。
全局分支中,使用传统的注意力操作帮助模型捕捉低频的全局信息,但对K和V进行了下采样来减少参数量。
最后使用一种简单的方法来融合局部分支和全局分支的输出。
总结一下本文的创新点:
我感兴趣的点:
模型整体结构如下图所示。
CloFormer包含四个stage,每个stage由Clo Block和ConvFFN组成。
首先将输入图像通过conv stem得到token,stem由四个卷积层组成,每个卷积层的步距分别是2,2,1,1。然后通过四个stage提取分层特征。最后利用全局平均池化和全连接层来生成预测。
ConvFFN
用ConvFFN取代普通的FFN,将局部信息融入到FFN过程中。ConvFFN与普通的FFN之间的主要区别在于,ConvFFN在GeLU激活之后采用深度可分离卷积(Depth-wise Conv),这使ConvFFN能够聚合局部信息。由于使用了深度可分离卷积,ConvFFN可以直接下采样,而不需要引入PatchMerge模块。
CloFormer使用两种类型的ConvFFN。第一种是直接利用跳跃连接的In-Stage ConvFFN。另一种是两个stage的ConvFFN,在其跳跃连接中,分别利用DWConv和Full-Connected Layer对输入信息进行下采样和升维。
Clo block
Clo block由一个局部分支和一个全局分支组成。
如下图所示,在全局分支中,首先对K和V进行下采样,然后对Q、K、V执行传统注意力过程,以提取低频全局信息
X g l o b a l = A t t e n t i o n ( Q g , P o o l ( K g ) , P o o l ( V g ) ) X_{global}=Attention(Q_g,Pool(K_g),Pool(V_g)) Xglobal=Attention(Qg,Pool(Kg),Pool(Vg))
在局部分支中使用AttnConv。
全局分支有效减少了计算注意力所需的Flop的数量,并且还使模型具有全局感受野。然而,尽管它有效地捕获了低频全局信息,但它对于高频局部信息的处理有所欠缺。由此,提出AttnConv克服这一缺点。
AttnConv是使模型实现高性能的关键模块,由传统的注意操作改进而来。
与传统注意力操作相同,首先使用线性变换来获得Q、K、V:
Q , K , V = F C ( X i n ) Q,K,V=FC(X_{in}) Q,K,V=FC(Xin)
在上式中, X i n X_{in} Xin是AttnConv的输入,FC表示全连接层。进行线性变换后,首先对V进行共享权重的局部特征聚合过程,然后,基于处理后的V和Q、K,进行局部增强的上下文感知。
局部特征聚合
如下图所示,使用一个简单的深度可分离卷积来聚合V中的局部信息,DWConv的权重是全局共享的:
V a = D W c o n v ( V ) V_a=DWconv(V) Va=DWconv(V)
将V的局部信息与共享权重聚合后,结合Q和V来生成上下文感知权重。不同于前人提出的局部自注意力方法,此处更为复杂。
首先用两个DWConv分别为Q和K聚合本地信息。然后,计算Q和K矩阵的逐元素乘积(哈达玛积)。将结果映射到-1和1之间,得到上下文感知权重。最后,用生成的权重来增强局部特征。
Q l = D W c o n v ( Q ) Q_l=DWconv(Q) Ql=DWconv(Q)
K l = D W c o n v ( K ) K_l=DWconv(K) Kl=DWconv(K)
A t t n t = F C ( S w i s h ( F C ( Q l ⊙ K l ) ) ) Attn_t=FC(Swish(FC(Q_l \odot K_l))) Attnt=FC(Swish(FC(Ql⊙Kl)))
A t t n = T a n h ( A t t n t d ) Attn = Tanh(\frac{Attn_t}{\sqrt{d}}) Attn=Tanh(dAttnt)
X l o c a l = A t t n ⊙ V s X_{local}=Attn \odot V_s Xlocal=Attn⊙Vs
其中,d代表token的通道数, ⊙ \odot ⊙代表逐元素乘法(哈达玛乘积)。与普通注意力相比,Attnconv引入了更强的非线性。
局部自注意力的上下文感知权重生成过程中唯一的非线性算子是Softmax。在Attenconv中,除了Tanh,还进行了Swish。更强的非线性会导致更高质量的上下文感知权重。
与全局分支融合
在通道维度上,将两个分支的输出拼接,然后进行全连接操作。
X t = C o n c a t ( X l o c a l , X g l o b a l ) X_t=Concat(X_{local},X_{global}) Xt=Concat(Xlocal,Xglobal)
X o u t = F C ( X t ) X_{out}=FC(X_t) Xout=FC(Xt)
如下图所示,将AttnConv与传统的卷积和局部自注意力进行比较。它们都使用了残差结构,但是其主干上的结构是不同的。
传统的残差块仅依靠卷积算子来收集高频局部信息。如(a)示,每个token,卷积算子使用卷积核中国的权重对其相邻token进行加权求和。卷积核中的权重是全局共享的,并且对于不同的token保持不变。
局部自注意力
如(b)示。与卷积相比,局部自注意力使每个token能够通过特定于token的权重从其相邻token中收集信息。这种方法利用上下文感知权重来提取高频局部表示,其中不同位置的token与其相邻token计算相似度分数,根据相似度分数收集信息。
AttnConv
如(c)示。Q、K和V是通过线性变换得到的,首先使用共享权重(DWConv)对V进行信息聚合。然后,通过比传统注意力操作更强的非线性方法来生成上下文感知权重。然后使用这些权重来增强局部特征。同时利用了共享权重和上下文感知权重。
AttnConv的优势
与传统卷积相比,AttnConv中上下文感知权重的使用时模型在局部感知过程中能够更好地适应输入内容。
与局部自注意力相比,共享权重的引入使模型能够更好地处理高频信息,从而提高了性能。此外,我们的生成上下文感知权重的方法引入了比局部自我注意更强的非线性,获得了更好的性能。需要注意的是,AttnConv中使用的所有运算都是基于卷积的,保留了卷积的平移等变特性。