8种视觉Transformer整理(上)

一、ViT

原文链接:https://arxiv.org/pdf/2010.11929.pdf

        首先将图像分割成长宽均为P的patch(共N=HW/P^2个),然后将每个patch reshape成一个向量,得到所谓的flattened patch(记为x_p^i\in \mathbb{R}^{N\times P^2C},i=1,2,\cdots ,N)。

        为了避免模型结构受到patch size的影响,对flattened patch向量做了Linear Projection,将flattened patch向量转化为固定长度的向量(D维)。 

        此外引入额外的可学习的embedding(类似于BERT中的[class] token),第l层的记为z^0_l。Transformer输入端的该embedding(即z^0_0)为x_{\textup{class}};Transformer输出端的该embedding(即z^0_L)提供整个图像的表达y。最后的分类头总是连接在z^0_L上,从而分类头的结构与patch数量无关。 

        然后将position embedding(E_{pos}\in \mathbb{R}^{(N+1)\times D})和patch embedding相加输入到encoder中,即

z_0=[x_\textup{class};x^1_pE;x^2_pE;\cdots ;x^N_pE]+E_{pos}

其中E\in \mathbb{R}^{P^2C\times D}为权重向量。 

查了一下,BERT中的[class] token貌似是利用self attention求所有embedding的加权平均得到的

        encoder包含多头自注意力机制(MSA)、双层MLP(激活函数为GELU)、LayerNorm(LN),公式如下:

\begin{aligned} {z}'_l&=\textup{MSA}(\textup{LN}(z_{l-1}))+z_{l-1}\\ z_l&=\textup{MLP}(\textup{LN}({z}'_l))+{z}'_l\;\; \;\;\;\;\;\;\;\;\;\;\;\; l=1,\cdots ,L\\ y&=\textup{LN}(z^0_L) \end{aligned}

混合结构:使用ResNet中间层的feature map作为Transformer的输入。直接将ResNet某一中间层的2D feature map展平为序列,再通过Linear Projection变为Transformer输入的维度,然后直接输入Transformer。[class] embedding和position embedding与前面一样。

更高分辨率图像下的fine-tune:保持patch大小不变,得到的patch个数将增加(N\rightarrow {N}')。但是由于在预训练后,position embedding的个数是固定的(N),因此根据其在原始图像中的位置将预训练得到的position embedding插值为{N}'个。

二、CoAtNet

原文链接:https://arxiv.org/pdf/2106.04803.pdf

        将depthwise卷积与自注意力机制结合:

        depthwise卷积:

y_i=\sum_{j\in L(i)}w_{i-j}\odot x_j

其中L(i)i的局部邻域;w_{i-j}表示该权重仅与相对位置有关;\odot表示按元素乘法。

        自注意力机制:

y_i=\sum_{j\in G}\frac{\exp(x_i^Tx_j)}{\sum_{k\in G}\exp(x_i^Tx_k)}x_j=\sum_{j\in G}A_{i,j}x_j

其中G为全局空间。

        两者结合为

y_i^{\textup{post}}=\sum_{j\in G}\left ( \frac{\exp(x_i^Tx_j)}{\sum_{k\in G}\exp(x_i^Tx_k)}+w_{i-j} \right )x_j

y_i^{\textup{pre}}=\sum_{j\in G} \frac{\exp(x_i^Tx_j+w_{i-j})}{\sum_{k\in G}\exp(x_i^Tx_k+w_{i-k})} x_j

前者称为后归一化,后者称为预归一化。

        为避免全局卷积核的参数量爆炸,这里的w_{i-j}为标量而非矢量。

        网络结构确定:搭建5个stage的网络,实验比较(泛化性、模型容量、可迁移性)得出下图所示(卷积-卷积-Transformer-Transformer)结果最好。

2D相对注意力:实施CoAtNet的预归一化版本。设输入图像为H\times W的。对每个头(head)创建一个可训练参数P(全局卷积核?),大小为(2H-1)\times(2W-1),则(i,j)({i}',{j}')的相对偏差为P_{i-{i}'+H,j-{j}'+W}

        对于更高分辨率图像下的fine-tune,使用双线性插值将P的大小增加即可。

预激活:MBConv和Transformer都使用预激活结构,即x\leftarrow x+\textup{Module}(\textup{Norm}(x)),其中Module表示MBConv、自注意力或FFN模块;Norm表示MBConv中的BatchNorm或自注意力/FFN中的LayerNorm。GELU作为MBConv块和Transformer的激活函数。

分类头:对最后一个stage的输出,采用全局均值池化来得到表达,而非像ViT一样增加额外的<class> token 来分类。

三、CoT

原文链接:https://arxiv.org/pdf/2107.12292.pdf

        传统的KQ1\times1卷积得到,忽略了上下文信息;这里取Q=K=X;首先对K应用k\times k卷积得到K^1,称为静态上下文表示。然后与Q拼接后通过2层的MLP得到A(权重矩阵):

A=[K^1,Q]W_{\theta}W_{\delta}

然后得到K^2(称为动态上下文表示):

K^2=V\circledast A

        输出为K^1K^2通过注意力机制的融合(图中Fusion方框)。

        应用:使用CoT直接替换ResNet中的3\times3卷积。

四、CSWin Transformer

原文链接:https://arxiv.org/pdf/2107.00652.pdf

        整体结构:先用一个7\times7步长为4的卷积进行下采样;4个stage,stage之间的下采样为3\times3步长为2的卷积。

        具体实现:将K个head分为两半,一半做水平自注意力(Horizontal Self Attention),另一半做垂直自注意力(Vertical Self Attention)。

        对于水平自注意力,就是将图像分割为宽度为sw的横条,对每一个横条分别做自注意力后拼接;

X=[X^1,X^2,\cdots ,X^M],X^i\in\mathbb{R}^{(sw\times W)\times C},M=H/sw

Y^i_k=\textup{Attention}(X^iW^Q_k,X^iW^K_k,X^iW^V_k)

\textup{H-Attention}_k(X)=[Y^1_k,Y^2_k,\cdots, Y^M_k]

垂直自注意力同理。

        最后将两半head的输出拼接后通过卷积,即

\textup{CSWin-Attention}(X)=\textup{Concat}(\textup{head}_1,\textup{head}_2, \cdots, \textup{head}_K)W^O

\textup{head}_k=\left\{\begin{matrix} \textup{H-Attention}_k(X) & k=1,2,\cdots, K/2\\ \textup{V-Attention}_k(X) & k=K/2+1,\cdots, K \end{matrix}\right.

        局部增强位置编码:depth-wise卷积作用于V

\textup{Attention}(Q,K,V)=\textup{Softmax}(QK^T/\sqrt{d})V+\textup{DWConv(V)}

        CSWin Transformer块:

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值