这是博主在五一期间对Transformer几篇相关论文阅读的小笔记和总结
也借鉴参考了很多大佬的优秀文章,链接贴在文章下方,推荐大家前去阅读
该文章只是简单叙述几个Transformer模型的基本框架,对其详细信息(如实验情况等)请阅读论文或点击下方对应文章链接前往阅读
A Survey on Visual Transformer[1]
Transformers in Vision: A Survey[2]
An Image Is Worth 16X16 Words: Transformers for Image Recognition at Scale[3]
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows[4]
Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions[5]
Transformer in Transformer[6]
ConvBERT: Improving BERT with Span-based Dynamic Convolution[7]
Tokens-to-Token ViT: Training Vision Transformers from Scratch on ImageNet[8]
AutoTrans: Automating Transformer Design via Reinforced Architecture Search[9]
[1],[2]讲述了目前Visual Transformer的爆火和Transformer在CV方面的各种应用,
虽然Transformer爆火,但目前CV领域还是由CNN主导
但人们依然很看好Transformer在CV领域的应用于前景,希望将Transformer迁移到CV领域中,
主要分为两大类
[3]提出VIT模型,应用于CV领域的Image Classification,在大规模数据上训练的得到的模型达到不错的效果
[4]提出Swin Transformer模型,基于VIT模型的改进,应用于Image classification,Object detection,Semantic segmentation
[5]提出Pyramid Vision Transformer模型,基于VIT模型的改进,应用于Object detection,Semantic segmentation
[6]提出Transformer in Transformer模型,应用于Image benchmark and downstream tasks
[7]提出ConvBERT模型,基于BERT的预训练语言模型
[8]提出Tokens-to-Token ViT模型,基于VIT模型改进
[9]讨论了Transformer Model 的自动化设计,对于layer-norm的位置,个数,attention head 的个数,使用哪个激活函数的问题
VIT是早期提出用于CV中Image classification的结构,虽然存在着不足,但对最近Swin Transformer,Pyramid Vision Transformer等模型提出提供了宝贵经验。
Transformer在NLP中处理的是序列化的数据,而CV中处理的是三维的图像数据(H,W,C)
所以,VIT提出了Patch划分的方法,将三维图像数据转化为序列化数据
将图像转化为序列化数据
对于一张 H × W × C H \times W \times C H×W×C的图片,采用 P × P P \times P P×P的Patch来划分,得到 N = H P × W P N=\frac{H}{P} \times \frac{W}{P} N=PH×PW个patch( P × P × C P\times P\times C P×P×C),reshape后得到维度 P 2 C P^2C P2C的Flattened Patch(向量),对N个Flattened Patch进行concat之后得到一个 N × ( P 2 C ) N\times (P^2C) N×(P2C)的二维矩阵,相对于NLP中输入Transformer的Word Embedding
综上,原本 H × W × C H \times W \times C H×W×C的图片转化为了 N 个 D N个D N个D维向量(或一个 N × D N \times D N×D的二维矩阵)
Position embedding
Learnable embedding
Transformer Encoder
第一层输入, x x x表示一个Patch, E E E表示Linear Projection转化矩阵
z 0 = [ x c l a s s ; x p 1 E ; . . . x p N E ] + E p o s E ∈ R ( P 2 ⋅ C ) × D , E p o s ∈ R ( N + 1 ) × D z_0=[x_{class};x^1_pE;...x_p^NE]+E_{pos}\\ E\in \Bbb R^{(P^2·C)\times D},E_{pos}\in \Bbb R^{(N+1)\times D} z0=[xclass;xp1E;...xpNE]+EposE∈R(P2⋅C)×D,Epos∈R(N+1)×D
对于第 l l l层
z l ′ = M S A ( L N ( z l − 1 ) ) + z l − 1 z l = M L P ( L N ( z l ′ ) ) + z l ′ l = 1... L z^{'}_l=MSA(LN(z_{l-1}))+z_{l-1}\\ z_l=MLP(LN(z^{'}_l))+z^{'}_l\\ l = 1...L zl′=MSA(LN(zl−1))+zl−1zl=MLP(LN(zl′))+zl′l=1...L
在中等大小的数据集(如 ImageNet)上训练得到的VIT模型准确率低于CNN模型
Swin Transformer基于VIT进行了改进,可以作为通用backone,应用于Image classification,Object detection,Semantic segmentation
创新
- 引入stage,随着网络深度增加,合并patch
- 使用基于Shifted Windows的W-MSA替换标准的MSA
- 提出Shifted Window划分
引入4个stage,每个stage的操作类似于上述的VIT模型
区别
Swin随着网络深度的加深,patch的数量在不断减少,且每个patch的感知范围在不断扩大,而VIT模型的patch保持不变
Patch Partition:如VIT模型将图像转化为序列化数据,将原始图像划分为一个个Patch,但彼此不重叠
Stage1
Stage2
Stage3,Stage4
每个window包含 M × M M \times M M×M个patch,整个图像包含 h × w h \times w h×w个patch,总共 h 4 × w 4 \frac{h}{4} \times \frac{w}{4} 4h×4w个Patch
复杂度计算
Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 h w C \Omega(MSA) = 4hwC^2 + 2(hw)^2C\\ \Omega(W-MSA)=4hwC^2 + 2M^2hwC Ω(MSA)=4hwC2+2(hw)2CΩ(W−MSA)=4hwC2+2M2hwC
当 M M M固定大小时, Ω ( W − M S A ) \Omega(W-MSA) Ω(W−MSA)为线性增长
在连续的Swin Transformer Block之间交替进行两种划分配置,进而保持 non-overlapped windows 的高效计算同时引入 cross-window connection
存在问题
解决方案
Cyclic Shift
经过循环填补,Layer2的window划分类似于Layer1,此时的batch window由不相邻的sub-window构成,采用masking mechanism来限制seft attention在sub-window中的计算
图像分类上比ViT、DeiT等Transformer类型的网络效果更好,但是比不过CNN类型的EfficientNet,猜测Swin Transformer还是更加适用于更加复杂、尺度变化更多的任务。
Swin Transformer没有提供类似反卷积的上采样的算法
每一个window的Q,K,V都是独立的,即没有CNN的权值共享特性
Pyramid Vision Transformer同样基于VIT模型进行改进,是一种使用Transformer模型的无卷积骨干网络,主要用于除图像分类外的密集预测任务。
创新
- 引入stage,随着网络深度增加,Feature Map的分辨率,逐渐减小,Channel数,逐渐增大
- 使用**spatial-reduction attention(SRA)**替换标准的MSA
SRA的核心是减少K与V的空间规模,也就是
处理过程
S R A ( Q , K , V ) = C o n c a t ( h e a d 0 , . . . , h e a d N i ) W o h e a d j = A t t e n t i o n ( Q W j Q , S R ( K ) W j V , S R ( V ) W j V ) SRA(Q,K,V)=Concat(head_0,...,head_{N_{i}})W^o\\ head_j=Attention(QW_j^Q,SR(K)W_j^V,SR(V)W_j^V) SRA(Q,K,V)=Concat(head0,...,headNi)Woheadj=Attention(QWjQ,SR(K)WjV,SR(V)WjV)
SR(·)为spatial-reduction operation, W s W^s Ws是一个linear projection,它把input sequence的维度降到 C i C_i Ci。
S R ( x ) = N o r m ( R e s h a p e ( x , R i ) W s ) SR(x)=Norm(Reshape(x,R_i)W^s) SR(x)=Norm(Reshape(x,Ri)Ws)
Transformer in Transformer,用于视觉识别
创新
- Inner Transformer Block用于提取pixel embedding的局部结构信息
- Outer Transformer Block用于提取patch embedding的全局信息
- 通过Linear Projection将pixel embedding投影到patch embedding space
将输入图像划分为一个个Patch,
Unfold & Linear:将输入的Patch,转换为对应的Patch Embedding,Pixel Embedding
Patch
γ 0 = [ Y 0 1 , . . . Y 0 n ] ∈ R n × p ′ × p ′ × c Y 0 i ∈ R p ′ × p ′ × c \gamma_0=[Y_0^1,...Y_0^n]\in\Bbb R^{n \times p^{'}\times p^{'} \times c}\\ Y_0^i\in \Bbb R^{p^{'}\times p^{'} \times c} γ0=[Y01,...Y0n]∈Rn×p′×p′×cY0i∈Rp′×p′×c
Pixel
Y 0 i = [ y 0 i , 1 , . . . , y 0 i , m ] m = p ′ 2 Y_0^i=[y_0^{i,1},...,y_0^{i,m}]\\ m=p^{'2} Y0i=[y0i,1,...,y0i,m]m=p′2
TNT Block
inner transformer block
Y l ′ i = Y l − 1 i + M S A ( L N ( Y l − 1 i ) ) Y l i = Y l ′ i + M L P ( L N ( Y l ′ i ) ) Y_l^{'i}=Y_{l-1}^{i}+MSA(LN(Y_{l-1}^{i}))\\ Y_l^{i}=Y_{l}^{'i}+MLP(LN(Y_{l}^{'i}))\\ Yl′i=Yl−1i+MSA(LN(Yl−1i))Yli=Yl′i+MLP(LN(Yl′i))
outer transformer block 输入, V e c ( ) Vec() Vec()将Pixel展开成向量,b为bias
Z l − 1 i = Z l − 1 i + V e c ( Y l − 1 i ) W l − 1 + b l − 1 Z_{l-1}^i=Z_{l-1}^i+Vec(Y_{l-1}^{i})W_{l-1}+b_{l-1} Zl−1i=Zl−1i+Vec(Yl−1i)Wl−1+bl−1
outer transformer block
Z l ′ i = Z l − 1 i + M S A ( L N ( Z l − 1 i ) ) Z l i = Z l ′ i + M L P ( L N ( Z l ′ i ) ) Z_l^{'i}=Z_{l-1}^{i}+MSA(LN(Z_{l-1}^{i}))\\ Z_l^{i}=Z_{l}^{'i}+MLP(LN(Z_{l}^{'i}))\\ Zl′i=Zl−1i+MSA(LN(Zl−1i))Zli=Zl′i+MLP(LN(Zl′i))
TNT block
γ l , Z l = T N T ( γ l − 1 , Z l − 1 ) \gamma_l,Z_l=TNT(\gamma_{l-1},Z_{l-1}) γl,Zl=TNT(γl−1,Zl−1)
ConvBERT是一种基于span的动态卷积模型
self-attention:使用所有token来捕获全局依赖关系,但由观察得知,BERT模型学习的更多是局部依赖关系
dynamic convolution:使用一个Kernel Generator来为每一个word embedding生成自己的Kernel
span-based dynamic convolution:通过输入的word embedding和其周围的word embedding结合来生成Kernel
Span-based dynamic convolution
生成dynamic Kernel
f ( Q , K s ) = s o f t m a x ( W f ( Q ∘ K s ) ) f(Q,K_s)=softmax(W_f(Q\circ K_s)) f(Q,Ks)=softmax(Wf(Q∘Ks))
span-based dynamic convolution公式
S D C o n v ( Q , K s , V ; W f , i ) = L C o n v ( V , s o f t m a x ( W f ( Q ∘ K s ) ) , i ) SDConv(Q,K_s,V;W_f,i)=LConv(V,softmax(W_f(Q \circ K_s)),i) SDConv(Q,Ks,V;Wf,i)=LConv(V,softmax(Wf(Q∘Ks)),i)
ConvBERT架构
Bottleneck design for Self-Attention
Grouped Feed-Forward module
Tokens-to-Token Vit是基于Vit模型进行改进的
创新
- Tokens to token Module:对图像的local structure 信息进行建模,并且减少了token的长度
- re-structurization
- soft split
- T2T-ViT backone:应用了deep-narrow结构,减少了attention冗余,提高feature richness
Tokens to token Module
Re-structurization
对输入进行传统Transformer处理
T ′ = M L P ( M S A ( T ) ) T^{'}=MLP(MSA(T)) T′=MLP(MSA(T))
Reshape:将 T ′ ∈ R l × c T^{'}\in \Bbb R^{l\times c} T′∈Rl×c转为 I ∈ R h × w × c I \in \Bbb R^{h \times w\times c} I∈Rh×w×c
I = R e s h a p e ( T ′ ) I=Reshape(T^{'}) I=Reshape(T′)
Soft Split
建立local structure信息,减少token长度 l l l
避免re-structurization过程中信息丢失,在split中采取overlap机制,将每一个patch与其周围的patch联系起来,从而捕获周围pixel和patch的信息
l 0 = ⌊ h + 2 p − k k − s + 1 ⌋ × ⌊ w + 2 p − k k − s + 1 ⌋ l_0=\lfloor\frac{h+2p-k}{k-s}+1 \rfloor \times \lfloor\frac{w+2p-k}{k-s}+1 \rfloor l0=⌊k−sh+2p−k+1⌋×⌊k−sw+2p−k+1⌋
T i + 1 = S S ( T i ) T_{i+1}=SS(T_i) Ti+1=SS(Ti)
T2T-ViT backone
感谢下列文章提供的帮助,推荐大伙们阅读
用Transformer完全替代CNN
Swin Transformer对CNN的降维打击
大白话Pyramid Vision Transformer
Transformer in Transformer论文解读
ConvBERT:使用基于区间的动态卷积来提升BERT