3 CvT 核心原理
图2 CvT架构的PipLine
CvT的整体Pipline如图2所示。在ViT架构中引入了2种基于卷积的操作,即卷积Token嵌入和卷积映射。如图2(a)所示,本文借鉴了CNN的多阶段层次设计,共采用了3个阶段:
- 首先,输入图像经过卷积Token嵌入层,卷积层是将重构Token的重叠块卷积到二维空间网格作为输入(重叠程度可通过步长来控制)。对Token应用额外的LN(层归一化)。这允许每个阶段逐步减少Token的数量(即特征分辨率),同时增加Token的宽度(即特征维度),从而实现空间下采样和增加R的丰富度。与其他先前的基于变压器的架构不同,我们不将嵌入令牌的额外位置相加。
- 然后,叠加一些卷积Transformer Block组成每个阶段的残差部分。图2(b)展示了卷积Transformer Block的架构,其中使用深度可分离的卷积运算,称为卷积映射,分别用于查询、键和值的嵌入,而不是ViT中标准的位置线性映射。此外,分类Token只在最后阶段添加。
- 最后,在最后阶段输出的分类标记上使用MLP来预测结果。
3.1 卷积Token Embedding
CvT中的卷积操作旨在通过一种类似CNNs的多级层次方法从Low-level到High-Semantic模拟局部空间Context。
给定一个2D图像或者从第阶段得到的2D-reshaped Token Map输出作为第阶段的输入,这里通过学习一个函数将映射到一个新的通道大小为的Token ,的二维卷积核大小为,stride为,padding为p。
新的Token Map 的高度和宽度为:
然后将平铺成大小为,并通过LN进行归一化,以便输入到第i stage的subsequent Transformer blocks中。
卷积Token嵌入层允许通过改变卷积运算的参数来调整每个阶段的Token特征维数和数量。通过这种方式,在每个阶段逐步减少Token序列长度,同时增加Token特征维数。这使得Token能够在越来越大的空间上表示越来越复杂的视觉模式,类似于CNN的特征层。
3.2 注意力的卷积映射
卷积投影层的目标是实现对局部空间Context的额外建模,并通过允许K和V矩阵的欠采样来提高效率。
从根本上说,提出的Transformer块具有卷积映射是对原Transformer块的推广。而之前的工作尝试在Transformer中添加额外的卷积模块对于语音识别和自然语言处理,它们导致更复杂的设计和额外的计算成本。相反,本文建议用具有深度可分离卷积的Multi-Head Self-Attention(MHSA)代替原来的位置线性映射进而形成卷积映射层。
1 复现细节
图3(a) ViT中的线性映射
图3(a)显示了ViT中使用的原始位置线性映射
图3(b) 卷积映射
图3(c) 压缩卷积映射
图3(b)显示了本文提出的s×s卷积投影。如图3(b)所示,首先将Token重塑为2D Token Map。接下来,使用核大小为s的深度可分离卷积层来实现卷积映射。最后,映射后的Token被平展为1D以供后续处理。这可以表述为:
其中是第层Q/K/V矩阵的Token输入,是卷积投影之前的未扰动Token,Conv2d是深度可分离卷积,其实现方式为:Depth-wise Conv2d—>BatchNorm2d—>Point-wise Conv2d,s为卷积核大小。新的卷积映射层Transformer块是对原有Transformer块设计的推广。原始的基于位置的线性映射层可以使用内核大小为1×1的卷积层来实现。
2 效率考虑
本文设计的卷积投影层有2个效率上的好处:
- 首先,利用了有效的卷积。直接使用标准的卷积进行卷积映射需要个参数和的FLOPs,其中C是Token通道维数,T是要处理的Token数量。相反,将标准的卷积分解为深度可分离的卷积。这样,与原始的位置线性映射相比每个卷积映射只会引入额外的个参数和的FLOPs,相对于模型的总参数和FLOPs,这些都可以忽略。
- 其次,利用提出的卷积投影来减少MHSA操作的计算成本。卷积投影允许通过使用大于1的步长来减少Token的数量。图3(c)显示了卷积投影,其中的key和value投影是通过步长大于1的卷积进行下采样的,文章对key和value投影使用步长2,而对query保持不变使用步长1。这样,key和value的token数量减少了4倍,以后的MHSA操作计算成本减少了4倍。这带来了最小的性能损失,因为图像中的邻近像素/补丁往往在外观/语义上有冗余。另外,所提出的卷积投影的局部Context建模可以弥补分辨率降低所带来的信息损失。
3.3 方法的讨论
1 删除位置嵌入
对每个Transformer块引入卷积映射结合卷积Token嵌入能够通过网络建模局部空间关系。这个内置属性允许在不影响性能的情况下删除网络中嵌入的位置,从而简化了具有可变输入分辨率的视觉任务的设计。
2 与当前一些工作的关系
最近,另外两个相关的工作也提出通过将CNN的元素整合到Transformer中来改进ViT。Tokensto-Token ViT实现渐进的Token化,然后使用基于Transformer的Backbone,其中Token的长度是固定的。
相比之下CvT通过在每个阶段包含卷积Token嵌入和卷积Transformer块的多阶段过程来实现渐进的Token化。随着Token的长度在每一阶段的减少,Token的宽度(特征维度)可以增加,允许在每个特征空间分辨率上表示的丰富度增加。
此外,T2T将相邻的Token连接成一个新的Token,导致内存和计算的复杂性增加,而CvT使用卷积Token嵌入直接执行Context学习,而无需连接,同时提供了控制步长和特征维数的灵活性。为了管理复杂性,T2T必须考虑一个深度狭窄的架构设计,其隐藏维度和MLP规模小于后续主干中的ViT。相反,CvT通过用卷积投影替换位置相关的线性投影来更改先前的Transformer模块。
金字塔ViT(PVT)克服了将ViT移植到各种密集预测任务中的困难。在ViT中,输出的特征图只有一个尺度分辨率较低。此外,即使对于普通的输入图像大小,计算和存储成本也相对较高。为了解决这个问题,PVT和CvT从CNN到Transformer结构都采用了金字塔结构。PVT只对投影中的特征映射或key/value矩阵进行空间子样本,而CvT采用了带大步的卷积来实现这一目标。实验表明局部邻近信息的融合对性能有重要的影响。
4 实验结果
4.1 模型架构
表2 基于ImageNet分类的架构
输入的图像大小默认为224×224。Conv. Embed.:卷积Token嵌入。Conv. Proj.:卷积映射。和为第i个MHSA模块中Head的个数和嵌入特征维数。是第i个MLP层的特征维度的扩展比。
表3 不同架构在ImageNet、ImageNet Real和ImageNet V2上的准确性
与基于CNN的模型相比,CvT进一步缩小了基于Transformer模型的性能差距。最小的模型cpt-13具有20M参数和4.5G FLOPs,在ImageNet top-1精度上比大型的ResNet-152模型高出3.2%,而ResNet-151的参数是cpt-13的3倍。
此外,当使用更多数据时,在ImageNet-22k上预训练的宽模型CvT-W24*达到在没有额外数据训练的情况下在ImageNet上获得了87.7%的Top-1精度,以相似的模型参数和FLOPs数量比最佳模型ViT-L/16高出2.5%。
5 参考
[1].CvT: Introducing Convolutions to Vision Transformers
[2].https://github.com/leoxiaobin/CvT
6 推荐阅读
CVPR2021全新Backbone | ReXNet在CV全任务以超低FLOPs达到SOTA水平(文末下载论文和源码)
你的YOLO V4该换了 | YOLO V4原班人马改进Scaled YOLO V4,已开源(附论文+源码)
CVPR2021-即插即用 | Coordinate Attention详解与CA Block实现(文末获取论文原文)
Backbone | 谷歌提出LambdaNetworks:无需注意力让网络更快更强(文末获取论文源码)