仅需5分钟即可从视觉Transformer模型到掩码自编码器

2024/10/12 21:02:56

本文主要是介绍仅需5分钟即可从视觉Transformer模型到掩码自编码器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

NLP任务如何应用到计算机视觉的简明指南

2017年,随着Transformer架构的出现,几乎所有自然语言处理领域的任务都经历了一场革命,从语言建模和掩码词填充到翻译和问答。不出所料,在短短2-3年内,Transformer也在计算机视觉任务中得到应用,并同样取得了出色的效果。接下来,我们将探讨两个使Transformer进入计算机视觉领域的基础架构。

本书的目录

· 视觉变压器
∘ 关键思想
∘ 运作机制
∘ 混合架构
∘ 结构信息丢失
∘ 结果
∘ 通过掩码的自监督学习
· 掩码自动编码器视觉变换器
∘ 关键思想
∘ 架构
∘ 总结与示例

视觉Transformer

来自论文的图像:‘一张图等于16x16个单词:用于大规模图像识别的Transformer’

关键想法

视觉 transformer 简单地说是将标准的 Transformer 架构泛化,以处理图像输入并从中学习。作者明确指出了该架构中的一个关键思想:

“受 Transformer 在 NLP 中的成功扩展的启发,我们尝试将标准的 Transformer 直接应用于图像上,并尽可能少地进行修改。”

操作步骤

实际上他们修改的是输入结构,可以非常字面地理解“最少可能的修改”这句话,因为他们基本上不做出任何改动。

  • 在NLP中,Transformer编码器接受一系列的one-hot向量(或等效的token索引),这些向量表示输入句子/段落,并返回上下文嵌入向量的序列,这些向量可以用于后续任务(例如,分类)
  • 在CV领域,视觉Transformer可以用来泛化,它接受一系列的图像块向量,这些向量表示输入图像,并返回上下文嵌入向量的序列,这些向量可以用于后续任务(例如,分类)

特别是说,假设输入的图像尺寸为(n,n,3),将其作为输入传递给变压器,视觉变压器会这样做:

  • 将其划分为$k^2$个补丁,例如$k=3$时,如上图所示。
  • 现在每个补丁为$(n/k,n/k,3)$,接下来的步骤是将每个补丁展平成一个向量。

补丁向量的维度是3(n/k)(n/k),例如,如果图像尺寸为(900,900,3)且使用k=3,补丁向量的维度将是3003003,表示展平后补丁中的像素值。在论文中,作者使用k=16。因此,论文的名称是“一张图等于16x16个词:大规模图像识别中的Transformer”,不是输入一个代表单词的一-hot向量,而是输入一个代表图像补丁的像素值向量。

其余部分的操作与原变压器编码器中的操作保持一致:

  • 这些补丁向量经过一个可训练的嵌入层
  • 为每个向量添加位置嵌入以保持图像的空间信息
  • 输出是 _numpatches 个编码器表示(每个补丁一个),这些表示可以用于补丁或图像级别的分类
  • 更常见的做法(如论文所示),在表示的前面添加一个CLS标记,该标记用于对整个图像进行预测(类似于BERT模型)

变压器解码器怎么样?

嗯,就像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。

与此同时,他们的编码器也非常普通,只是普通的视觉变压器编码器。

  • 用于隐藏缺失补丁的token向量
  • 用于已知补丁的编码器输出向量

所以对于一个图像[[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日访问).



这篇关于仅需5分钟即可从视觉Transformer模型到掩码自编码器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程