2017年,随着Transformer架构的出现,几乎所有自然语言处理领域的任务都经历了一场革命,从语言建模和掩码词填充到翻译和问答。不出所料,在短短2-3年内,Transformer也在计算机视觉任务中得到应用,并同样取得了出色的效果。接下来,我们将探讨两个使Transformer进入计算机视觉领域的基础架构。
本书的目录· 视觉变压器
∘ 关键思想
∘ 运作机制
∘ 混合架构
∘ 结构信息丢失
∘ 结果
∘ 通过掩码的自监督学习
· 掩码自动编码器视觉变换器
∘ 关键思想
∘ 架构
∘ 总结与示例
来自论文的图像:‘一张图等于16x16个单词:用于大规模图像识别的Transformer’
视觉 transformer 简单地说是将标准的 Transformer 架构泛化,以处理图像输入并从中学习。作者明确指出了该架构中的一个关键思想:
“受 Transformer 在 NLP 中的成功扩展的启发,我们尝试将标准的 Transformer 直接应用于图像上,并尽可能少地进行修改。”
实际上他们修改的是输入结构,可以非常字面地理解“最少可能的修改”这句话,因为他们基本上不做出任何改动。
特别是说,假设输入的图像尺寸为(n,n,3),将其作为输入传递给变压器,视觉变压器会这样做:
补丁向量的维度是3(n/k)(n/k),例如,如果图像尺寸为(900,900,3)且使用k=3,补丁向量的维度将是3003003,表示展平后补丁中的像素值。在论文中,作者使用k=16。因此,论文的名称是“一张图等于16x16个词:大规模图像识别中的Transformer”,不是输入一个代表单词的一-hot向量,而是输入一个代表图像补丁的像素值向量。
其余部分的操作与原变压器编码器中的操作保持一致:
变压器解码器怎么样?
嗯,就像Transformer编码器一样;区别在于它使用的是掩码自注意力机制而不是自注意力机制(但输入格式保持相同)。无论如何,你都应该很少使用纯解码器的Transformer架构,因为仅仅预测下一个片段可能不是一个特别吸引人的任务。
作者还提到说,可以使用CNN特征图而不是图像本身来形成混合架构(即CNN的输出传给视觉变换器)。在这种情况下,我们把输入看作是一个一般的(n,n,p)特征图,而补丁向量(patch向量)的维度会是(n/k)(n/k)p。
你可能会觉得这种架构不应该这么好,因为它将图像视为线性结构,但实际上并非如此。作者提到这一点,说明这是有意为之的。
“二维邻域结构用得很少……初始化时的位置嵌入不包含任何关于补丁二维位置的信息,所有补丁之间的空间关系都必须从零开始学习”
我们将会发现,这个变压器能够做到这一点,这在他们实验中表现出的良好效果中得到了验证,更重要的是,在接下来的文章中提到的架构。
从结果的主要结论是,在小数据集上,视觉变压器通常不如基于CNN的模型,但在大数据集上,它们的表现接近或超过基于CNN的模型,无论哪种情况,视觉变压器所需的计算资源显著更少:
来自论文的表格:“一张图片相当于16x16个像素:用于大规模图像识别的Transformer模型”。
在这里我们看到,对于包含300M张图像的JFT-300M数据集,预先在该数据集上训练的ViT模型优于基于ResNet的模型,同时需要显著更少的计算资源来预训练。可以看到,他们用的最大视觉变压器(ViT-Huge,参数量为632M,k=16),仅用了ResNet模型计算量的约25%,仍然优于ResNet模型。即使使用较小的ViT-Large模型(计算资源不到6.8%),性能也没有下降太多。
同时,其他人也发现,在含有1.3M图像的ImageNet-1K上训练时,ResNet的表现明显更佳。
作者对掩码补丁预测任务进行了初步尝试,这是一种自监督学习,模仿了BERT中的掩码语言模型任务,即通过掩盖补丁并试图预测它们。
“我们采用掩码补丁预测目标函数进行初步的自我监督实验。为此,我们破坏50%的补丁嵌入,通过替换为可学习的[mask]嵌入(80%),随机的其他补丁嵌入(10%),或保持不变(10%)。”
通过自我监督的预训练,他们较小的ViT-Base/16模型(一种视觉变换器模型)在ImageNet数据集上实现了79.9%的准确率,比从头开始训练提升了2%,这是一个显著的进步。但仍比监督预训练低4个百分点。
图像来自论文:Masked自编码器是具有可扩展性的视觉学习者:视觉学习的利器。
如我们在视觉变换器研究论文中所见,通过对输入图像的补丁进行掩码预训练所取得的效果,并不如同常规NLP中的掩码预训练,在某些微调任务中能取得最佳效果那样显著。
本文提出了一种涉及编码器和解码器的视觉变压器模型架构,使用掩码进行预训练后,相比直接在监督下训练基础视觉变压器模型,有显著改善(最多可提高6%的性能)。
论文中的图像:Masked自编码器可以作为可扩展的视觉学习者
这是一些样本(输入、输出、真实标签)。它就像一个自编码器,尝试在重构输入的同时填补缺失的区域。
他们的编码器就是我们之前提到的标准视觉变换器编码器。在训练和推断过程中,它仅处理“观察到的” patches。
与此同时,他们的编码器也非常普通,只是普通的视觉变压器编码器。
所以对于一个图像[[A, B, X], [C, X, X], [X, D, E]],其中X表示缺失的补丁块,解码器将使用补丁向量序列[Enc(A), Enc(B), Vec(X), Vec(X), Vec(X), Enc(D), Enc(E)]。Enc返回给定补丁向量的编码器输出向量,X则表示缺失的令牌,为一个向量。
解码器中的最后一层使用一个线性层,将上下文特征(由视觉变压器编码器生成)映射为一个与补丁大小一致的向量。损失函数采用均方误差,计算原始补丁向量与预测补丁向量差异的平方。在损失计算中,我们只考虑被遮蔽标记的预测,忽略未被遮蔽标记的预测(例如:Dec(A),Dec(B),Dec(C)等)。
可能令读者惊讶的是,作者建议在图像中大约75%的图像区域进行遮罩;相比之下,BERT只遮罩大约15%的单词。他们对此的解释是:
图像具有很强的空间相关性——例如,缺失的补丁可以从邻近的补丁中推断出来,而不需要对局部、物体和场景进行高层次的理解。为了克服这种差异并促进有用特征的学习,我们将非常高比例的随机补丁遮盖。
想亲自试一试吗?可以试一下这个NielsRogge的演示笔记本。
这就是这个故事的全部了。我们一起经历了一段旅程,了解了基础的Transformer模型如何应用于计算机视觉世界。希望你觉得这既清晰又有启发性,而且不虚度了你的时间。
参考资料:
[1] Dosovitskiy, A. et al. (2021) 一张图等于16x16个词:用于大规模图像识别的变压器 , arXiv.org. 可从https://arxiv.org/abs/2010.11929 访问 (最后访问日期:2024年6月28日)。
[2] He, K. et al. (2021) Masked autoencoders are scalable vision learners , arXiv.org. 可查阅:https://arxiv.org/abs/2111.06377 (访问日期:2024年6月28日访问).