在视觉-语言模型 (VLM) 中,视觉骨干网络(如 CNN 或 Vision Transformer)与语言模型(如 BERT 或 GPT)通过将视觉数据转换为与文本表示对齐的形式协同工作。视觉骨干网络处理原始图像,将其转化为特征向量,然后将这些向量映射到一个共享的嵌入空间,语言模型可以在该空间中对其进行解释。例如,CNN 可能从图像中提取空间特征,然后将这些特征展平并投影成与语言模型输入维度匹配的向量序列。语言模型将这些向量视为额外的 tokens,类似于文本,通过交叉注意力或拼接等机制实现视觉和文本数据的联合处理。这使得模型能够生成引用视觉内容的文本或回答关于图像的问题。
一个具体的例子是 CLIP,它使用 ViT 或 CNN 对图像进行编码,使用 Transformer 对文本进行编码。两个编码器都在共享空间中输出嵌入,从而可以比较图像和文本之间的相似性。在像 Flamingo 或 LLaVA 这样的模型中,视觉骨干网络生成一个特征网格,这些特征与文本 tokens 一起馈送到语言模型中。语言模型使用交叉注意力层在生成每个单词时“关注”这些视觉特征。例如,当回答关于图像的“这辆车是什么颜色?”的问题时,视觉骨干网络会识别与汽车相关的特征,语言模型则将这些特征与问题中的“颜色”一词关联起来。训练通常涉及图像描述等任务,模型会学习将视觉特征(例如,物体形状)与文本描述(例如,“一辆红色的汽车”)对齐。
开发人员在实现 VLM 时必须解决视觉和文本特征维度对齐等挑战。一种常见方法是添加线性投影层,将视觉特征映射到语言模型的嵌入大小。为了提高效率,一些架构在训练期间会冻结视觉骨干网络,以降低计算成本,将更新重点放在语言模型和投影层上。另一个需要考虑的问题是处理可变输入大小:图像通常会被调整大小或分割成 patches(如 ViT 中那样)以创建固定长度的序列。像 Hugging Face 的 transformers
库这样的工具提供了组合预训练视觉和语言模型的 API,从而简化了实验。例如,使用预训练的 ResNet 和 GPT-2,开发人员可以在 ResNet 的输出之上堆叠一个投影层,并将结果馈送到 GPT-2 的输入嵌入中,以构建一个基础 VLM。