🎯 一句话理解 VLM
VLM = 让 AI 既"看得懂图"又"说得出话",打通视觉像素与语言语义之间的鸿沟。
人类看一张照片,能瞬间说出"画面里有一个穿红衣服的人正要横穿马路"。VLM(Vision-Language Model,视觉语言模型)要做的,就是让机器获得同一种能力:输入可以是图像、可以是文字、也可以是两者的组合,输出是文字。
它对自动驾驶的意义在于——VLM 是 VLA(Vision-Language-Action,视觉语言动作模型)的视觉理解基础:
换句话说:VLA 先靠 VLM 把"像素"翻译成"语义"(这辆车、这个人、这个红灯),再用大模型的推理能力决定"该怎么做"。VLM 看懂场景的上限,直接决定了 VLA 决策质量的上限。
🧠 第 0 步:前置知识——多模态是怎么"统一"的?
在看四代架构之前,先建立三个最小必要概念,否则后面所有公式都会"飘"。
0.1 世界上有两种信息形态:像素 vs 符号
- 视觉信息:一张图本质是
H×W×3的数值矩阵(宽 × 高 × RGB 三通道)。模型"看"到的就是这些数字,没有"这是猫"这种高级概念。 - 语言信息:一段文字本质是一串离散符号(token),每个符号在词表里有编号。
VLM 的全部工作,就是在这两种完全不同的数据结构之间搭桥——把连续的像素,翻译成离散语言模型能消费的形式。
0.2 LLM 里的一切都是 token(向量)
LLM 内部并没有"字",只有向量:
- 文本先被分词(tokenize):“一只猫” →
["一", "只", "猫"]; - 每个 token 查词表得到嵌入向量(embedding),比如维度 $d=4096$;
- LLM 的 Transformer 在这些向量上做自注意力,最后一层输出每个位置"下一个词是谁"的概率分布。
所以对 LLM 来说,“看懂图"的唯一途径就是:把图像也变成一串向量 token,塞进同一个自注意力序列里。 这就是"多模态统一"的本质,也是下面所有架构的共同目标。整条链路可以先用一张总图把位置感建立起来:
0.3 统一多模态的三种思路(先建立地图)
| 思路 | 做法 | 代表 | 能生成吗 |
|---|---|---|---|
| 对比对齐 | 图像和文本各走各的编码器,只在最后的特征空间里比相似度 | CLIP | ❌ 只能对齐 |
| 特征桥接 | 视觉特征经一个"翻译层"注入 LLM,LLM 负责生成 | BLIP-2 / LLaVA | ✅ 能生成 |
| 原生多模态 | 从零训练一个统一编码器,图/文/音/视频共用 token 体系 | GPT-4V / Gemini | ✅ 全模态 |
后面的架构演进,就是这三条路依次登场的完整历史。
🧬 架构演进:四代 VLM
第一代:双塔对比(CLIP, 2021)
CLIP 由 OpenAI 提出,走的是"对比对齐"路线。它不生成文字,而是让两个编码器各自把图文映射到同一个特征空间,再用对比学习拉近"配对图文”、推远"不配对图文":
结构:图像塔(ViT 或 ResNet)+ 文本塔(Transformer),各自输出一个全局特征向量,经投影层 + L2 归一化后,在同一个空间里算余弦相似度。
核心公式(对称交叉熵 / InfoNCE):设一个 batch 有 $N$ 对图文,相似度矩阵 $s_{ij}=\hat{i}_i\cdot\hat{t}_j$(图像特征与文本特征的内积),则损失为:
$$\mathcal{L} = -\frac{1}{2N}\sum_{i=1}^N \left(\underbrace{\log\frac{e^{s_{ii}}}{\sum_j e^{s_{ij}}}}_{\text{图→文:找到它的文本}} + \underbrace{\log\frac{e^{s_{ii}}}{\sum_j e^{s_{ji}}}}_{\text{文→图:找到它的图像}}\right)$$直觉:对角线上($i$ 图配 $i$ 文本)是正对,其余都是负对。$\log\frac{e^{s_{ii}}}{\sum_j e^{s_{ij}}}$ 相当于问"第 $i$ 张图的特征,在所有 $N$ 个文本特征里,是不是离自己的配文最近"。两个方向都做,所以叫对称。
为什么对比学习能成功? 两个前提缺一不可:
- 海量数据:CLIP 用了 4 亿图文对,提供了极其丰富的负样本;
- 极大的 batch size:CLIP 训练 batch = 32,768,保证每个 batch 里负样本足够多、足够多样。
这在当时只有 OpenAI 的算力能做到。代价也很明显:CLIP 只能对齐、不能生成——它给你一个"图文相似度分数",却不会回答"图上有什么"。
三个关键技术细节(至今仍被沿用):
- Zero-shot 分类:把类别名写成文本(“a photo of a cat."),与图像特征比相似度,相似度最高的就是预测类别。在 ImageNet 上 zero-shot 达 76.2%,不需要任何训练数据即可分类。
- Prompt ensemble:推理时把类别名套进多个模板(
"a photo of a {class}."、"a blurry photo of a {class}."、"the {class} in the picture."等),取所有模板文本特征的均值。这能显著提升鲁棒性,后来成了 VLM 推理的标准技巧。 - 特征空间的可迁移性:CLIP 学到的特征后来被大量用于图像检索、文生图的引导(如 Stable Diffusion 的文本编码器就用了它)。
SigLIP(Sigmoid loss)是 CLIP 的重要改进版:把 softmax 换成 sigmoid 二元损失,即每个图文对独立判断"是否配对”:
$$\mathcal{L}_{\text{SigLIP}} = -\frac{1}{N}\sum_i \log\sigma(s_{ii}\cdot t) - \sum_{i\ne j}\log\sigma(-s_{ij}\cdot t)$$($t$ 是学习到的温度参数。)它不依赖 batch 内负样本的相互竞争,因此 batch size 较小(如 16K)时依然有效,训练更稳定——这也让 SigLIP 成为当前 VLA 视觉编码器的首选(LLaVA、OpenVLA 等都在用)。
第一代小结:CLIP 教会了大家"图文如何对齐",但它只是"判官",不是"话痨"。它把多模态问题从"能不能看"推进到"怎么对齐"。
第二代:Q-Former 桥接(BLIP-2, 2023)
CLIP 只能比对,那么"生成"怎么来?BLIP-2 的答案是:桥接层——用一个可学习的模块,把视觉特征"压缩翻译"成 LLM 能消费的 token,从而第一次实现了"看图说话":
Q-Former 是什么? 一组 32 个可学习的 query token,通过交叉注意力去"询问" ViT 输出的 257 个 patch 特征(256 个 patch + 1 个 [CLS]),把信息压缩成 32 个视觉 token。这相当于一个"信息瓶颈":256 个 patch 里最关键的语义被挑出来,冗余被过滤。
为什么参数高效? Q-Former 只有约 188M 参数,却完成了两个层级的桥接:
- 对 LLM 而言,输入从"257 个 patch"变成"32 个 query 输出",上下文长度大幅缩短(LLM 的 attention 开销随 token 数平方增长,省 8 倍输入就省了 64 倍的 attention 计算);
- 对训练而言,绝大多数参数(ViT + LLM)都冻结,只需训练这一层桥接。
BLIP-2 的三阶段训练(冻结策略逐步放开,见上图右半部分):
| 阶段 | 目标 | 冻结部分 | 说明 |
|---|---|---|---|
| 1. 表示学习 | 让 query 学会从 ViT 提特征 | ViT | 对比损失 + ITM(图文匹配)+ 图文生成,三个目标联合 |
| 2. 生成学习 | 让 LLM 学会"用视觉 token 生成" | ViT + LLM | 冻结 LLM,只训 Q-Former 对齐生成目标 |
| 3. 端到端微调 | 下游任务最优 | 全部放开 | 在目标任务数据上微调 |
BLIP-3 / xGen-MM(2024,Salesforce)是 BLIP 的第三代,去掉了 Q-Former,直接用投影层把 ViT 特征注入 LLM。这印证了一个重要趋势:随着 LLM 能力变强,中间桥接模块可以越来越简单。BLIP-3 同时把训练数据扩展到多语言、多来源的大规模图文语料。
第二代小结:Q-Former 证明了"桥接层"的价值——用极少的可训练参数激活一个冻结大模型的视觉理解能力。但它仍然不是最简方案。
第三代:简单投影(LLaVA, 2023)
LLaVA 由威斯康星大学麦迪逊分校与微软提出,是目前学术界最流行的 VLM 框架。它的核心洞察只有一句话:
“LLM 已经足够强,只需要一个简单的 MLP 把视觉特征’翻译’成 LLM 能理解的格式。”
架构:ViT-L/14 → MLP 投影层(2 层全连接)→ LLM(Vicuna/LLaMA 7B)。图像经过 ViT 得到 576 个 patch 特征(维度 1024),MLP 把它升维到 4096(与 LLM 词嵌入维度一致),然后与文本 token 一起拼进 LLM。
两阶段训练(见上图下部):
| 阶段 | 数据 | 训练范围 | 任务 |
|---|---|---|---|
| 预训练对齐 | CC-595K 图文对(约 59.5 万) | 只训 MLP,LLM 冻结 | 看图生成一句描述(“这是什么”) |
| 指令微调 | 158K 视觉指令(VQA + 对话) | MLP + LLM | 遵循"请描述图中危险物体"等指令 |
为什么 LLaVA 能成为主流? 不只是结构简单,更在于:
- 清晰的训练 recipe:两阶段、数据公开、成本低——LLaVA-1.5 用 600K 指令数据 + 单卡 A100 训练约 1 天,就能达到接近 GPT-4V 的 VQA 性能;
- 开源生态繁荣:社区能复现、能改造,于是围绕它长出了一整片下游应用。
高分辨率改进(对驾驶至关重要):LLaVA 早期只能看 224×224 的图,远处的小目标(行人、锥桶)根本看不清。后继版本逐一解决:
- LLaVA-1.5(AnyRes):把高分辨率图切成多个 336×336 的 patch,每个 patch 独立过 ViT 编码,再拼回 LLM;
- LLaVA-NeXT:支持动态分辨率,输入图像自适应切分,不再固定到某个尺寸;
- LLaVA-HR:用多层 Transformer 投影替换 MLP,保留更多视觉细节。
这些改进对驾驶场景极其关键——驾驶是典型的"小目标密集 + 远距离细节重要"场景,分辨率不足的 VLM 会直接漏掉路边的行人和锥桶。
第三代小结:LLaVA 用"最简单桥接"证明:在 LLM 足够强的前提下,投影层只是"翻译官",不需要复杂的检索或压缩结构。它的高分辨率路线图直接为驾驶 VLM 铺了路。
第四代:原生多模态(GPT-4V / Gemini, 2023)
当前的能力天花板。它们的路线是"原生多模态"——从第一性原理设计,让一个模型直接处理多种模态。
GPT-4V(OpenAI):架构未公开,推测为视觉 encoder + 大规模多模态 Transformer。能力涵盖看图对话、视觉推理、图表理解、视频帧分析。它在自动驾驶中的典型用途是离线推理数据生成:DriveVLM 就是用 GPT-4V 看视频、生成 Chain-of-Thought 标注数据,再蒸馏给自研小模型。
Gemini(Google):从第一性原理设计的原生多模态模型,用一个统一编码器处理图像/视频/音频/文本。Wayve 的 EMMA 就基于 Gemini 系列,一个模型同时输出感知 + 预测 + 规划(把轨迹也编码成 token)。
| 对比 | GPT-4V | Gemini |
|---|---|---|
| 架构 | 视觉 encoder + LLM | 原生统一 encoder |
| 输入 | 图像 + 文本 | 图像 + 视频 + 音频 + 文本 |
| 上下文 | 128K | 1M+ |
| 驾驶用途 | 教师数据生成(DriveVLM) | EMMA 基模型 |
架构趋势总览
| 架构 | 代表 | 融合方式 | 参数量 | 训练成本 | 能否生成 |
|---|---|---|---|---|---|
| 双塔对比 | CLIP | 最后一层对比 | 小~中 | 低 | ❌ |
| Q-Former | BLIP-2 | 交叉注意力桥接 | 中 | 中 | ✅ |
| 直接投影 | LLaVA | MLP | 大 | 高 | ✅ |
| 原生多模态 | GPT-4V | 端到端统一 | 极大 | 极高 | ✅ |
三个贯穿趋势:
- 桥接模块简化:Q-Former → MLP → (未来可能)不需要投影,LLM 直接原生理解视觉 token;
- 视觉 encoder 强化:ViT-B → ViT-L → ViT-G,视觉分支的容量一路变大;
- 训练数据膨胀:4 亿 → 50 亿+,数据质量从"弱对齐"走向"强指令"。
🔬 深度专题:决定 VLM 能力的四个工程点
看懂四代架构之后,真正动手做 VLM(或选型 VLM)时,决定性能的其实是下面四个工程细节。
1. 视觉编码器怎么选?
- CLIP:零样本能力强、通用性好,但对小目标/细节敏感度一般;
- SigLIP:训练更稳、batch 要求低,是目前 VLA 首选(OpenVLA、LLaVA 后续版本都在用);
- InternViT / 其他大视觉模型:分辨率高、参数大,适合高要求场景(如 Senna 用的 InternVL 系列)。
2. 投影层怎么设计?
| 投影方式 | 代表 | 特点 |
|---|---|---|
| 无投影(直接拼) | 部分原生多模态 | 最简,但需从头训 |
| MLP | LLaVA | 简单有效,信息无压缩 |
| Q-Former | BLIP-2 | 压缩 token 数,省 LLM 上下文 |
| Resampler / Perceiver | Flamingo | 类似 Q-Former,可采样固定长度 |
3. 分辨率与位置编码
- 视觉信息里"位置"很重要:VLM 必须知道"这个锥桶在画面的左前方";
- 高分辨率方案(AnyRes、动态切分)要小心位置编码错乱——切分后的 patch 与原始像素位置的对应关系要正确;
- 驾驶场景常用多分辨率 + 位置编码对齐的组合。
4. 图文 token 的组织方式
- 前缀拼接:
[图像 token][文本指令],LLaVA 模式,简单; - 交错输入:图文交替出现,适合文档理解(如多页驾驶手册、多帧视频逐帧插入);
- 特殊分隔符:用
<image>、</image>等 token 标记边界,让 LLM 知道"这里换了一种模态"。
🎓 VLM 训练三阶段
无论哪种架构,现代 VLM 的训练都遵循"三阶段"配方:
| 阶段 | 目标 | 数据 | 典型损失 | 训练范围 |
|---|---|---|---|---|
| ① 对齐预训练 | 视觉-语言特征空间对齐 | 海量图文对 | 对比损失 / ITM / 下一句生成 | 投影层为主 |
| ② 指令微调 | 学会遵循视觉指令 | VQA / 对话 / 指令集 | 自回归交叉熵 | 投影层 + LLM |
| ③ RLHF / DPO | 对齐人类偏好 | 人类偏好标注 | PPO / DPO | 全模型 |
阶段 ② 的数学本质(最重要,几乎所有 VLM 的 loss 都是它):给定图像 $x$ 和指令前缀 $q$,LLM 自回归生成回答 $y=(y_1,\dots,y_T)$,目标是最小化负对数似然:
$$\mathcal{L}_{\text{SFT}} = -\sum_{t=1}^{T}\log P_\theta(y_t \mid y_{三阶段数据量递减,但数据"质量/针对性"递增。对驾驶 VLM 而言:通常做到阶段 ②(驾驶 QA 微调),阶段 ③ 因为"驾驶对错难以人工打分"而交给后续的 RL 环节(AlphaDrive、Flow-GRPO 等)。
🚗 驾驶专用 VLM
通用 VLM 有三个驾驶硬伤:缺少驾驶知识(不知道交规)、分辨率不足(看不清远距小目标)、缺乏时序理解(单帧看不出运动)。业界按四条路线逐一打补丁:
| 适配策略 | 具体做法 | 代表模型 |
|---|---|---|
| 高分辨率 | 切 patch + 多尺度编码 | LLaVA-HR, DriveVLM |
| 多视角 | 多路相机独立编码再拼接 | DriveVLM(6 视角) |
| 时序建模 | 多帧输入 + 时序注意力 | GenAD, Senna |
| 驾驶微调 | 驾驶 QA / CoT 数据微调 | LMDrive, DriveGPT4 |
驾驶 VLM 的三个代表性模型:
- DriveVLM:基于 Qwen-VL,高分辨率 + 结构化 CoT 推理。它的输出分四步:场景描述 → 关键物体 → 因果推理 → 规划建议。这条"看图→思考→决策"的链路,是当前驾驶 VLM 的主流范式。
- EMMA(Wayve):基于 Gemini,多任务统一——感知、预测、规划全部以文本 token 形式输出,一个模型端到端完成。代表"原生多模态"路线在驾驶的落地。
- Senna:基于 InternVL,VLM + 规划头,强调驾驶规则对齐(跟车、让行等交规知识注入)。
驾驶 VLM 的输入输出形态(驱动对话的 prompt 模板):
📊 VLM 关键评估基准
通用多模态基准
| 基准 | 任务 | 典型指标 |
|---|---|---|
| VQAv2 | 视觉问答 | 准确率 |
| COCO Caption | 图像描述 | CIDEr, BLEU |
| MMBench | 多模态理解综合(多任务) | 分类准确率 |
| MMMU | 大学级跨学科知识 | 准确率 |
| POPE | 幻觉(Hallucination)检测 | F1 |
驾驶专用基准
| 基准 | 任务 | 说明 |
|---|---|---|
| DRAMA | 危险场景识别 | 关注驾驶安全场景(行人横穿、事故现场等) |
| DriveLM-nuScenes | 驾驶问答 | 基于 nuScenes 的 QA 对,含结构化推理 |
| Rank2Tell | 风险排序 | 要求按风险等级对场景中物体排序 |
注意:通用基准(MMMU、POPE 等)分数高不代表驾驶好——驾驶需要的是安全敏感度,而不是"知识广度"。评估驾驶 VLM 必须回到驾驶基准。
⚠️ VLM 关键局限(驾驶视角)
- 视觉 Hallucination:模型可能"看到"不存在的障碍物并一本正经地描述,这对驾驶是致命的——谎报一个假行人可能导致急刹,漏报真行人则直接威胁安全。缓解手段:更高的解码温度控制、POPE 这类幻觉检测、以及偏好对齐时把"幻觉"作为负面样本。
- 时序不一致:视频连续帧的描述可能互相矛盾(上一帧"行人静止",下一帧"行人在走")。驾驶场景的核心短板——运动与速度的判断必须依赖时序一致性,而很多 VLM 是单帧训练、单帧推理。
- 微调遗忘:用驾驶数据微调后,模型可能丧失通用知识(对交通标志的常识理解等)。缓解手段:混合通用数据、LoRA 低秩微调、KL 约束(保留原模型分布)。
- 推理速度:数亿到数千亿参数,离车端 <100ms 的实时要求差得远。缓解手段:蒸馏成小模型(如 DriveVLM-Dual 的双分支设计)、量化、只让轻量分支上端。
- 闭环评估难:文本输出难以客观评价"这个转向决策对不对"——语言是中间表示,不是最终动作。这也是驾驶 VLM 普遍要再接一个规划头、或升级成 VLA 的原因。
🧭 如何为驾驶任务选 VLM(决策清单)
| 你的需求 | 建议选型 |
|---|---|
| 只需要"看懂场景"做问答/标注 | LLaVA 系 + SigLIP + 高分辨率 |
| 需要结构化推理(场景→物体→决策) | DriveVLM 系(Qwen-VL 底座 + CoT) |
| 需要车端实时 | 蒸馏小模型 / 双分支(大模型离线标注,小模型在线) |
| 需要多视角 360° 环视 | 支持多视角输入的 VLM(6 相机拼接) |
| 需要最终驾驶动作 | 直接上 VLA(EMMA / DriveVLA),VLM 只做底座 |
✅ 小结
- CLIP:对比学习奠基,zero-shot 迁移能力,只能对齐不能生成;
- BLIP-2:Q-Former 用 188M 参数高效桥接视觉与语言,首次打通"看图说话";
- LLaVA:简单 MLP 投影证明 LLM 可直接理解视觉 token,高分辨率路线为驾驶铺路;
- GPT-4V/Gemini:原生多模态,能力天花板,同时承担"教师数据生成"角色。
VLM 的演进就是"如何让计算机既看图又识字“的技术路线,它是 VLA 的视觉理解根基。VLM 选型决定了 VLA 理解场景的上限——选择视觉编码器(SigLIP vs CLIP)、对齐策略(MLP vs Q-Former)、以及是否支持高分辨率多视角,直接影响了后续驾驶决策的质量。
再往上一层,当 VLM 理解了场景,真正开车还需要把语义变成动作——这就是 VLA 要做的事。建议下一篇接着读《什么是VLA模型》和《VLA大模型训练技巧》。
📖 知识点拆解系列第 11 篇。下一篇:大语言模型基础详解。