Transformer作为前沿的深度学习框架,带有多模态的特性,对于不同类型的输入数据,不管是文本还是图像均可进行处理,而ViT则是对于Transformer中的视觉方面(也就是输入数据为图像)的衍生物(因Transformer对应视觉领域应用受限而提出的)。因而ViT在计算机视觉领域或者遥感领域的图像处理有着较为广泛的应用。
ViT的关键概念
Transformer架构
Transformer最初用于自然语言处理(NLP)来处理序列数据,比如文本。在ViT中,同样的架构被应用于视觉任务,将图像数据作为序列来处理。
ViT的组成部分包括:多头自注意、多层感知器、快捷连接、层归一化、位置编码和网络拓扑,在视觉识别中起着关键作用。
图像作为补丁处理
与传统卷积神经网络(CNN)将整个图像作为输入不同,ViT将图像划分为多个固定大小的小块(如16x16像素),并将每个小块作为输入序列的一部分进行处理。这些图像块就像NLP中的词嵌入一样,通过Transformer进行建模。
无需卷积操作
ViT的创新在于,它不依赖于卷积操作(传统的CNN依赖卷积核来提取图像特征),而是使用Transformer的自注意力机制来学习全局的图像特征关系。
自注意力机制
自注意力机制通过捕捉图像各部分之间的关系,允许模型对整个图像有更全面的理解,而不受局部感受野的限制。
大规模数据训练
ViT的一个重要特性是其性能与数据规模高度相关。要让ViT达到或者超过CNN的效果,通常需要大规模的训练数据(例如在JFT-300M数据集上预训练)。
ViT的优点
- 全局特征提取能力强:与CNN不同,ViT通过自注意力机制可以捕捉图像全局的信息,适合处理大规模图像任务。
- 更具可扩展性:在大型数据集上,ViT可以比传统的CNN更有效地利用数据资源,尤其在高性能计算环境下展现出很好的可扩展性。
总结来说,ViT的出现为计算机视觉任务提供了一种不依赖卷积的全新模型架构,尤其在大数据集上展现了强大的性能。
在Vision Transformer (ViT) 中,patch(图像块)是指将输入图像划分成多个小的、固定大小的子图像块。这些图像块是ViT处理图像的基本单元,类似于在自然语言处理(NLP)任务中将文本分成单词或词嵌入。
ViT 相较于传统的Transformer能够更好地捕捉局部特征信息,同时保留传统Transformer对于长依赖关系捕捉的能力,此外,ViT通过添加局部聚合的模块,使得模型对于局部信息较传统结构得到进一步地增强。
Patch的具体概念
划分图像
ViT并不像传统的卷积神经网络(CNN)那样直接处理整张图像。相反,它将图像分割成多个相同大小的图像块(patch)。例如,如果输入图像的尺寸为224x224像素,ViT可能会将其划分成16x16像素的patch,这样整张图像就变成了一个14x14的网格,总共有196个patch。
每个patch的处理
每个patch被视为一个独立的输入单元,相当于NLP中的“词”。这些patch会被展平(flatten)成一维向量,然后通过一个线性嵌入层将其映射到特定维度的特征向量空间中。最终,这些特征向量会被送入Transformer模型进行进一步的处理。
为什么要使用patch?
Transformer模型本质上是处理序列数据的,而图像是一种二维数据格式。为了让Transformer能够处理图像,ViT通过将图像转化为多个patch序列,将二维问题转化为序列问题,从而可以利用Transformer模型中的自注意力机制来建模不同图像块之间的关系。
Patch的大小
Patch的大小(例如16x16)是一个超参数,它会影响模型的性能。如果patch太大,可能会丢失局部的细节信息;如果patch太小,序列的长度会增加,导致计算复杂度变高。因此,选择合适的patch大小非常关键。
Patch的工作流程总结:
输入图像(如224x224像素) → 划分为多个patch(如16x16像素) → 每个patch展平成一维向量 → 嵌入到固定的特征空间 → 作为Transformer的输入序列进行处理。
通过这种方式,ViT能够将图像作为序列数据进行处理,利用Transformer的自注意力机制来理解图像中的全局和局部信息。
参考文献:
《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》
《A Survey on Vision Transformer》