VLM 基础:VLA 的“眼睛和语言中枢”¶
VLM(Vision-Language Model)负责把图像和文字放进同一个语义空间中理解。VLA 不是从零学习“看懂世界”,而是把 VLM 的视觉语言知识接到机器人动作上。
1. VLM 在 VLA 中负责什么?¶
给机器人一句话:
把桌子右侧的红色杯子放到托盘里。
VLM 需要回答一串隐含问题:
- “红色杯子”是哪一个物体?
- “桌子右侧”对应图像中的哪个区域?
- 托盘在哪里?
- 杯子和托盘之间是否有遮挡?
- 当前夹爪是否已经接近杯子?
VLA 的动作头再根据这些理解输出运动命令。
VLM 和 VLA 的区别
VLM 的输出通常是文字、类别、区域或视觉问答结果;VLA 的输出是机器人动作。VLM 可以告诉你“杯子在右侧”,但不会天然知道机械臂该移动多少厘米。
2. 典型 VLM 架构¶
graph LR
A[图像] --> B[视觉编码器<br>ViT/CLIP/SigLIP/DINOv2]
B --> C[视觉 Token]
C --> D[投影层或 Resampler<br>Linear/MLP/Q-Former/Perceiver]
E[文本指令] --> F[文本 Tokenizer]
D --> G[LLM Token 空间]
F --> G
G --> H[LLM/VLM Backbone]
H --> I[文本回答/隐藏状态/动作条件特征]
一套 VLM 通常分成四层:
| 层 | 作用 | VLA 中要关心什么 |
|---|---|---|
| 视觉编码器 | 把图像变成视觉 token | 能否保留目标位置、局部纹理、几何关系 |
| 投影/重采样层 | 把视觉特征接到 LLM hidden size | token 数、维度、信息压缩方式 |
| LLM Backbone | 融合图像和语言 | 是否能理解指令、关系、任务进度 |
| 输出接口 | 输出文字或隐藏状态 | VLA 会把隐藏状态继续接动作头 |
3. 图像如何变成视觉 Token?¶
现代 VLM 的视觉塔常用 ViT。完整细节见 Vision Transformer,这里重点看它在 VLA 中怎么用。
设一张图像大小为 \(H \times W\),patch size 为 \(P\),视觉 token 数为:
例如:
| 图像大小 | Patch size | Token 数 |
|---|---|---|
| \(224 \times 224\) | 16 | 196 |
| \(336 \times 336\) | 14 | 576 |
| \(448 \times 448\) | 14 | 1024 |
VLA 对 token 数很敏感:
- token 太少:小物体、夹爪、接触点容易丢。
- token 太多:LLM 上下文压力大,推理慢。
- 分辨率太低:定位差。
- 分辨率太高:实时性差。
3.1 Patch Token 和 [CLS] Token¶
图像分类常用 [CLS] token 表示整张图,但 VLA 更关心 patch token:
| Token | 表示 | 适合 |
|---|---|---|
[CLS] |
全局图像语义 | 图像分类、整体检索 |
| Patch token | 每个图像区域的局部信息 | 目标定位、空间关系、抓取点判断 |
机器人需要知道“红色方块在夹爪左下方 8cm 左右”,所以只用全局 token 往往不够。
3.2 位置编码为什么重要?¶
Transformer 本身不知道 patch 在图像中的位置。位置编码告诉模型:
- 哪个 patch 在左边,哪个在右边。
- 哪些 patch 上下相邻。
- 物体、容器、夹爪之间的空间布局。
如果位置编码或图像预处理出了问题,模型可能能认出“杯子”,但不知道杯子在哪里。
4. CLIP、SigLIP、DINOv2 分别解决什么?¶
VLA 常见视觉塔不是裸 ViT,而是经过大规模预训练的视觉模型。
ViT 是网络架构;DINO、CLIP、SigLIP更接近预训练方法或预训练模型家族。DINO 是纯视觉自监督路线,CLIP 和 SigLIP 是视觉-语言对齐路线。它们的视觉编码器底层完全可能都使用 ViT。
视觉模型
│
↓
选择模型架构
│
┌──────────────┼──────────────┐
↓ ↓ ↓
ResNet ViT Swin Transformer
│
│
↓
选择怎么训练
│
┌────────────────┼────────────────┐
↓ ↓ ↓
监督学习 DINO 图文学习
│
┌───────┴───────┐
↓ ↓
CLIP SigLIP
| 模型 | 训练思想 | 强项 | VLA 中的价值 |
|---|---|---|---|
| CLIP | 图像和文本对比学习 | 语义对齐、零样本识别 | 理解“红色杯子”“托盘”等语言概念 |
| SigLIP | 用 sigmoid pairwise loss 做图文对齐 | 训练更稳定,对 batch 依赖更小 | 常作为现代 VLM/VLA 视觉塔 |
| DINOv2 | 自监督视觉特征学习 | 局部特征、边界、几何、dense prediction | 帮助定位、接触判断、细粒度视觉 |
| ViT | Transformer 视觉骨架 | patch token + 全局 attention | 作为上述模型的 backbone |
4.1 CLIP(contrastive language-Image pre-training):把图像和文字拉到同一个空间¶
CLIP 同时训练图像编码器和文本编码器。给一批图文对 \((I_i,T_i)\),目标是让匹配的图文更相似,不匹配的更不相似。
通过对比学习让文本和图像对齐,在语义空间上处于相近的位置,其中的图像编码器就是ViT,文本编码器就是transformer。
直觉上:
这两个 embedding 应该靠近;和 “a blue car” 应该远离。
在 VLA 中,CLIP 类特征让模型能把语言中的“红色”“杯子”“托盘”“左边”与图像区域建立联系。
4.2 SigLIP(sigmoid CLIP):图文对齐的另一种损失¶
CLIP 常用 softmax contrastive loss,需要在 batch 内比较所有图文相似度。SigLIP 改用 pairwise sigmoid loss,把每个图文对当成正负样本二分类。就是把损失函数换了一种方式,计算起来更快捷稳定。
对新手来说不必先死记公式,抓住区别:
| 对比 | CLIP | SigLIP |
|---|---|---|
| 损失形式 | batch 内 softmax 对比 | pairwise sigmoid |
| 对 batch 的依赖 | 更强 | 相对更弱 |
| 工程价值 | 经典、生态丰富 | 扩展性和稳定性好 |
很多现代 VLM/VLA 选择 SigLIP,是因为它在大规模图文预训练中表现稳定,视觉语义特征也强。
4.3 DINOv2:不靠文字也能学视觉特征¶
DINOv2 是自监督视觉特征模型。它不需要图文配对,而是通过图像自身的不同视图学习稳定特征。
它对 VLA 很有用,因为机器人不只需要“语义”,还需要“细节”:- 物体边缘在哪里。
- 手爪是否接近物体。
- 小物体和背景是否分开。
- 桌面、容器、遮挡边界如何分布。
OpenVLA 融合 DINOv2 和 SigLIP,就是为了同时拿到:
5. 投影层:视觉 Token 如何接到 LLM?¶
视觉编码器输出维度通常和 LLM hidden size 不同。假设视觉 token 是:
LLM hidden size 是 \(D_l\),需要投影:
最简单是 Linear 或 MLP:
但当视觉 token 很多时,还可能用 resampler 压缩:
| 方法 | 做法 | 适合 |
|---|---|---|
| Linear/MLP | 每个视觉 token 独立映射 | 简单直接,信息保留多 |
| Q-Former | 用少量 query 从图像 token 中取信息 | 压缩 token,适合 VQA |
| Perceiver Resampler | 用固定数量 latent query 汇聚视觉信息 | 控制上下文长度 |
| Pooling | 平均/选择部分 token | 快,但可能丢局部细节 |
投影层不是小配角
如果投影层太弱,视觉特征进不了 LLM;如果压缩太狠,小物体和夹爪细节会丢;如果 token 太多,推理会变慢。VLA 的视觉接口经常卡在这里。
6. VLA 为什么更需要细粒度视觉?¶
普通 VLM 问答可能只需要回答:
VLA 需要输出动作:
所以它更依赖以下视觉能力:
| 能力 | 为什么重要 |
|---|---|
| 小物体识别 | 桌面物体常常很小 |
| 手眼关系 | 要判断夹爪和目标的相对位置 |
| 遮挡推理 | 手爪靠近后目标可能被挡住 |
| 深度/几何线索 | 抓取需要 3D 位姿,不只是 2D 位置 |
| 接触状态 | 是否已经抓住物体常由细微视觉变化决定 |
| 时序稳定性 | 连续控制不能每帧理解跳变 |
这也是为什么纯 VLM 不等于 VLA。VLM 可以给语义理解,VLA 还要把语义变成连续、稳定、可执行的动作。
7. 多相机输入怎么处理?¶
机器人常见视觉输入:
- 第三视角相机:看全局桌面布局。
- 腕部相机:看夹爪附近细节。
- 深度相机:提供距离信息。
- 多个外部相机:减少遮挡。
常见融合方式:
| 方式 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 图像拼接 | 多相机图像拼成一张大图 | 实现简单 | 位置关系可能混乱 |
| Token 拼接 | 每个相机独立编码,再拼 token | 保留视角信息 | token 数变多 |
| 视角 embedding | 给不同相机加 camera id embedding | 帮助模型区分视角 | 需要设计和训练 |
| 3D 对齐 | 用相机外参投到同一空间 | 几何一致性强 | 标定和工程复杂 |
新手阶段建议先用单第三视角或单腕部相机跑通,再扩展多相机。
8. VLM 的局限¶
8.1 像素理解不等于几何精度¶
VLM 能说“杯子在右边”,但机器人需要的是可执行的位姿:
也就是抓取姿态、位置、接近方向和夹爪开合宽度。普通 VLM 不一定具备这种毫米级几何能力。
8.2 视角和遮挡很关键¶
桌面任务常见问题:
- 物体被手爪遮挡。
- 腕部相机和第三视角相机看到的东西不一样。
- 镜面、透明物体、黑色物体容易识别失败。
- 机器人执行后场景变化,旧图像信息过期。
8.3 语言有歧义¶
“拿那个杯子”“放到旁边”“收拾一下”对人类很自然,但对模型可能不够精确。训练数据中的语言标签越规范,策略越容易学。
9. 学习 VLM 时应该做的练习¶
练习 1:图像问答¶
找一张桌面图片,让 VLM 回答:
- 图里有哪些可抓取物体?
- 红色物体在哪里?
- 哪个物体最靠近夹爪?
- 如果要抓杯子,应该从上方还是侧面接近?
观察模型是否会把语义、空间关系和可操作性混在一起。
练习 2:Patch Token 直觉¶
拿一张 \(224 \times 224\) 图片,分别假设 patch size 为 16 和 14,手算 token 数。思考:
- 小物体大概占几个 patch?
- 如果目标只占 2 到 4 个 patch,模型会不会容易漏掉?
- 提高分辨率会带来多少额外 token?
练习 3:多视角对比¶
对同一个桌面拍两张图:
- 第三视角:全局清楚。
- 腕部视角:接近目标但容易遮挡。
比较 VLM 的回答差异。VLA 实践中,多相机融合通常比单相机更稳定。
练习 4:从文字到区域¶
给模型指令:
然后检查它是否真的能利用关系定位目标,而不是只找颜色最明显的物体。
10. 和 VLA 的接口¶
VLM 接到 VLA 时,通常有三种方式:
| 方式 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 直接微调 VLM | 把动作作为输出目标训练 | 结构统一 | 数据和算力要求高 |
| 冻结 VLM + 训练动作头 | VLM 只提特征 | 成本低 | 上限受 VLM 表征限制 |
| 双系统 | 慢速 VLM 规划 + 快速动作专家 | 兼顾推理和控制频率 | 系统复杂 |
对新手来说,最重要的是看懂这条链路:
否则容易只看到“大模型输出动作”这层表象,看不清模型到底在哪里学会了机器人控制。