McGill&微软将卷积操作加入到ViT中,捕获更详细的局部信息!准确率达87.7%!代码已开源!

2021-11-19 16:14:24 浏览数 (1)

关注公众号,发现CV技术之美

本文分享论文CvT : Introducing Convolutions to Vision Transformers,由McGill&微软联合提出《CvT》,将卷积操作加入到Vision Transformer中,捕获更详细的局部信息!预训练下ImageNet Top-1准确率达到87.7%!代码已开源!

写在前面

在本文中,作者提出了一种新的结构,称为卷积视觉Transformer(CvT) ,它通过在ViT中引入卷积来提高视觉Transformer(ViT)的性能和效率。这是通过两个主要修改来实现的:包含卷积token嵌入的Transformer层次结构 ,以及利用卷积投影的卷积Transformer

这些变化将卷积神经网络(CNN)的理想特性引入ViT结构(即平移不变性、缩放不变性),同时保持Transformer的优点(即动态注意力、全局上下文和更好的泛化性能)。作者通过大量实验表明,与ImageNet-1k上的其他视觉Transformer和ResNet相比,CvT实现了SOTA的性能,并且具有更少的参数和更低的FLOPs。

此外,在对更大的数据集(如ImageNet-22k)进行预训练并对下游任务进行微调时,CvT可以保持性能提升。CvT-W24在ImageNet-22k上进行预训练,在ImageNet-1k val集上获得了87.7%的Top-1精度。最后,本文的结果表明,位置编码可以在CvT中被删除,简化了高分辨率视觉任务的设计。

1. 论文和代码地址

CvT: Introducing Convolutions to Vision Transformers

论文地址:https://arxiv.org/abs/2103.15808

代码地址:https://github.com/leoxiaobin/CvT

2. Motivation

Transformer最近在自然语言处理(NLP)的一系列任务中占据主导地位。视觉Transformer(ViT)是第一个完全依赖Transformer结构的计算机视觉模型,以在大规模数据集上获得具有竞争力的图像分类性能。

在ViT中,首先,将图像分割为离散的非重叠patch。然后,这些patch被视为token(类似于NLP中的token),并使用特殊的位置编码进行求和以表示粗略的空间信息,然后输入到重复的标准Transformer层中以建模全局关系以进行分类。

尽管视觉Transformer在大规模数据集上取得了成功,但在对少量数据进行训练时,其性能仍低于卷积神经网络(CNN)。一个原因可能是ViT缺乏CNN结构固有的某些理想特性,这些特性使CNN特别适合解决视觉任务。

例如,图像具有很强的2D局部结构:空间上相邻的像素通常高度相关。CNN通过使用局部感受野、共享权重和空间降采样,强制捕获该局部结构,从而实现一定程度的平移、缩放不变性。此外,卷积核的层次结构能够学习特定的视觉模式,该模式考虑了不同复杂程度的局部空间上下文,从简单的低级边缘和纹理到高阶语义模式。

在本文中,作者认为可以将卷积引入ViT结构,以提高性能和鲁棒性,同时保持较高的计算和内存效率。为了验证这一假设,作者提出了一种新的架构,称为卷积视觉Transformer(CvT) ,它将卷积合并到Transformer中,在浮点运算(FLOPs)和参数方面都具有更高的效率。

CvT设计将卷积引入到了ViT结构的两个核心部分。首先,作者将Transformer划分为多个阶段,形成Transformer的层次结构。每个阶段的开始包括一个卷积token嵌入(convolutional token embedding) ,该嵌入先在二维的token map上进行卷积操作,然后进行层归一化。这使得该模型不仅能够捕获局部信息,而且还可以逐步减少序列长度,同时跨阶段增加token特征的维度。

其次,将Transformer模块中每个自注意力块之前的线性投影替换为本文提出的卷积投影(convolutional projection) ,该卷积投影在二维的token map上进行的深度可分离卷积。这使得模型能够进一步捕获局部空间上下文,并减少注意力机制中的语义歧义。这还使得计算复杂度大大降低,因为步长不为1的卷积可以对key和value矩阵进行降采样,以将效率提高4倍或更多。

总的来说,本文提出的卷积视觉Transformer(CvT)利用了CNN的所有优点:局部感受野、共享权重和空间降采样,同时保留了Transformer的所有优点:动态注意、全局上下文融合和更好的泛化性能。

3. 方法

卷积视觉Transformer(CvT)的pipeline如上图所示。作者将两种基于卷积的操作引入到视觉Transformer结构中,即卷积token嵌入卷积投影 。如上图(a)所示,作者采用了CNN的多阶段层次设计,CvT共使用了三个阶段,每个阶段有两个部分。

首先,输入图像或token map输入到卷积token嵌入 层中,该层是由卷积操作实现的,然后在结果上施加一次归一化操作。这使得每个阶段能够逐步减少token的数量(即特征分辨率),同时增加token的宽度(即特征维度),从而实现空间下采样和增加表示的丰富性。与先前基于Transformer的结构不同,作者不将位置嵌入加入到token中。

接下来,卷积Transformer块 用于剩下的操作。上图(b)显示了卷积Transformer块的结构,其中一个深度可分离卷积运算,称为卷积投影 ,分别用于query、key和value嵌入,来替代ViT中的线性投影。此外,分类token仅添加在最后一个stage。最后,在最后一个stage输出的分类token上使用MLP head来预测类别。

3.1. Convolutional Token Embedding

CvT中的卷积运算旨在通过多阶段层次方法对局部空间上下文进行建模。形式上,2D图片或上一个stage的输出为第个stage的输入,模型学习了一个函数从而将作为输入,得到。是卷积核大小为,步长,padding为的二维卷积运算。新的token map的宽和高分别为:

