在Vision Transformer (ViT) 中,图像的预处理过程主要包括将图像转换为适合Transformer模型输入的格式。以下是从原始图像到模型输入所进行的主要操作步骤:
1. 图像尺寸调整 (Resize)
- 将输入图像调整为固定大小,通常是正方形(例如,224x224像素)。这是为了统一所有输入图像的尺寸,使得后续的处理更加简单。
- 尺寸调整通常通过插值方法(如双线性插值)进行,保持图像的宽高比不变。
2. 划分图像块 (Patch Partitioning)
- 将调整后的图像划分为固定大小的非重叠块(Patches),例如16x16像素或32x32像素。
- 每个图像块可以被视为一个小的局部图像区域,这些块将作为ViT的输入。
3. 展平图像块 (Flattening Patches)
- 将每个图像块展平成一维向量。如果图像块的大小是16x16像素,并且输入图像是RGB图像(即每个像素有3个通道),则每个块会被展平为一个长度为
16x16x3=768
的向量。
4. 线性映射 (Linear Projection)
- 对每个展平后的图像块进行线性映射,将其投影到更高维度的空间中。这个步骤通常通过一个线性层实现,输出的维度与Transformer的隐藏层维度相匹配(如768或1024)。
- 线性映射后,每个图像块被转换为具有固定长度的嵌入向量(Patch Embedding)。
5. 添加位置编码 (Add Positional Encoding)
- 因为Transformer模型不具备CNN那样的空间信息感知能力,需要加入位置编码(Positional Encoding)来帮助模型理解图像块在原始图像中的位置。
- 位置编码可以是固定的或可训练的,通常是与图像块的嵌入向量相加。
6. 生成分类标识符 (CLS Token)
- 在输入序列的最前面添加一个特殊的分类标识符(CLS Token)。这个Token在Transformer处理完所有图像块后,将用于图像分类任务的最终输出。
- CLS Token也是一个向量,与图像块的嵌入向量具有相同的维度。
7. 构建输入序列 (Input Sequence)
- 最终的输入序列包括CLS Token和所有图像块的嵌入向量,以及对应的位置信息。整个序列将作为ViT的输入,进入Transformer层进行进一步处理。
8. 标准化 (Normalization)
- 在一些实现中,图像在被划分为图像块之前,会进行标准化处理,例如将像素值归一化到[0, 1]或[-1, 1]范围,或者减去均值再除以标准差。
9. 批量处理 (Batching)
- 在实际应用中,通常会将多个图像组成一个批次(Batch)进行处理,以便于并行计算。批处理有助于加速训练过程。
10. 模型输入
- 经过上述处理后,图像被转换为适合Transformer模型输入的格式,模型开始处理这些输入以进行图像分类或其他任务。
简化流程图:
- 原始图像 → 尺寸调整 → 划分图像块 → 展平成向量 → 线性映射 → 添加位置编码 → 添加CLS Token → 构建输入序列 → 标准化 → 批量处理 → 模型输入
这些步骤确保图像数据能够适应Transformer模型的架构,使得ViT能够有效地处理图像分类和其他视觉任务。
标签:Transformer,像素,Token,输入,vit,图像,预处理,向量 From: https://www.cnblogs.com/chentiao/p/18351667