Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

本文通过将CNN引入ViT以提升ViT的效率

摘要

本文主要通过两种手段将CNN与ViT的优势结合:

  1. a hierarchy of Transformers containing a new convolutional token embedding
  2. a convolutional Transformer block leveraging a convolutional projection

这一工作即引入了CNN的优点,如平移不变性、shift、scale

同时保留了Transformer的优点,例如动态注意力(dynamic attention)、全局视野(global context)、better generalization

并且本文证明位置编码在该模型中可以被去除。

引言

本文提出虽然ViT在大数据集上训练得到了非常好的结果,但其在小数据集上的训练接过仍然劣与ResNet,并给出了如下原因:

ViT缺少一些CNN结构自带的适合于视觉任务的某些理想的特性,例如图片包含很强的2D位置结构,特别是邻近的像素具有强相关性。

CNN利用共享权重(shared weights)、特殊的降采样(spatial subsampling)、感受野(local receptive fields)来利用这些特性。同时CNN的多层级卷积核结构也利于提取不同视野中的特性。

CvT将CNN引入到ViT中的两个核心区域:

  1. 首先将Transformer拆分为多个层级stage,每个stage的包含一个convolutional token embedding,该模块的作用是将overlapping convolution operation with stride作用在一个2D的token map上,例如将展平的token序列变回空间形式。随后进行一次Layer Norm。这使得模型不仅能关注局部信息,同时还能渐进式地降低序列的长度,同时增加token的维度。从而实现一种特殊的下采样,同时增加feature map的数量。
  2. 其次,每个self-attention前的一个线性投影层被替换为了本文提出的**卷积投影层(convolutional projection)**,本层提供一个$s \times s$**深度可分离卷积(Depth-wise separable convolution)**,见附录,做用在一个2D-reshaped token map上。本文认为这一的做法能让模型更深入的捕捉空间信息,并且减少注意力机制的语义歧义。卷积过程中卷积核的步长可以对Key和Value进行下采样,从而提升4倍或更多的效率,而只带来了非常小的性能损耗。

分文通过实验证明了在本模型中,可以去掉位置编码,且并不会导致模型效果减弱。

结论

本文提出了一个能够结合Transformer和CNN有点的网络,并用大量的实验论证了convolutional token embedding和convolutional projection,以及多阶段设计的网络结构能够达到优越的效果,同时保持了计算效率,CvT不再需要位置编码,即能够在适应各种需要可变输入分辨率的视觉任务方面具有潜在的优势。

相关工作

ViT相关论文

DeiT

挖掘了如何才有更高效的训练方式以及只是蒸馏等方法来训练ViT

CPVT

Conditional Position encodings

使用了conditional position encodings(CPE)代替ViT中的位置编码,使得Transformer能够处理任何大小的输入,而不做插值

TNT

Transformer-iN-Transformer

一个outer Transformer block,处理patch embedding

一个inter Transformer block,处理pixel embedding之间的关系,处理patch层级和pixel层级的表示

T2T

Tokens-to-tokens

这一工作主要提升了ViT中的image to token的部分,使用滑动窗口将多个token合并为一个。但这一方法从本质上与convolutions是有区别的,特别是在normalization details上, 并且对token的合并极大的增加了计算复杂度和内存占用

PVT

将multi-stage的设计与Transformer结合(没有引入convolutions),从而使得ViT更适合dense预测任务

模型对比

image-20230220095226633

将self-attention引入CNN

BotNet

提出了一种使用全局自注意力(global self-attention)替换ResNet中最后三个块(bottleneck blocks)中的psatial convolutions,从在图像识别上取得了很好的效果。

将CNN引入Transformer

CVPR 2021 Evolving Attention with Residual Convolutions这篇文章提出了使用残差连接传递attention map的方法。

工作

总体结构

image-20230220131804068

本文想Transformer引入了两个基于CNN的块:

  1. Convolutional Tolen Embedding
  2. Convolutional Projection

本文所采用的类似CNN的多层级结构,源自论文Object recognition with gradient-based learning和论文Deep residual learning for image recognition。

本模型分为三个Stage,每个stage被分为两个部分:

  1. 首先,输入图片或feature map会被输入到Convolutional Token Embedding layer中,该层次由一个重叠卷积构成,并将token重塑成2D空间网格。其中增加了一个额外的layer normalization从而使得各个stage逐级减少token的数量,同时增加token的长度,达到空间下采样和增加表达丰富度的效果。与之前的工作相比,本实验不需要引入位置编码。
  2. 其次,结果会被输入到一个Convolutional Transformer块中,该块使用了一个depth-wise separable convolution操作,作为卷积投影,得到query 和 key和value的embedding表示,并且classification token只在最后一个stage中被添加