H_{i}=leftlfloorfrac{H_{i-1} 2 p-s}{s-o} 1right], W_{i}=leftlfloorfrac{W_{i-1} 2 p-s}{s-o} 1right]
H_{i}=leftlfloorfrac{H_{i-1} 2 p-s}{s-o} 1right], W_{i}=leftlfloorfrac{W_{i-1} 2 p-s}{s-o} 1right]

然后被展平为,并通过LayerNorm行归一化,以输入到后续Transformer块中。卷积token嵌入 层使得我们可以通过改变卷积操作的参数来调整token特征维度和每个阶段的token数量。以这种方式,在每个阶段中,我们可以逐步减少token序列长度,同时增加token特征维度。这使得token能够在越来越大的空间上表示越来越复杂的视觉模式。

3.2. Convolutional Projection for Attention

本文提出的卷积投影层 的目标是实现局部空间上下文的额外建模,并通过对K和V矩阵进行下采样来提供更高的效率。卷积投影Transformer块是原始Transformer块的拓展,虽然之前的工作试图在Transformer块中添加额外的卷积模块,用于语音识别和自然语言处理,但它们会导致更复杂的设计和额外的计算成本。而本文中,作者提出用深度可分离卷积代替原来的多头自注意(MHSA)的线性投影,形成卷积投影层。

3.2.1 Implementation Details

上图(a)展示了ViT中的线性投影,(b)展示了本文的卷积投影。如上图(b)所示,首先将token reshape为2D的token map。接下来,使用核大小为的深度可分离卷积层来实现卷积投影。最后,将投影的token展平为1D,以便后续处理。可以表示为:

x_{i}^{q / k / v}=text { Flatten }left(operatorname{Conv} 2 dleft(operatorname{Reshape2D}left(x_{i}right), sright)right)
x_{i}^{q / k / v}=text { Flatten }left(operatorname{Conv} 2 dleft(operatorname{Reshape2D}left(x_{i}right), sright)right)

其中,为矩阵的token输入,Conv2d是深度可分离卷积,实现为,其中代表卷积核。

带卷积的Transformer块可以看做是以前Transformer块的拓展,原始的线性投影层可以使用核大小为1×1的卷积层来实现。

3.2.2 Efficiency Considerations

卷积投影层的设计有两个主要的效率优势:

首先,作者利用了高效卷积 。在卷积投影中直接使用标准的卷积,这将需要的参数和的FLOPs,其中C是token通道维度,T是token数量。作者将标准的卷积分解为深度可分离卷积。这样,与原始的线性投影相比,因此本文的卷积投影只会引入额外的个参数和的FLOPs,相对于模型的总参数和FLOPs而言,这是可以忽略的。

其次,本文利用提出的卷积投影降低了MHSA操作的计算成本 。通过使用大于1的步长,核大小为的卷积投影可以减少token的数量。上图(c)显示了卷积投影,其中key和value投影通过使用步长大于1的卷积进行下采样。

对于value和key投影,作者使用的步长为2,而对于query,保持1的步长不变。这样,key和value的token数量减少了4倍,并且对于后面的MHSA操作,计算成本减少了4倍。这会带来最小的性能损失,因为图像中的相邻像素/patch在外观/语义上往往具有冗余。此外,所提出的卷积投影的局部上下文建模弥补了分辨率降低引起的信息损失。

3.3. Methodological Discussions

Removing Positional Embeddings

卷积token嵌入卷积投影 模块的引入使得Transformer具有了局部空间信息建模的能力。因此,这种性质使得位置嵌入可以从网络中删除,从而简化了可变输入分辨率的视觉任务设计。

4.实验

4.1. Model Variants

上表展示了本文方法不同变体的设置细节。

4.2. Comparison to state of the art

上表展示了本文方法与SOTA分类方法进行比较,包括基于Transformer和CNN的模型。可以看出本文方法能够达到更高的性能。

4.3. Downstream task transfer

上表展示了在ImageNet-22k预训练之后,在其他数据集上测试的实验结果,可以看出,本文方法相比于ViT性能更佳。

4.4. Ablation Study

Removing Position Embedding

鉴于作者在模型中引入了卷积,允许捕获局部上下文,因此作者研究CvT是否仍然需要位置嵌入。上表展示了CvT为否加入位置嵌入的实验结果,可以看出对于CvT来说,有无位置嵌入影响不大,但是对于DeiT影响还是挺大的。

Convolutional Token Embedding

在上表中,作者研究了所提出的卷积token嵌入的有效性。结果表明卷积token嵌入的引入不仅提高了性能,而且有助于CvT在不嵌入位置信息的情况下建模空间关系。

Convolutional Projection

上表展示了卷积投影不同步长的实验结果,可以看出更小的步长可以达到更好的效果,但也会带来更大的计算量。

上表展示了不同阶段加入卷积投影的实验结果,可以看出,卷积投影对于实验性能的提升是有效的。

5. 总结

在这项工作中,作者详细研究了将卷积引入视觉Transformer结构,以将Transformer的优点与CNN用于图像识别任务的优点相结合。

大量实验表明,本文提出的卷积token嵌入和卷积投影,以及卷积实现的多阶段网络设计,使CvT结构在保持计算效率的同时实现了优异的性能。此外,由于卷积引入了局部上下文,因此CvT不再需要位置嵌入,这为适应需要可变输入分辨率的广泛视觉任务提供了潜在优势。

▊ 作者简介

研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。

知乎/公众号:FightingCV

END

0 人点赞