视觉语言基础:图像表示、文本表示与多模态对齐
视觉语言模型(Vision-Language Models, VLMs)的核心挑战在于如何让模型同时理解像素构成的图像世界与符号构成的文本世界,并建立二者之间的语义桥梁。在深入CLIP与BLIP的训练细节之前,我们必须先厘清三个基础问题:图像如何被表示为模型可计算的张量?文本如何被切分为可学习的离散单元?以及,图像与文本的语义空间如何被映射到同一个向量空间中实现对齐?本章将系统梳理这些基础概念,并介绍支撑该领域发展的关键数据集。
2.1 图像表示:从像素到特征向量
图像在计算机中本质上是一个由像素值构成的三维张量。以一张224×224的RGB彩色图像为例,其原始表示维度为224×224×3,即约15万个数值。直接使用这种原始像素作为模型输入,不仅计算量巨大,而且难以捕捉高层语义信息。因此,视觉语言模型需要一套完整的图像表示流水线,将原始像素逐步转化为紧凑且语义丰富的特征向量。
2.1.1 图像预处理与增强
在进入模型之前,图像需要经过一系列标准化操作。首先是尺寸调整(Resize),将不同分辨率的图像统一缩放到模型期望的输入尺寸。其次是归一化(Normalization),通常使用ImageNet数据集的均值([0.485, 0.456, 0.406])和标准差([0.229, 0.224, 0.225])对每个通道进行标准化,使数据分布符合模型训练时的假设。此外,数据增强策略(如随机裁剪、水平翻转、颜色抖动)在训练阶段被广泛使用,以提升模型的泛化能力。
2.1.2 Patch Embedding与位置编码
现代视觉语言模型(如CLIP、BLIP)普遍采用Vision Transformer(ViT)作为图像编码器。ViT的核心思想是将图像分割为固定大小的Patch(如16×16像素),每个Patch经过线性投影后成为一个向量。对于224×224的输入图像,16×16的Patch尺寸会产生14×14=196个Patch 。为了保留空间位置信息,还需要为每个添加可学习的位置编码(Positional Embedding)。最终,图像被表示为一个序列:[CLS] + 196个Patch ,其中[CLS] 用于聚合全局图像信息。
2.1.3 图像特征向量的生成
经过多层Transformer编码器后,[CLS] 对应的输出向量被视为整张图像的全局特征表示,记为I_f ∈ R^d,其中d是特征维度(CLIP中通常为512或768)。这个向量经过L2归一化后,被投影到多模态对齐空间中。值得注意的是,不同模型对图像特征的提取策略略有差异:CLIP直接使用[CLS] 作为图像特征;而BLIP在预训练阶段还会额外使用注意力池化(Attention Pooling)机制,对全部Patch 进行加权聚合,以获得更鲁棒的图像表示。
2.2 文本表示:从字符到语义向量
文本表示的目标是将自然语言句子转换为模型可计算的向量序列。与图像不同,文本是离散符号的序列,需要经过分词(Tokenization)、嵌入(Embedding)和编码(Encoding)三个步骤。
2.2.1 分词策略
常用的分词方法包括WordPiece(BERT)、Byte-Pair Encoding(BPE,系列)和SentencePiece。以BPE为例,它通过迭代合并最频繁出现的字符对,构建一个子词(Subword)词表。例如,句子"a cat on the sofa"可能被切分为["a", "cat", "on", "the", "sofa"],而罕见词"sofa"可能被进一步切分为["so", "fa"]。分词后,句子被转换为 ID序列,并在开头添加特殊的[CLS] (用于分类任务)或[BOS] (用于生成任务)。
2.2.2 嵌入与位置编码
每个 ID通过查表操作映射为一个稠密向量,即 Embedding。与图像类似,文本序列也需要位置编码来注入词序信息。Transformer使用正弦位置编码或可学习位置编码。对于视觉语言模型,文本编码器通常采用BERT或架构,输出每个的上下文相关表示。
2.2.3 文本特征向量的生成
对于对比学习模型(如CLIP),文本编码器的输出通常取[CLS] 对应的向量作为整个句子的特征表示,记为T_f ∈ R^d。而对于生成式模型(如BLIP),文本特征可能以序列形式保留,用于后续的交叉注意力计算。文本特征同样经过L2归一化,确保与图像特征在相同的范数空间内。
| 表示层级 | 图像 | 文本 | 对齐方式 |
|---|---|---|---|
| 原始输入 | 像素矩阵 (224×224×3) | 字符序列 | — |
| 化 | Patch Embedding (196 Tokens) | BPE/WordPiece (N Tokens) | 统一为序列 |
| 编码器 | ViT / ResNet | BERT / | Transformer架构 |
| 特征输出 | I_f ∈ R^d (L2归一化) | T_f ∈ R^d (L2归一化) | 余弦相似度计算 |
2.3 多模态对齐:核心机制与训练目标
多模态对齐是视觉语言模型的灵魂。其核心思想是:将图像和文本映射到同一个向量空间中,使得语义相似的图像-文本对在空间中的距离更近,不相似的对距离更远。CLIP和BLIP分别代表了两种主流的对齐范式:对比式对齐和生成式对齐。
2.3.1 对比学习对齐(CLIP范式)
CLIP采用InfoNCE损失函数进行训练。在一个Batch中,假设有N个图像-文本对,模型需要计算N×N的相似度矩阵。对角线上的元素是正样本对(匹配的图像和文本),其余元素是负样本对(不匹配的组合)。训练目标是最小化正样本对的交叉熵损失,即让模型学会"找出"正确的配对。具体公式为:
L = -1/N * Σ log( exp(sim(I_i, T_i)/τ) / Σ_j exp(sim(I_i, T_j)/τ) )
其中sim()表示余弦相似度,τ是温度系数(通常初始化为0.07),用于控制相似度分布的锐利程度。温度系数越小,模型对难负样本的惩罚越强。
2.3.2 生成式对齐(BLIP范式)
BLIP在对比学习的基础上,引入了生成式目标。具体包括三个损失函数:ITC(Image-Text Contrastive Loss)用于对齐图像和文本的整体特征;ITM(Image-Text Matching Loss)用于二分类判断图像-文本对是否匹配;LM(Language Modeling Loss)用于根据图像生成文本描述。这种多任务联合训练方式,使得BLIP不仅能够检索,还能生成新的文本描述,在图像描述(Captioning)和视觉问答(VQA)任务上表现更优。
2.3.3 对齐质量的评估指标
常用的评估指标包括Recall@K(图像到文本检索和文本到图像检索的召回率)和R@1(最相关结果排在第一位的比例)。例如,在Flickr30K数据集上,CLIP的R@1(文本到图像)约为68%,而BLIP可以提升到75%以上。这些指标直接反映了对齐空间的质量。
2.4 常用数据集:COCO与Flickr30K
数据是视觉语言模型的燃料。高质量的数据集需要满足两个条件:一是图像内容多样性足够,二是文本描述与图像内容高度相关且语言自然。目前最常用的两个数据集是COCO和Flickr30K。
2.4.1 COCO Captions数据集
COCO(Common Objects in Context)数据集最初用于目标检测,其Caption版本包含约12万张训练图像和5万张验证图像,每张图像配有5句人工标注的英文描述。COCO的图像场景丰富,涵盖日常生活中的各种物体和交互,是评估视觉语言模型的标准基准。其文本描述风格偏向于客观描述,例如:"A group of people standing in front of an airplane."
2.4.2 Flickr30K数据集
Flickr30K包含约3.1万张从Flickr网站收集的图像,每张图像同样有5句人工描述。与COCO相比,Flickr30K的图像更偏向于人物活动和自然场景,描述语言更加口语化和多样化。虽然规模较小,但Flickr30K常用于模型消融实验和快速验证。
2.4.3 数据预处理与采样策略
在训练CLIP或BLIP时,数据加载器需要实现以下功能:(1)在线数据增强:对图像进行随机裁剪、缩放、翻转;(2)文本清洗:统一小写、去除多余空格、过滤过长或过短的句子;(3)动态Batch采样:确保每个Batch内正样本对数量均衡。对于大规模训练(如CLIP的400M数据),还需要使用分布式数据并行(DDP)和混合精度训练(AMP)来加速。
2.5 案例拆解:从零构建一个小型图文检索系统
为了将上述概念落地,我们设计一个基于Flickr30K数据集的图文检索系统训练流程。该案例的目标是让读者理解数据、模型、损失函数三者如何协同工作。
2.5.1 场景与约束
假设我们只有8GB显存的单块GPU,需要在Flickr30K上训练一个轻量级CLIP模型。初始现象是:直接使用ViT-B/16作为图像编码器会导致显存溢出(OOM)。关键约束包括:显存限制、训练时间预算(约4小时)、以及目标R@1达到50%以上。
2.5.2 分析与决策
通过分析,我们决定采用以下策略:(1)使用ResNet-50作为图像编码器,其参数量远小于ViT-B/16;(2)文本编码器使用DistilBERT,参数量减少40%;(3)将Batch Size设置为64,并使用梯度累积(Gradient Accumulation)模拟更大的Batch;(4)采用混合精度训练,将显存占用降低约50%。
2.5.3 训练配置与结果
# 关键训练超参数
batch_size = 64
learning_rate = 1e-4
warmup_steps = 1000
max_epochs = 10
temperature = 0.07
image_encoder = "resnet50"
text_encoder = "distilbert-base-uncased"
训练过程中,我们监控验证集上的R@1指标。在第5个Epoch时,R@1达到42%;第8个Epoch时达到51%,满足目标。最终模型在Flickr30K测试集上的R@1为53.2%,R@5为78.5%。训练总耗时3小时47分钟,峰值显存占用7.2GB。
2.5.4 复盘与经验
本次训练的成功关键在于:(1)模型轻量化:ResNet-50+DistilBERT的组合在保持性能的同时大幅降低资源需求;(2)温度系数的调整:初始温度0.07导致训练不稳定,调整为0.1后收敛更平滑;(3)数据增强的重要性:随机裁剪(RandomResizedCrop)对R@1的提升贡献约3个百分点。风险点在于:如果Batch Size进一步减小到32,R@1会下降至47%,说明对比学习对Batch Size较为敏感。
2.6 常见误区与总结
在视觉语言基础的学习和实践中,初学者常陷入以下误区:
- 误区一:认为图像特征提取必须使用CNN。实际上,ViT在视觉语言任务中已成为主流,其全局感受野更适合捕捉图像中的语义关系。
- 误区二:忽略L2归一化的重要性。如果不进行归一化,相似度计算会被特征向量的模长主导,导致模型难以优化。
- 误区三:盲目追求大数据集。在资源有限时,使用小数据集配合强数据增强和预训练权重,往往比从零训练大模型更有效。
- 误区四:将CLIP和BLIP视为互斥方案。实际上,BLIP在预训练阶段也使用了对比损失,两者是继承与发展的关系。