
极市导读
本文介绍的第 1 篇文章是一种提升视觉 Transformer 性能的极简方法,就是直接在Transformer前面放几层卷积。第2篇文章调研了CNN和Transformer的特性,并将两者结合提出新的家族式网络:CoAtNet,无额外数据时高达86%准确率,在JFT加持下,高达89.77%!性能优于CvT、BotNet和Swin等网络。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
本文目录
29 FAIR提出:Convolutional stem is all you need! 探究ViT优化不稳定的本质原因
(来自 FAIR,RossGirshick等巨佬 )
29.1 原理分析30 谷歌提出CoAtNet:结合卷积和注意力 89.77% Accuracy!
(来自 谷歌大脑,Quoc V. Le团队)
30.1 CoAtNet原理分析
Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer。Transformer 模型使用了 Self-Attention 机制,不采用 RNN 的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息。
本文介绍的第 1 篇文章是一种提升视觉 Transformer 性能的极简方法,就是直接在Transformer前面放几层卷积。第2篇文章调研了CNN和Transformer的特性,并将两者结合提出新的家族式网络:CoAtNet,无额外数据时高达86%准确率,在JFT加持下,高达89.77%!性能优于CvT、BotNet和Swin等网络。
29 FAIR提出:Convolutional stem is all you need! 探究ViT优化不稳定的本质原因
论文名称:Early Convolutions Help Transformers See Better
论文地址:
https://arxiv.org/pdf/2106.14881.pdf
29.1 原理分析:
本文基于的背景是:Vision Transformer 这种结构训练不稳定,其训练时对于下面的一些参数很敏感:
-
优化器的选择 (AdamW v.s. SGD) -
特定数据集要有特定的超参数 (learning rate 和 weight decay 等) -
训练策略 (training schedule) -
网络深度 -
... ...
这些问题极大地增加了研究者们在训练不同架构,或者在不同的数据集上训练 Vision Transformer 时的困难。
但是 CNN 训练的稳定性就高很多了,优化器选择简单的SGD,基本的数据增强方法,传统的超参数值可以直接迁移到不同类型的卷积网络中。
为什么 CNN 和 Vision Transformer 存在这样的差异?
作者在本文给出了一个回答:问题出在了 Vision Transformer 在对输入图片进行预处理时的分块操作, 本文的重点是探究ViT优化不稳定的本质原因。
具体来讲,ViT 首先把 的图片,变成一个 的序列。它可以看做是一系列的展平的2D块的序列,这个序列中一共有 个展平的2D块,每个块的维度是 。其中 是块大小, 是channel数。
注意作者做这步变化的意图:Transformer希望输入一个二维的矩阵 ,其中 是sequence的长度, 是sequence的每个向量的维度,常用 768/384/192。
所以这里也要设法把 的三维图片转化成 的二维输入。
所以有: 。
其中, 是Transformer输入的sequence的长度。
这步的代码是 (来自 timm 库):
class PatchEmbed(nn.Module):""" Image to Patch Embedding"""def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768):super().__init__()img_size = to_2tuple(img_size)patch_size = to_2tuple(patch_size)num_patches = (img_size[1] // patch_size[1]) * (img_size[0] // patch_size[0])self.img_size = img_sizeself.patch_size = patch_sizeself.num_patches = num_patchesself.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)def forward(self, x):B, C, H, W = x.shape# FIXME look at relaxing size constraintsassert H == self.img_size[0] and W == self.img_size[1], \f"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]})."x = self.proj(x).flatten(2).transpose(1, 2)return x
上述就是 ViT 的做法,分块操作的核心就是这句话:
self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)
这是一个 的卷积操作,输入 channel 数是3,输出 channel 数是embed_dim=768/384/192,我们称之为 patchify stem。
作者认为就是这里出了问题,所以把这个 的卷积操作变成了大约5个 或者 的标准卷积,如下图1所示,我们称之为 convolutional stem。这会导致计算量增加一点,所以为了补偿这部分计算量,就直接砍掉Transformer的一个Block。
就是这一点点小小的变化,作者观察到会对ViT模型的训练稳定性和最终的精度产生很大的影响,具体的影响是:
-
使 ViT 收敛更快。 -
不论是用更简单的 SGD 还是更复杂的 AdamW,精度不受影响。 -
使得 ViT 在训练时受超参数 (learning rate 和 weight decay 等) 影响更小。 -
在 ImageNet 上精度提升1-2个点。
作者在计算量从1G FLOPs-36G FLOPs的模型和ImageNet-1k-21k上做了丰富的实验来证实这一点:把 patchify stem 简单地改成 convolutional stem 可以带来很积极的影响,结合了 CNN 的归纳偏置能力 (inductive bias) 和 Transformer 的序列建模能力。
模型结构参数
下面是对几种模型的定义。
ViT 模型: 就是使用上面提到的 patchify stem 的方式的 ViT 模型,其对应的参数如下图2所示,图2中的GF代表 gigaflop,1 GF= 1e9 FLOPs。其中 ViT -4GF 的计算量和 ViT-S 相当,ViT -18GF 的计算量和 ViT-B 相当。
ViT 模型: 就是使用上面提到的 convolutional stem 的方式的 ViT 模型,其对应的参数如下图3所示。
ViT -1GF 的 stem:使用4个3×3卷积,输出通道数为[24, 48, 96, 192],所有卷积之后加 BN+ReLU。
ViT -4GF 的 stem:使用4个3×3卷积,输出通道数为[48, 96, 192, 384],所有卷积之后加 BN+ReLU。
ViT -18GF 的 stem:使用6个3×3卷积,输出通道数为[64, 128, 128, 256, 256, 512],所有卷积之后加 BN+ReLU。
ViT -18GF 的 stem 与 ViT -18GF 的相同。
以上所有都是最后加一个1×1卷积使得卷积的输出通道数和 Transformer 的 embedding dimension 匹配。ViT 模型为了补偿这部分计算量,就直接砍掉Transformer的一个Block。
其实在 ViT 头上加卷积的做法在 ViT 论文中已有尝试,当时替换 patchify stem 的方式是使用 BiT-ResNet-50 的前4个 stage,大概是40个卷积层。本文的目的不是为了找到到底几层卷积合适,而是去探索简单加几层卷积以后对训练的影响。
度量方式
ViT 模型相比于ViT 模型的变化,主要通过可优化性 (Optimizability) 来度量。
可优化性 (Optimizability) 是指模型优化过程是否鲁棒的属性,一个模型的可优化性不好,稍微去掉一个数据增强方法,或者超参数稍微变化一点,模型的性能就会大幅下降。具体而言体现为以下4点:
-
Training length stability: 像 DeiT/ViT 这些模型的训练长度都是 300 或 400 epochs,如果降到 100 则性能就会降低 2-4 个点。作者对比的是训练 50,100 或 200 epochs的精度,定义 Training length stability 作为收敛速度的衡量尺度。那些收敛快的模型在 200 epochs的精度和400 epochs 的精度一致,反之则不然。
-
Optimizer stability: Vision Transformer 一般都使用 AdamW 作为优化器,原因是 SGD 会在 ImageNet 上使得精度下降大约7个点。但是 CNN 却没有这种情况,SGD 一样可以把 CNN 优化得很好。相比于 AdamW 来讲,SGD参数少,且占的显存只有 AdamW 的一半左右。所以 Optimizer stability 被定义为使用 AdamW 和 SGD 的精度差距。
-
Hyperparameter (learning rate, weight decay) stability: 为了探究超参数对模型训练稳定性的影响,Hyperparameter stability 被定义为不同超参数 (lr, wd) 下模型的错误分布函数 error distribution functions (EDFs)。 如果模型对于不同超参数 (lr, wd) 是鲁棒的,则 EDF 的分布就会很 shallow,如果模型对于不同超参数 (lr, wd) 是敏感的,则 EDF 的分布就会很 steep。获取它的方法是随机采样一些 lr, wd,训练模型。
-
Peak performance: 指的是训练 400 epochs,微调 lr, wd,的最好的模型性能。
Training length stability 实验结果
如下图4所示是Training length stability 实验结果,图4有3个子图,分别是1GF 模型,4GF 模型,18GF 模型的实验结果。每个子图的3条曲线分别是ViT 模型,ViT 模型,RegNetY的实验结果,记录了训练50,100,200,400 epochs的精度。可以看到相比于ViT 模型,ViT 模型的收敛速度更快,且收敛速度更接近于全部是卷积的 RegNetY。
Optimizer stability 实验结果
如下图5所示是Optimizer stability 实验结果,图5有3个子图,分别是1GF 模型,4GF 模型,18GF 模型的实验结果。每个子图的6条曲线分别是ViT 模型,ViT 模型,RegNetY 在 AdamW 和 SGD 两种优化器下的实验结果,记录了训练50,100,200,400 epochs的精度。可以看到 RegNetY 在 AdamW 和 SGD 两种优化器下的实验结果基本完全一致;ViT 模型在 SGD 这种优化器下的实验结果会有个很大的性能下降;ViT 模型的性能下降大幅缩减到了小于0.2%。
Hyperparameter (learning rate, weight decay) stability 实验结果
下面图7代表3个1GF模型的 EDF 曲线,曲线代表有一堆不同 lr 或者 wd 的模型,随着采样的越来越多,纵轴代表的 cumulative prob 就会越大,全部采样完时为1,横轴是采样的这些模型的性能与最好模型的差值。即:曲线越陡峭代表模型对于 lr 或者 wd 的变化更稳定。所以可以看到相比于ViT iT 模型更稳定的。
下面图6代表3个1GF模型的 EDF 曲线,曲线代表有一堆不同 lr 或者 wd 的模型,随着采样的越来越多,纵轴代表的 cumulative prob 就会越大,全部采样完时为1,横轴是采样的这些模型的性能与最好模型的差值。即:曲线越陡峭代表模型对于 lr 或者 wd 的变化更稳定。所以可以看到相比于ViT 模型,ViT 模型对于 (lr, wd) 的稳定性更高。
Peak performance 实验结果
ViT 模型,ViT 模型超参数:
| 超参数 | 值 |
|---|---|
| batch size | 2048 |
| 学习率 | cosine lr decay |
| 学习率 warm-up | 5 |
| AdamW | beta1: 0.9, beta2: 0.999 |
| SGD | momentum: 0.9 |
| epochs | 400 |
| Data Augmentation | AutoAugment, mixup, CutMix, label smoothing |
| 学习率 (lr) | 1e-3 |
| weight decay (wd) | 0.24 |
| 学习率 (lr) 36GF模型 | 6e-4 |
| weight decay (wd) 36GF模型 | 0.28 |
上表示这个实验的超参数设置,下图7, 8, 9展示的是peak performance的结果,图6由3张子图组成,前2张图是ImageNet-1k实验结果,最后一张是在ImageNet-21k上先预训练的实验结果。
图8对比的是典型的 CNN 模型的性能v.s.训练速度 (注意这里的训练速度其实指的是模型大小不同,大模型训练速度慢,每个epoch训练时间长,小模型反之)。
图9对比的是 ResNet,RegNetY 模型和ViT 模型,ViT 模型的性能v.s.训练速度。ViT 模型在所有的情况下都不如RegNetY,但是ViT 模型的性能更优于ResNet,RegNetY 模型。
汇总的实2验结果如下图11所示。,RegNetY 模型和ViT 模型,ViT 模型的性能v.s.训练速度,和图8相比不同的是这次的预训练数据集换成了ImageNet-21k。ViT 模型在所有的情况下都不如RegNetY,但是ViT 模型的性能更优于ResNet,RegNetY 模型。有趣的是,ViT 模型即使在这个更大的数据集上训练,也不能超过CNN。
汇总的实验结果如下图10所示。
小结
本文的重点是探究ViT优化不稳定的本质原因。给出的解决方案是把一开始的这个 的卷积操作变成了大约5个 或者 的标准卷积,从Training length stability,Optimizer stability,Hyperparameter (learning rate, weight decay) stability 和 Peak performance这4个角度证明了有效性。
30 谷歌提出CoAtNet:结合卷积和注意力 89.77% Accuracy!
论文名称:CoAtNet: Marrying Convolution and Attention for All Data Sizes
论文地址:
https://arxiv.org/pdf/2106.04803.pdf
30.1 CoAt原理分析:
本文系统调研了CNN和Transformer的特性,并将两者结合提出新的家族式网络:CoAtNet,无额外数据时高达86%准确率,在 JFT 300M 数据集的加持下,高达89.77%!在 ImageNet-21k 数据集的加持下,高达88.56%!性能优于CvT、BotNet和Swin等网络。
本文的论点是:虽然 Transformer 往往具有更大的模型容量,但由于缺乏正确的归纳偏置 (inductive bias),它们的泛化可能比卷积网络更差。之前已有一些工作尝试将卷积引入Transformer架构,主要做法是:把FFN换成卷积,或者卷积与attention结合,或者像第一节介绍的方法是把一开始的这个 的卷积操作变成了大约5个 或者 的标准卷积。本文认为这些方法通过生硬地结合卷积来引入归纳偏置,而缺乏对卷积和attention操作各自作用的系统理解。
本文从机器学习的两个基本角度:泛化能力 (generalization capacity) 和模型拟合能力 (model capacity) 来研究卷积和attention操作,结论是:卷积由于良好的先验的归纳偏置特性,有好的泛化能力和收敛速度。而attention可以借助大数据集具有很强的模型拟合和表征能力。那现在的问题就是:
-
如何把二者给有效地结合起来? -
结合起来的不同Block如何堆叠?
作者在本文给出的答案是:
-
Depthwise Convolution 可以自然地融合到 Self-attention 层里面。 -
以一种合适的方式堆叠 Convolution 层和 Self-attention 层在提高泛化能力和模型拟合能力方面非常有效。
Depthwise Convolution 的表达式可以写成:
式中 表示第 个位置的输入和输出, 表示第 个位置的邻域,比如3×3的邻域。
Self-attention 的表达式可以写成:
式中, 代表全局的位置空间。
它们各自的特点是:
-
Depthwise Convolution 的权重 是个独立于输入值的参数,但是 Self-attention 的参数 却是个随着输入值变化的参数。所以 Self-attention 建模不同空间位置的复杂的关系是更容易的,但是也更容易过拟合,对数据集的数量要求较高。 -
给定任意的位置对 , 只与 的值有关,而与 和 的绝对数值无关,这个性质就是平移不变性 (translation equivalence),这个性质对于在数据集有限的情况下提升泛化能力帮助很大。但是 不具备这个性质,解释了为什么 Self-attention 泛化能力不强,需要更多的数据集。 -
二者的感受野大小不同,大的感受野可以提供更多的上下文信息,提高模型的拟合能力,但同时也需要更多的计算量。
以上3点不同如下图11所示。
Depthwise Convolution 可以自然地融合到 Self-attention 层里面
要是想把 Convolution 和 Self-Attention 的优秀属性结合起来,可以按照下式的做法:
式中, 代表 Self-attention 在softmax之后融合 ,而 代表 Self-attention 在softmax之前融合 。
就相当于是 Self-attention 的权重除了考虑 之外,还要考虑 ,即相当于是为 Self-attention 机制引入了平移不变性,这就使得 Self-attention 机制具备了图11的三条性质,所以本文采用 。
以一种合适的方式堆叠 Convolution 层和 Self-attention 层在提高泛化能力和模型拟合能力方面非常有效
以上确定了 作为融合 Convolution 层和 Self-attention 层的方法,下面的问题是如何交替堆叠这个层。
这种方式有哪些弊端呢?就是计算量会暴涨。因为之前的 Convolution 层的 只会考虑 3×3 的区域里面,但是现在 这种方式你要考虑全局的空间,导致网络计算量很大,推理速度慢,所以为了解决这个问题,我们主要有下面3种选择:
-
A: 模型通过不断地下采样减少空间维度,以降低计算量,再采用 这种方式。 -
B: 强制使用 local attention,就是不考虑全局的空间,也只考虑3×3范围的小空间。 -
C: 把原来的 attention 机制变成线性 attention 机制,使得计算量随着空间维度的关系由二次方关系变为线性的一次方关系。
本文做实验发现 B 和 C 这2种方式都会影响性能。对于 A 这种办法,下采样的方式有很多种:
比如像 ViT 一样直接使用这个 的卷积操作完成下采样,定义为ViT 。
再比如使用多个stage (S0, S1, S2, S3, S4) 进行下采样,空间维度从 S0 到 S4 逐渐下降,每个阶段空间维度下采样2倍,通道数增加2倍。
stage S0 就是2层的卷积。
stage S1使用 MBConv with SE (Squeeze-Excitation) 模块,因为空间维度较大。
stage S2-S4 考虑使用 MBConv (C) 或者 Transformer Block (T,指采用 ),但要求 MBConv 必须比 Transformer Block 较早出现,因为 MBConv 能更好地处理图片信息。所以S1-S4 可能的选择有:C-C-C-C, C-C-C-T, C-C-T-T, C-T-T-T。
所以对于 A 这种办法,我们要比较的是这5种情况:
-
ViT -
C-C-C-C -
C-C-C-T -
C-C-T-T -
C-T-T-T
评价指标
比较的指标就是泛化能力 (generalization capacity) 和模型拟合能力 (model capacity)。
泛化能力 (generalization capacity) 通过训练loss和Evaluation Accuracy 之间的 gap 来衡量。
模型拟合能力 (model capacity) 通过在超大数据集 (JFT-300M,为了防止出现过拟合) 下的精度来衡量。
ImageNet-1K 结果
泛化能力:
发现 的泛化能力大幅低于其他的模型,说明使用这个 的卷积操作并不适合底层视觉信息的抽取。
模型拟合能力:
发现 的泛化能力是最强的,只有 MBConv 或者 Transformer Block 的结果都不是最优的。同时 表明,就处理底层视觉信息的能力而言,MBConv 和 是相当的。最后为了最终决定是采用 还是 ,作者把在 JFT-300M 上预训练好的两个模型在 ImageNet-1k 上微调 30 epochs。
结果如下图13所示,根据结果最终选择了 ,其中的 代表3式中的 。
所以 CoAtNet 的最终模型包含5个 stage:
-
stage S0 就是2层的卷积。 -
stage S1使用 MBConv with SE (Squeeze-Excitation) 模块,因为空间维度较大。 -
stage S1-S4 使用 ,其中的 代表3式中的 。
CoAtNet 的最终模型架构如下图14所示。
CoAtNet model family 如下图15所示。
从 CoAtNet-0 到 CoAtNet-5 的前两个 stage 是相同的,后面的 stage 逐渐变大。
评价指标是在 ImageNet-1K (1.28M images), ImageNet-21K (12.7M images) 和 JFT (300M images) 上分别预训练 300,90,14 epochs,再在 ImageNet-1K 上 Fine-tune 30 epochs,取最终的性能。结果如下图16所示。
可以看到最优的性能88.56%是使用 ImageNet-21K 预训练150 epochs (E150),并在 ImageNet-1K 做Fine-tune 30 epochs 的结果 (PT-RA 表示在 ImageNet-21K 预训练阶段使用了 Rand Augment 的数据增强方法),超过了EfficientNetV2-L和NFNet-F5这两个基于卷积的strong baseline。
下图17是使用了 JFT-300M 预训练的结果。CoAtNet-4的精度匹配 NFNet-F4+,同时参数量和训练时间只有后者的一半。CoAtNet-4的精度可以达到89.77%!
对比实验:融合Depth-wise Convolution 和 Self-attention (即是否使用 )的影响
结果如下图18所示。With Rel-Attn 是指使用 作为 Self-attention,Without Rel-Attn 是指使用原来的Self-attention,结果发现无论是否使用 ImageNet-21k 预训练,使用 作为 Self-attention 精度都有提升。
小结
CoAtNet 的创新主要有2点:其一是Depthwise Convolution 可以自然地融合到 Self-attention 层里面,如上式3所示。其二是以一种合适的方式堆叠 Convolution 层和 Self-attention 层,主要是分成5个stage,stage S0 就是2层的卷积,stage S1-S4 使用 ,其中的 代表3式中的 。最终在 JFT-300M 预训练的加持下,ImageNet-1k 的精度可以达到89.77%。
总结
本文介绍的2篇文章都是结合卷积和Attention的工作,第 1 篇文章是一种提升视觉 Transformer 性能的极简方法,就是直接在Transformer前面放几层卷积,增强 ViT 的训练稳定新。第 2 篇 CoAtNet 设计了一种Depthwise Convolution 自然地融合到 Self-attention 层的方法,并探索了一种合适的方式堆叠 Convolution 层和 Self-attention 层,它们的特点是简单有效,容易复现。
如果觉得有用,就请分享到朋友圈吧!
公众号后台回复“84”获取第84期直播PPT~
# 极市原创作者激励计划 #

