Rethinking Local Perception in Lightweight Vision Transformer
重新思考轻量级视觉变换器中的局部感知
1.简介
- 提出一种新的轻量级视觉 Transformer 模型 CloFormer ,通过结合共享权重 和上下文感知权重 ,更好地捕获高频局部信息。
- 解决现有方法在高频局部信息处理上的不足,同时保持低频全局信息的建模能力。
CloFormer的核心思想是通过AttnConv模块和双分支结构,结合共享权重和上下文感知权重的优势,分别处理高频局部信息和低频全局新。
其中
- AttnConv使用深度可分离卷积提取局部特征,通过非线性变换生成上下文感知权重,增强局部特征。
- 双分支结构:
- 局部分支:使用AttenConv捕获高频局部信息。
- 全局分支:使用标准注意力机制,通过池化下采样K和V,减少计算复杂度,捕获低频全局信息。
- 融合策略:将局部分支和全局分支的输出在通道维度上拼接,并通过一个全连接层进行融合。
2. 网络结构
上图是该网络的整体结构,首先通过卷积Stem处理以获得标记(tokens),该stem由四个卷积层组成,步负分别为2、2、1、1,然后进过Clo和ConvFNN提取分层特征,最后通过GAP和FC深层预测结果,下面仔细来看每个结构:
2.1 ConvFFN
ConvFNN在GELU激活函数后添加了深度可分离卷积,使得ConvFNN可以聚合局部信息,这样下采样可以直接在ConvFNN内部完成,这样就不需要向ViT那样,引入PatchMerge模块,通过合并相邻的小图像快,逐步降低空间分辨率,同时增加通道维度,从而实现多尺度特征的提取。上图可见,ConvFNN分为两种类型:
- 阶段内ConvFNN:直接利用跳跃连接。
- 夸阶段ConvFNN:用于连接两个阶段。在这种类型的ConvFNN的跳跃连接中,DWconv和全连接层分别用于对输入进行下采样和升维操作。
2.2 Clok Block
CloBlock由一个局部分支和一个全局分支组成:
- 全局分支:如上图所示,在全局分支中首先对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作为局部分支。
2.3 AttnConv
全局分支可以减少注意力机制所需的浮点运算量FLOPs,还能够实现全局感受野,这是使用AttnConv来不过高频局部信息。首先应用线性变换来获得Q、K、V, Q K V = F C ( X i n ) QKV=FC(X_{in}) QKV=FC(Xin),在现行变换后,首先对V进行基于共享权重的局部特征聚合过程,然后基于处理后的QKV执行上下文感知的局部增强。
- 局部特征聚合:使用可分离卷积来聚合局部信息(权重全局共享)。
- 上下文感知的局部增强:这里通过共享权重对V完成局部信息整合后,将Q和K结合生成上下文感知权重,这里的操作就是标准的自注意力机制,只是使用的是共享的权重矩阵。具体来说,首先使用两个DWconv分别对QK聚合局部信息,再计算QK,可以看下面公式:
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 ) ) ) Attnt=FC(Swish(FC(Q_l \bigodot 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{Attnt}{\sqrt d}) Attn=Tanh(dAttnt) X l o c a l = A t t n ⨀ V s X_{local}=Attn \bigodot V_s Xlocal=Attn⨀Vs其中d是标记通道的数量, ⨀ \bigodot ⨀是哈达玛积,在这里引入了更强的非线性,除了Tanh还有Swish操作。 - 与全局分支的融合: X t = C o n c a t ( X l o c a l , X g l o b a l ) , X o u t = F C ( X t ) X_t=Concat(X_{local},X_{global}),X_{out}=FC(X_t) Xt=Concat(Xlocal,Xglobal),Xout=FC(Xt)
3. 实验
其实观察上面的结构还是挺简单的,这里的创新点个人觉得就是提出的AttnConv,这里通过结合共享权重和上下文感知权重,可以有效的捕获高频局部信息,并且通过非线性增强上下文感知权重的质量。
这里我使用将该模块添加到解码器阶段进行语义分割,数据集采用Vaihingen,下面是分割效果图,效果还挺好的:
下面是各项指标的一个展示:
mIoU还是太差了。