最后一个MLP头被用作分类器,基于classification token进行分类。

Convolutional Token Embedding

对于一个2D图像或2D token map $x_{i-1} \in R^{H_{i-1} \times W_{i-1} \times C_{i-1}}$的i-1层输出,模型学习一个映射f能够将$x_{i-1}$映射到一个具有通道数为$C_i$的token$f(x_{i-1})$

其中f是一个$s \times s$的卷积核,stride为$s-o$,padding为$p$

$f(x_{i-1})$的形状为$H_i = \lfloor \frac{H_{i-1} + 2p -s}{s-o} + 1 \rfloor, W_i = \lfloor \frac{W_{i-1} + 2p -s}{s-o} + 1 \rfloor, C_i$

随后进入LN层进行归一化操作。

Convolutional Projection for Attention

token先被reshape为2D的token map,然后使用depth-wise separable convolution的size为s的卷积核进行卷积,最后token被展平为1D序列,使用数学表示为:

$x_i^{q/k/v} = Flatten(Conv2d(Reshape2D(x_i), s))$

其中Conv2d过程如下:

$Depth-wise \ Conv2d \to BatchNorm2d \to point-wise \ Conv2d$

s为核大小。

效率

image-20230220200824830

本文提到模型有两处提升效率的策略:

  1. 使用depth-wise separable convolution代替传统卷积操作从而降低时空复杂度
  2. 引入Convolutional Projection来降低MHSA操作的复杂度,如上图所示,使用了步长为2的卷积核来处理key 和 value,而使用了步长为1的卷积核处理query。

使用步长为2的卷积核来处理key和value能使得key和value缩小4倍,因此计算MHSA的复杂度也将降低四倍。这一操作带来的性能损耗是非常小的。本文给出的原因是临近的像素或patch在形态和语义上存在冗余。此外,由于分辨率下降造成的信息丢失,将会由ConvolutionalProjection对图片上下文的建模来补偿。

实验

本次实验采用ImageNet数据集,带有1.3M的图片和1k个分类。以及它的超集ImageNet-22K,包含22K个分类和14M大小的图片对模型进行与训练。然后再CIFAR-10/100,Oxford-IIIT-Pet,Oxford-IIIT-Flower数据集上进行迁移学习。

本文使用CvT-13和CvT-21作为基础模型,其中13和21分别代表Transformer block的数量,此外还构建了规模更大的模型CvT-W24,W代表宽度,这意味着每个stage将接受更大的token。

训练采用的优化器为AdamW,CvT-13配置的weight decay为0.05,CvT-21和CvT-W24配置为0.1。初始的学习率为0.02,batch size为2048, 训练300轮。训练过程使用余弦学习率衰减策略。

Fine-tuning使用了与ViT一样的SGD优化器,momentum设置为0.9,batch size为512,再ImageNet-1K上使用20000steps,CIFAR-10和CIFAR-100上使用10000个steps,Oxford-IIIT Pets和Oxford-IIIT flowers-102上采用500个steps

image-20230221094506994

消融实验

位置编码

通过实验证明了使用位置编码并不会对效果造成任何影响。本实验使用了DeiT-S进行对比实验,实验去除了DeiT-S的Position Embedding,造成了效果的下降,但对CvT-13的实验包含了为每个stage添加Position Embedding、只给第一个stage添加Position Embedding、只给最后一个Stage添加Position Embedding、不添加Position Embedding,都不会对最后的效果造成影响。

另外本文通过使用non-overlapping Patch Embedding替换了本文提出的Convolutional Token Embedding,这一操作导致了准确率下降了0.8%,之后作者为替换后的模型加入position embedding,的带看0.4%的准确率提升,而,作者继续加入Convolutional Token Embedding,得到了0.3%的准确率提升,最后作者删去添加的position embedding,结果是性能继续提升了0.1%左右。因此作者认为Convolutional Token Embedding不仅提升了性能,而且能够代替Position Embedding

Convolutional Projection

本文首先对Convolutional Projection中卷积核使用的步长进行了实验,分别在对key和value进行卷积操作时,使用步长为1,和步长为2的模型进行训练,发现步长为2时,会导致精度下降0.3%,但伴随着30%的复杂度降低。因此本文对key和value采用步长为2的卷积操作。

接着本文使用Position-wise Linear Projection替换本文提出的该模块进行实验,准确率由81.5%下降为80.6%。并且会随着更多stage使用本文提出的模块而获得更高的准确率。

评论