视觉语言模型(VLM)中的图像和文本数据预处理涉及将原始输入转换为与模型架构兼容的结构化格式。这确保了两种模态对齐,并可以联合处理。图像和文本的步骤不同,但共同目标是为训练或推理创建一致、标准化的输入。
图像预处理 图像通常被调整到固定分辨率(例如,224x224 像素),以匹配模型视觉编码器(如 Vision Transformer (ViT) 或 CNN)的输入维度。像素值会被归一化,通常将其缩放到 [0, 1] 范围,或应用均值和标准差调整(例如,对于在 ImageNet 上预训练的模型,减去均值=[0.485, 0.456, 0.406] 并除以标准差=[0.229, 0.224, 0.225])。训练期间可能会应用随机裁剪、翻转或颜色抖动等数据增强技术来提高泛化能力。对于像 PyTorch 这样的框架,这通过 transforms 完成。
transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
CLIP 或 ALIGN 等模型需要这些步骤来确保与其预训练权重兼容。未能应用正确的归一化会导致性能下降。
文本预处理 文本使用 WordPiece (BERT) 或 Byte-Pair Encoding (GPT) 等方法被分词为子词或词。分词将句子分割成模型理解的单元(例如,“playing” → ["play", “##ing”])。然后使用预定义的词汇表将词元映射到整数 ID。输入会被填充或截断到固定长度(例如,CLIP 为 77 个词元),并为 BERT 风格模型添加 [CLS] 或 [SEP] 等特殊词元。例如,文本“A dog running”可能变成 [101, 1037, 3899, 5598, 102]
(包含 [CLS] 和 [SEP] 的 ID)。会创建注意力掩码来指示哪些词元是真实的(1)而不是填充的(0)。Hugging Face 的 transformers
等库可以自动化此过程。
tokenizer(text, padding="max_length", max_length=77, return_tensors="pt")
这确保文本输入与模型对长度和结构的期望一致。
集成与对齐 VLM 需要成对的图像-文本数据,因此预处理必须保持两种模态之间的对应关系。例如,在像 COCO 这样的数据集中,每个图像 ID 都链接到其标题。在训练期间,批次结构为元组 (image_tensor, text_ids, attention_mask)
。视觉和文本编码器分别处理这些输入,其输出通过交叉注意力或投影层融合。对于推理,检索等任务需要将图像和文本编码到共享的嵌入空间中,因此预处理必须复制训练期间使用的确切步骤(例如,相同的图像大小调整策略或分词器设置)。归一化或分词中的不匹配会破坏对齐,导致结果不佳。例如,对文本使用与训练 VLM 时不同的分词器会产生嵌入不匹配,从而破坏跨模态交互。