今天是15天,学习了Vision Transformer图像分类。
Vision Transformer(ViT)是一种将 Transformer 架构应用于计算机视觉领域的图像分类模型。
其主要步骤如下:
输入预处理:将输入图像分成固定大小的 patches(例如 16x16 像素的小块),并将每个 patch 视为一个类似单词的元素。然后,每个 patch 通过一个线性嵌入层转换成一个高维向量。
位置编码:由于 Transformer 本身不具备顺序信息,所以需要添加位置编码以保留图像块的空间信息。通常通过向每个 patch 嵌入添加一个位置编码向量来实现。
Transformer Encoder 堆叠:得到的 patch 嵌入序列被送入一系列的 Transformer Encoder 层中。每个 Encoder 层包含一个多头自注意力模块和一个前馈神经网络。多头自注意力机制允许模型捕获全局依赖关系,而不是局限于局部感受野。
分类头部:与 BERT 等自然语言处理模型类似,ViT 模型最后一层的输出会连接到一个分类头部。对于图像分类任务,这通常是一个线性层,其输出维度对应于类别数量。
在训练时,ViT 模型通常在大规模图像数据集上进行,如 ImageNet。其具有全局建模能力,可以同时考虑图像的所有部分,有利于捕捉全局上下文信息;并且 Transformer 的自注意力机制天然支持并行计算,有助于提高训练效率。
然而,ViT 也存在一些缺点,例如在较小的数据集上容易过拟合,通常需要更大的训练数据集才能达到最佳性能;其训练和推理通常需要较多的计算资源;直接将图像划分为 patches 可能在处理局部细节和纹理时不如卷积神经网络精细等。
为了解决这些问题,有一些改进的方案,如 DeiT(Data-Efficient Image Transformers)、Swin Transformer、Pyramid Vision Transformer 等,使得 Transformer 架构在更多视觉任务(如目标检测、语义分割等)上取得了很好的效果,并逐渐成为视觉模型设计的新范式。