总述:
本文认为ViT之所以无法直接用中等数量数据集训练取得较好效果,是因为ViT对图像进行分patch拼接成序列的处理方法太简单了,模型无法学习到图像的结构信息,并且文中通过比较ViT和CNN中间每层输出的表示也印证了这一点。因此本文提出了新的Tokenize方法,将每一层的输出再还原成一个图像,然后在图像上进行soft split。Soft split指的是有重叠的进行patch划分,这样就建立起了上一层不同patch之间的关系。通过这种方法也使得网络输入序列的长度逐层减小。
作者开篇首先指出了ViT的不足:在中小型数据集上的效果不如CNNs,并分析原因:
1. 输入图像通过硬分割的简单词语切分未能对相邻像素之间的边缘和线条等重要局部结构进行建模,导致训练样本效率低;
2. ViT的冗余注意力主干设计导致固定计算预算和有限训练样本的特征丰富度有限。
基于此,作者提出了他的模型 -- Tokens-To-Token Vi-sion Transformer (T2T-ViT)可以直接在imgNET上有比resNet更好的效果,主要变换如下:
1. 分层的 Tokens-to-Token (T2T) 转换,通过递归地将相邻的 Tokens 聚合到一个Token(Tokens-to-Token),可以对周围token表示的局部结构进行建模,减少token长度;
2. 经过实证研究后,受CNN架构设计的启发,一种用于ViT的具有深度窄结构的高效骨干网。
token指的是ViT中将原始图像或特征图切割的patches
作者通过实验,可视化了resNet和ViT的过程特征图,发现:
ResNet 的特征从底层 (conv1) 到中间层 (conv25) 逐步捕获所需的局部结构(边缘、线条、纹理等)。然而,ViT 的特征完全不同:结构信息建模不佳,而全局关系(例如,整只狗)被所有注意力块捕获。
这些观察表明,vanilla ViT 在直接将图像拆分为具有固定长度的token时忽略了局部结构。此外,我们发现 ViT 中的许多通道具有零值(在图中以红色突出显示),这意味着 ViT 的主干不如 ResNet 高效,并且在训练样本不足时提供有限的特征丰富度。
基于此研究,作者提出了他的改进策略:
1. 提出了一种渐进式词语切分(tokenization)模块用于替代ViT中简单词语切分,它将相邻的tokens聚合到一个token,即tokens to token(注意复数和单数变化),它可以对周围tokens的局部结构信息进行建模并减少迭代的token长度。具体来说,在每个 Tokens-to-Token (T2T) 步骤中,transformer 层输出的token被重建为图像(重构),然后将其拆分为重叠的token(软分割),最后,通过展平分割的补丁将周围的token聚合在一起。因此,来自周围补丁的局部结构被嵌入到要输入到下一个Transformer 层的token中。通过迭代进行T2T,将局部结构聚合成token,通过聚合过程可以减少token的长度。
2. 在ViT 中应用 “ 通道更少但层数更多 ” 的“深窄”架构设计在可比较的模型大小和 MAC(Multi-Adds)下带来了更好的性能。
贡献总结:
1. 首次让transformer在ImageNet上超过CNNs的表现
2. 提出了渐进式词语切分(tokenization),并且提出了一个 T2T 模块,该模块可以为每个token编码重要的局部结构。
3. 发现CNN结构中的深窄架构设计最适合 ViT
T2T-ViT 由两个主要组件组成:
1)分层的“Token 到Token 模块”(T2T 模块),用于对图像的局部结构信息进行建模并逐渐减少Token 的长度;
2) 一个高效的“T2T-ViT 骨干网”,用于从 T2T 模块中提取Token 的全局注意力关系。
在探索了几种基于 CNN 的架构设计后,作者对主干采用了一种深窄结构来减少冗余并提高特征丰富度。
Token-to-Token (T2T) 模块旨在克服 ViT 中简单标记化的限制。它逐步将图像结构化为token 并对局部结构信息进行建模,并且通过这种方式可以迭代地减少token 的长度。每个 T2T 流程都有两个步骤:重组和软拆分 (SS)
T2T 流程示意图。token 经过变换和整形后被重构为图像 ;然后 再次与标记 重叠分割。具体来说,如粉红色面板所示,输入 的四个标记 (1,2,4,5) 连接起来形成 中的一个标记。 T2T Transformer 可以是普通的 Transformer 层或其他高效的Transformer。
如上图所示,输入时其前一个transformer Layer输出的一系列tokens -- ,它将由自我注意块(图中的 T2T transformer )进行转换:
其中 MSA 表示具有层归一化的多头自注意操作;“MLP”是标准 Transformer 中具有层归一化的多层感知机。然后tokens 将被重塑为空间维度上的图像:
将尺寸为的 Reshape成的特征图像。
软拆分或软分割用来建模局部结构信息并减少token 的长度。具体来说,为了避免从重构图像生成token 时的信息丢失,我们将其拆分为重叠的块。因此,每个补丁都与周围的补丁相关,以建立一个先验,即周围的tokens 之间应该有更强的相关性。每个分割块中的tokens连接为一个token,因此可以从周围的像素和块中聚合局部信息。
在进行软分割时,每个patch的大小为k×k,图像上有s重叠和p填充,其中k-s类似于卷积操作中的步幅。所以对于重建图像 I ∈ ,软分割后输出令牌 的长度为
每个分割块的大小为 k × k × c。我们将空间维度上的所有补丁展平为令牌 。在软拆分之后,输出token被提供给下一个 T2T 过程。
通过反复进行上述重构和软拆分,T2T模块可以逐步减少token的长度,并变换图像的空间结构。 T2T模块中的迭代过程可以表述为:
对于输入图像 ,我们首先应用软拆分将其拆分为令牌:。在最后一次迭代之后,T2T 模块的输出令牌 具有固定长度,因此 T2T-ViT 的主干可以在 上建模全局关系
此外,由于 T2T 模块中的token长度大于 ViT 中的正常情况(16 × 16),因此 MAC 和内存使用量很大。为了解决这些限制,在我们的 T2T 模块中,我们将 T2T 层的通道维度设置为较小(32 或 64)以减少 MAC,并可选地采用高效的 Transformer,例如 Performer [7] 层,以在有限的 GPU 内存下减少内存使用.
上文中提到,ViT中的许多通道时无效的,因此作者为了提高主干效率并增强学习特征的丰富性探索了不同架构设计,包括(具体的细节参考论文4.2节):
1. DenseNet的密集连接
2. WideResNets 中的深窄与浅宽结构
3. Squeeze-an-Excitation (SE) 网络的通道注意力
4. ResNeXt中更多头的多头注意力
5. Ghost operations as GhostNet(该网络研究如何在保证精度的同时压缩网络)
我们凭经验发现:
1)通过采用深窄结构,简单地减小通道尺寸以减少通道冗余并增加层深度以提高 ViT 中的特征丰富度,模型大小和 MAC 都减小了,但性能得到了提高;
2)作为 SE 块的通道注意力也提高了 ViT,但不如使用深窄结构有效。
作者由此设计了一个深窄结构,具体的说,该结构有一个小的通道数和一个隐藏维度 但是有更多的层,对于来自 T2T 模块最后一层的具有固定长度 的令牌,我们将一个类令牌连接到它,然后向其添加 Sinusoidal Position Embedding (位置编码),与 ViT 进行分类的操作相同:
其中 E 是 Sinusoidal Position Embedding,LN 是层归一化,fc 是一个用于分类的全连接层,y 是输出预测。
在本论文的T2T-ViT架构中,作者使用了两次T2T模块,如上图所示。这意味着T2T模块中存在n+1=3软拆分和n=2重组。三个软拆分的patch大小为P=[7,3,3],重叠的patch大小为S=[3,1,1],这将根据等式n将输入图像的大小从224×224减小到14×14。
T2T-ViT主干网将来自T2T模块的固定长度token作为输入,与ViT相同;但它的结构设计非常窄,隐藏维度(256-512)和MLP大小(512-1536)都比ViT小。例如,T2T-ViT-14在T2T ViT主干中有14个Transformer Layer,有384个隐藏维度,而ViT-B\/16有12个Transformer Layer和768个隐藏尺寸,在参数和MAC方面比T2T-ViT-14大3倍。
随后作者设计了多个不同层数的T2T-ViT网络与其他流行的CNN进行公平比较:
感兴趣者可以查看原文以获取详细的实验结果