跳转至

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 数为:

\[ N = \frac{H \times W}{P^2} \]

例如:

图像大小 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)\),目标是让匹配的图文更相似,不匹配的更不相似。

20260704172438 通过对比学习让文本和图像对齐,在语义空间上处于相近的位置,其中的图像编码器就是ViT,文本编码器就是transformer。

直觉上:

图像:红色杯子在桌上
文本:a red cup on the table

这两个 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 是自监督视觉特征模型。它不需要图文配对,而是通过图像自身的不同视图学习稳定特征。

           一张图片
        ┌──────┴──────┐
        ↓             ↓
      增强A          增强B
        ↓             ↓
   Student ViT    Teacher ViT
        ↓             ↓
      输出A          输出B
        └──────┬──────┘
           让它们一致
它对 VLA 很有用,因为机器人不只需要“语义”,还需要“细节”:

  • 物体边缘在哪里。
  • 手爪是否接近物体。
  • 小物体和背景是否分开。
  • 桌面、容器、遮挡边界如何分布。

OpenVLA 融合 DINOv2 和 SigLIP,就是为了同时拿到:

SigLIP:语言语义强
DINOv2:局部视觉和几何特征强

5. 投影层:视觉 Token 如何接到 LLM?

视觉编码器输出维度通常和 LLM hidden size 不同。假设视觉 token 是:

\[ h_v \in \mathbb{R}^{N \times D_v} \]

LLM hidden size 是 \(D_l\),需要投影:

\[ z_v = h_v W + b,\quad z_v \in \mathbb{R}^{N \times D_l} \]

最简单是 Linear 或 MLP:

视觉 token -> Linear/MLP -> LLM token embedding

但当视觉 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 能说“杯子在右边”,但机器人需要的是可执行的位姿:

\[ T_{\text{grasp}} = \begin{bmatrix} R & p \\ 0 & 1 \end{bmatrix} \]

也就是抓取姿态、位置、接近方向和夹爪开合宽度。普通 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 规划 + 快速动作专家 兼顾推理和控制频率 系统复杂

对新手来说,最重要的是看懂这条链路:

图像 -> ViT/SigLIP/DINOv2 -> 视觉 token -> 投影层 -> LLM hidden state -> 动作头

否则容易只看到“大模型输出动作”这层表象,看不清模型到底在哪里学会了机器人控制。


11. 继续阅读


12. 参考资料