news 2026/9/18 19:26:33

VLM、VLA、VLN三者区别详解:从视觉理解到具身智能导航

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VLM、VLA、VLN三者区别详解:从视觉理解到具身智能导航

最近后台和群里收到不少提问,都是围着三个缩写转:VLM、VLA、VLN。有人把VLA当成VLM的升级版,有人以为VLN是VLA的一个数据集,还有人干脆把三个词混着用。其实这三个概念在具身智能、多模态大模型和机器人导航领域各占一个位置,既有重叠又各有侧重,搞混了很容易在选方向、做实验时走偏。这篇文章就把它们的区别、联系,以及怎么上手实验一次性讲清楚,顺便把VLA在LIBERO上的测试流程、VLN的入门项目复现这条线也一起聊透。适合正在入门具身智能、想复现VLA/VLN论文,或者对机器人“视觉-语言-行动”链路感兴趣的读者。

1. 先搞清楚三个缩写:VLM、VLA、VLN分别是什么

1.1 VLM:只说不动,负责“看懂”的模型

VLM全称是Vision-Language Model,视觉语言模型。这类模型的输入是图像/视频加文本,输出通常是文本,或者一个跨模态的特征表示。CLIP、LLaVA、GPT-4V都属于VLM的范畴,核心能力是把“看到的内容”和“语言的描述”对齐起来。

你可以把它理解成一个“见多识广的讲解员”。给它一张图,它能告诉你图里有什么、物体在什么位置、场景是什么氛围;给它一段文字,它能判断这段文字和哪张图匹配。但讲解员不会亲手帮你搬桌子,VLM也一样,它只负责理解和描述,不负责输出任何机器人能执行的动作。

VLM的训练思路也很直观。一类是对比学习,比如CLIP,让匹配的图文对距离更近、不匹配的图文对距离更远;另一类是生成式训练,比如LLaVA、GPT-4V,用大规模图文数据和指令数据做监督微调,让模型学会把图像内容“翻译”成自然语言答案。现在主流的VLM基本都是视觉编码器加语言模型的组合,视觉部分提取特征,语言部分负责推理和生成。

1.2 VLA:在VLM基础上长出“动手”的能力

VLA全称是Vision-Language-Action Model,视觉语言动作模型。它做的事情比VLM更进一步:输入图像和文本指令,输出机器人可以直接执行的动作,比如关节角度、末端位姿、速度指令等。

VLA和VLM在架构上最大的区别在“头”上。VLM输出的是文本token,VLA则在语言模型之上增加了一个动作输出头,把动作空间建模成离散token或者连续向量去预测。代表工作有Google的RT-2、斯坦福主导的OpenVLA、Physical Intelligence发布的π0(很多人也直接叫它π VLA),还有最近NVIDIA开源的面向辅助驾驶的VLA推理模型Alpamayo。这些模型的共同点是把“理解”和“控制”放在同一个模型里端到端训练,不再需要传统的“感知→规划→控制”模块化流水线。

在具身智能社区里,最近经常看到“beat VLM”这种说法,意思是某个机器人在操作任务上比纯VLM方案有更高的成功率。这本质上是在强调:光看懂世界不够,机器人要真正干成事,必须把理解转化为动作能力,而这一步正是VLA存在的价值。

1.3 VLN:不只动手,还得在环境里“认路走完全程”

VLN的全称是Vision-and-Language Navigation,视觉语言导航。它的任务定义很清晰:给一个智能体一条自然语言指令,比如“从卧室出发,走到厨房,把桌上的红色杯子拿起来”,智能体需要边观察环境边决定下一步往哪走,最终到达目标位置。

VLN和VLA最明显的区别在于任务的时空跨度。VLA通常处理的是单步或几十步内的桌面操作,工作空间就是机器人面前那一小块区域;VLN则要在一个完整的室内环境里做长程导航,动辄几十步、上百步,跨房间、跨楼层都很常见。VLN的评价指标也和VLA完全不同,最常用的是成功率SR和按路径长度加权的成功率SPL。

典型的VLN研究载体是R2R数据集、RxR数据集,以及面向连续动作空间的VLN-CE基准。方法上,早期是专用的序列模型,后来是多模态Transformer,最近两年LLM/VLM驱动的零样本VLN也成了热门方向,比如NavGPT、TraveXplorer这类工作。我后面会专门展开讲TraveXplorer这类项目怎么复现。

2. 三者的核心区别:理解、操作与导航

2.1 一张表看懂输入、输出和评价维度的差异

把三个概念放在同一张表里对比,就非常清楚了:

维度VLMVLAVLN
全称Vision-Language ModelVision-Language-Action ModelVision-and-Language Navigation
核心任务理解视觉和语言根据视觉语言生成操作动作根据指令在环境中长程导航
输入图像/视频 + 文本图像/视频 + 文本(含历史状态)图像 + 文本指令 + 历史观测
输出文本/特征向量动作向量(关节/末端/速度)导航动作序列或路径
典型代表CLIP、LLaVA、GPT-4VRT-2、OpenVLA、π0、AlpamayoTraveXplorer、NavGPT、BEVBert
评测方式图文检索、VQA、描述生成操作成功率(如LIBERO)SR、SPL(如R2R、VLN-CE)
部署形态API服务或模型库机器人策略模型导航智能体系统

这张表是很多人第一次看最需要的东西。VLM站在“理解层”,输出的是符号;VLA站在“操作层”,输出的是机器人关节空间的信号;VLN站在“任务层”,它关心的不是某一个动作怎么给,而是整条轨迹怎么走完。

2.2 从“看懂”到“动手”再到“走通”的递进关系

我用一个生活化的类比来解释三者关系。你到了一个陌生的城市,VLM相当于一个只读地图不出门的导游,它能告诉你“市中心在东边、博物馆在河对面”,但它不会替你迈一步。VLA相当于一个机械臂操作员,它能把面前桌上的杯子拿起来、放进托盘,但它离不开工位,无法自己走到隔壁房间找杯子。VLN则是一个能在楼里来回穿梭的送货员,它听指令认路、进房间、走到目标物面前——至于最后怎么稳稳抓取那个杯子,往往还要靠VLA去完成。

所以三者的关系不是简单的“升级”,而是“地基相同、目标不同”。VLM是基础能力层,VLA是把能力往操作方向延伸,VLN是把能力往空间决策方向延伸。在日常讨论中,VLA和VLN经常被放在一起,是因为它们都属于“具身智能”任务,都要让模型做闭环决策,都需要与环境持续交互。

2.3 隐含差异:任务时间尺度与动作空间形态

除了输入输出,三者还有一个经常被忽视的差异,就是时间尺度和动作空间形态。

VLM的推理是“一次性的”,给一张图、返回一段话,没有连续决策的概念。VLA的动作空间通常是连续控制的,一次推理输出一个动作向量,比如七维动作(三维位置、三维姿态、夹爪开合),然后这个动作在仿真器或真机上执行,新图像再送回来做下一次推理。这里的决策频率很高,一秒十几次甚至几十次都很常见。

VLN的动作空间则有两种形态。一种是离散图导航,环境被建模成预定义的航点图,智能体只需要选择“去哪个节点”,典型代表是R2R;另一种是连续空间导航,比如VLN-CE,智能体直接输出前进、转向等连续速度指令,更接近真实机器人部署。从单步决策频率看,VLN远低于VLA,但从时间跨度和空间范围看,VLN要处理的信息量更大,也更容易累积错误。

3. 三者的联系:VLA和VLN都长在VLM的根上

3.1 VLA与VLM的联系:动作作为语言的延伸

VLA在结构上几乎就是把VLM“换了个输出目标”。RT-2的做法是最直观的例子:把机器人动作离散成token,然后像语言模型预测下一个单词一样去预测下一个动作token。OpenVLA也是类似的思路,加载一个预训练的VLM(Prismatic,LLaVA的变体),再把动作回归任务接在语言模型后面,用Open X-Embodiment数据集做监督微调。π0则更进一步,用流匹配的动作头直接生成连续动作分布,避免离散化的精度损失。

这种设计思路有一个很实际的好处:VLM从互联网图文数据里学到的“世界知识”可以无缝迁移到机器人控制任务。比如模型见过无数“红色杯子”“抽屉”的图文对,当机器人收到“把红色杯子放进抽屉”的指令时,VLA中的语言模型部分已经具备对物体和空间关系的理解,只需要再学一层动作映射就能输出合理策略。这也是为什么现在VLA基本都基于大参数VLM初始化,而很少从零随机训练。

3.2 VLN与VLM的联系:导航本质是空间化的视觉推理

VLN和VLM的关系更微妙。很多人第一反应是“VLN不就是给VLM加个导航模块吗”,实际没这么简单,但确实建立在VLM基础之上。

传统VLN方法要专门设计场景语义编码器、指令编码器和跨模态注意力模块,训练成本高、泛化也一般。最近两年出现了大量用VLM/LLM做导航决策的工作,比如NavGPT直接用大语言模型做推理,把历史观测转成文字描述,再让LLM决定下一步动作;TraveXplorer则把流程拆成视觉感知、场景记忆、指令理解、动作规划几个模块,其中视觉感知部分就用到了视觉语言基础模型。

VLM在VLN里充当的角色可以概括为三类:第一是“语义传感器”,把原始图像变成富含语义的文字或特征描述;第二是“工作记忆”,维护一个拓扑化的场景记忆,告诉模型“我从哪里来、去过哪些地方”;第三是“决策器”,根据指令、当前观测和历史记忆,从候选动作或候选地点里选一个执行。所以,VLM给VLN带来的核心提升是“零样本理解能力”:模型没有见过某个真实场景,也能凭借图文预训练知识判断“卧室”“厨房”“走廊”长什么样,从而完成导航。

3.3 交叉地带:导航型VLA与自动驾驶VLA

VLA和VLN之间的边界并不总是清楚的,因为存在一批“既是VLA又是VLN”的系统。

最典型的就是自动驾驶场景。NVIDIA开源的Alpamayo就是一个面向辅助驾驶的VLA推理模型,输入是道路图像、历史驾驶状态和文本指令,输出是方向盘、油门、刹车等控制动作。把它放到上面的表格里,它的任务本质是“在动态环境中导航到目的地”,属于VLN的任务范畴;但它的输出是连续控制信号、决策频率很高,又符合VLA的技术特征。

另一个例子是“移动操作”机器人。一个轮式底盘加一条机械臂,收到“去厨房拿一瓶水放到客厅茶几”指令后,它需要先做VLN式的导航,抵达厨房后再做VLA式的抓取、操作。现在很多研究团队已经在做这种“导航+操作”的统一大模型,把VLA的动作空间扩展成“底盘速度+机械臂关节”的联合空间,同时建模长程导航策略和近端操作策略。这个概念上的融合未来只会越来越多,这也是有必要把三个术语理清楚的现实原因。

4. 实操参考:VLA在LIBERO上的测试与VLN项目复现

4.1 VLA测试第一步:环境准备与模型加载

如果你现在想跑一个VLA模型,最推荐从OpenVLA开始。原因是它的权重公开、开源协议友好、配套代码相对完善,而且社区讨论多,遇到问题容易搜到解决方案。

环境上,建议用一台显存至少24G的GPU(比如RTX 4090、A6000、A100),系统装好PyTorch 2.x、transformers、accelerate。OpenVLA的模型加载现在可以直接走HuggingFace,核心代码看起来是这个样子:

import torch from transformers import AutoProcessor, AutoModelForVision2Seq processor = AutoProcessor.from_pretrained( "openvla/openvla-7b", trust_remote_code=True ) vla = AutoModelForVision2Seq.from_pretrained( "openvla/openvla-7b", torch_dtype=torch.bfloat16, trust_remote_code=True ) # 输入:一张机器人视角图像 + 一条文本指令 image = load_image("robot_view.png") instruction = "pick up the red cup and put it in the drawer" inputs = processor( image, instruction, return_tensors="pt" ).to(vla.device) # 输出:动作向量或动作token,取决于模型配置 action = vla.predict_action(**inputs, unnorm_key="libero_spatial") print(action)

注意,不同版本文档对predict_action的参数名可能略有不同,建议以官方仓库README为准。我当时第一次跑就卡在transformers版本上,OPENVLA的代码对transformers版本比较敏感,版本太高或太低都容易报兼容性错误,稳妥做法是直接用官方environment.yml创建conda环境,再手动加自己需要的包。

4.2 在LIBERO上跑通VLA评估流程

LIBERO是现在VLA评测最常见的基准之一,全称是Learning In Interactive Robotic Environments,核心是几十到上百个桌面操作任务,专门测试模型的空间泛化、物体组合泛化、目标泛化和长时程规划能力。LIBERO里常用的任务套件有LIBERO-Spatial、LIBERO-Object、LIBERO-Goal、LIBERO-Multi-Task、LIBERO-Long-Horizon,每个套件都有100条测试episode,最终报告平均成功率。

为什么大家都在LIBERO上测VLA?因为它使用仿真环境,不需要真机,成本低、可复现性强;任务设计上区分了“空间位置变化”“物体组合变化”“目标指令变化”等不同维度的泛化能力,能比较客观反映模型到底是背了训练数据,还是真正学会了理解指令和操作逻辑。

在LIBERO上测VLA的基本流程分四步:

  1. 安装LIBERO依赖(Mujoco、robosuite等),最稳的是按官方environment.yml建conda环境。
  2. 下载VLA权重,比如OpenVLA-7B基座权重。
  3. 使用官方评估脚本指定数据集和测试范围,跑完会输出成功率。
  4. 如果要做微调,就准备LIBERO的专家演示数据,先做LoRA微调再评估。

整个评估循环用一个伪代码理解更直观:

success_list = [] for episode in libero_test_set: obs = env.reset() instruction = env.get_task_instruction() done = False while not done: image = obs["agentview_rgb"] action = vla.predict_action(image, instruction) obs, reward, done, info = env.step(action) success_list.append(env.is_success()) avg_success = sum(success_list) / len(success_list) print(f"LIBERO成功率: {avg_success:.2f}")

这里有一个比较关键的细节:VLA输出的动作通常需要反归一化。因为训练时动作被压缩到[-1,1]区间,推理后要乘以动作空间的范围才能给仿真器执行。OpenVLA的checkpoint里通常绑定了每个数据集的归一化参数,加载时把对应的unnorm_key传进去就行,比如上面例子里的libero_spatial。不传错误则动作会明显漂移,成功率直接崩到接近零,这是很多人复现时最容易踩的坑之一。

4.3 VLN入门:R2R、VLN-CE与TraveXplorer复现

VLN的入门门槛比VLA略高一些,主要卡在数据集和模拟器上。入门最常接触的两个数据集是R2R和VLN-CE。R2R基于Matterport3D扫描的真实室内场景,将环境抽象成离散航点图,导航变成“选择下一个航点”的分类任务,入门友好;VLN-CE则把离散图拿掉,智能体在Habitat仿真器里输出连续速度指令,更接近真机,难度也更高。

推荐入门路径是先跑一个R2R上的经典基线,理解最基础的“指令编码→视觉编码→跨模态匹配→动作选择”框架。然后再去看最近两年大模型驱动的零样本导航工作。TraveXplorer就是个很好的研究和复现对象。这类零样本VLN框架通常不做任务数据集的微调,而是把流程拆成几个模块:视觉感知模块用视觉语言基础模型把当前视角渲染成语义描述,记忆模块用拓扑图维护已经探索过的区域,规划模块用LLM根据自然语言指令和场景记忆做下一步决策,最后再由底层的导航策略执行动作。复现的时候,你真正要动手实现的是这几个模块怎么串起来,以及怎么给LLM设计有效prompt。

复现TraveXplorer一类项目时,常见的流程是:

  1. 准备好Matterport3D模拟器和Habitat环境(R2R需要下载场景数据,VLN-CE还需要额外下载数据集)。
  2. 配置LLM的API key,因为零样本VLN通常要调用GPT等大模型做推理。
  3. 跑通主干逻辑,先不追求成功率,重点看智能体是否能在简单场景里按指令完成几步导航。
  4. 再逐步加记忆增强、低级策略优化、指令错误恢复等模块。

这里有一个比较反直觉的经验:零样本VLN的成功率往往比有监督基线低不少,但它的“泛化性”体现在未见过的场景上。所以复现时不要只盯着绝对SR数字,要看模型有没有真的在“理解指令—执行导航”,而不是像有监督模型那样遇到训练集外的场景就乱走。

4.4 一条相对平滑的入门学习路线

如果你是从零开始想进入这个方向,我给一条相对平滑的路线,大约需要八到十周。

第一周打基础,把Transformer、CLIP、多模态对齐的核心概念过一遍,不用深入推导,但要清楚VLM的输入输出和训练范式。第二到第三周选一个轻量VLM跑通图文问答,比如用LLaVA的轻量版本或OpenFlamingo,理解视觉编码器和语言模型怎么交互。第四到第六周进入VLA,读OpenVLA论文,在LIBERO-Spatial上跑通评估,尝试用LoRA微调一个简单任务。第七到第八周进入VLN,精读R2R论文,跑一个baseline,再尝试复现TraveXplorer。后面时间就可以结合具体课题深挖,比如把VLA的导航能力扩展、或者做VLN和真实机器人的对接。

有人会问,VLA和VLN能不能同时学?我的建议是别贪多,先抓一条主线。如果你更关注机器人操作控制,先死磕VLA;如果你更关注空间推理和智能体决策,先死磕VLN。两个方向的前置知识80%重合,先做出一个有深度的成果,再横向迁移反而更快。

5. 坑与心得:实测中踩过的那些问题

5.1 LIBERO和VLA相关的常见问题

LIBERO安装失败是高发问题。绝大多数情况出在Mujoco和robosuite的版本兼容上,尤其是系统自带OpenGL库冲突。建议在干净的conda环境里安装,不要直接pip install -r requirements.txt,先执行官方environment.yml,再检查mujoco_py是否能正常渲染。还有一个常见问题是LIBERO依赖的Python版本,官方通常要求3.8或3.9,新版Python容易编译失败。

显存不足也非常常见。OpenVLA-7B用bfloat16加载推理大约要14G显存,但LIBERO评估时还会开仿真渲染,如果GPU同时跑模型和渲染,24G是起步,32G以上比较舒坦。如果显存不够,不要直接硬扛,一是把图像分辨率调低,二是把batch_size设到1,三是考虑用LoRA微调一个小模型,或者用量化加载。需要特别提醒的是,很多人只看成功率来挑模型,但在LIBERO这种规模较小的benchmark上,随机种子和初始化都会对结果产生几个点的波动,比较模型差异时务必多次运行取平均。

动作反归一化的问题前面提过,再强调一次。OpenVLA在LIBERO上出现的“训练成功很高,评估崩成零”的案例,一半以上是unnorm_key传错了。不同数据集的动作范围和频率都不一样,不要自己硬算,直接用权重文件里记录的归一化参数。

5.2 VLN相关的常见问题与排查

VLN复现第一道坎是模拟器。R2R导航依赖Matterport3D模拟器,有些数据集需要申请下载权限,等审批可能就要几天。VLN-CE依赖Habitat,安装时要留意版本,以及渲染后端是CPU还是GPU,CPU渲染慢到让人怀疑人生,建议直接上带GPU的服务器。

第二道坎是LLM幻觉。零样本VLN里LLM经常会在决策时“想象”出一个不存在的目的地,比如指令说“去厨房拿苹果”,模型已经在客厅,却直接回答“走到苹果面前”,而眼前根本没有苹果。排查思路是给LLM的候选动作做约束,从环境真实可执行的动作集合里选,而不是让LLM自由生成。另一个经验是把历史记忆做得更“稠密”——不要让LLM只凭当前一帧图像做决策,把最近几步的观测描述和拓扑图路径都拼进prompt,误判率会明显下降。

第三道坎是评估指标的误读。SR和SPL是VLN最核心的指标,但很多人复现时发现某个模型SR高、SPL低,就觉得奇怪。这其实是正常的:SR衡量“到没到”,SPL衡量“有没有高效地到”。有的模型会在环境里绕一大圈最后到达目标,SR高,但因为路径太长,SPL就被拉低了。分析模型行为时两个指标要一起看,单看任何一个都可能得出错误结论。

5.3 最后说点个人体会

从一个方向跑到另一个方向的过程中,我最大的感受是:VLM、VLA、VLN本质上都在解决同一个问题——让机器学会“看见、思考、行动”的闭环,只是落点不同。VLM强调感知理解,VLA强调动作执行,VLN强调空间决策与长程任务组织。理解这一点之后,你会发现很多论文其实是在边界上做文章:有论文给VLA加导航头,有论文用VLN的拓扑记忆改进VLA的长时程操作,也有自动驾驶工作把VLA和VLN完全揉在一起。方向在融合,术语在模糊,但底层逻辑没有变。

如果你正在纠结该从哪个入手,我的建议是先把VLM的基础打牢,再根据自己是偏操作还是偏导航来选择VLA或者VLN深入。做实验的时候,一定要记录每一个环境版本、权重版本、参数设置和随机种子——这种习惯在复现和对比模型时能省下一大堆时间。当然,也别迷信benchmark上的几个点,机器人这个领域,仿真和真机之间的鸿沟,往往比两个模型之间的差距大得多。真正重要的是你能不能把模型放进一个闭环系统里稳定地跑起来,这一关过了,方向上的细节问题反而都好解决。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 19:26:27

AI陪伴长期记忆架构:事实-模式-意图三层设计

1. 为什么“AI陪伴”必须解决长期记忆,而不是只靠上下文窗口?我第一次在真实产品中部署AI陪伴对话模块时,团队里所有人都觉得“用好大模型的上下文长度就够了”——毕竟主流模型现在都能塞进32K甚至128K token,聊个几十轮对话、记…

作者头像 李华
网站建设 2026/9/18 19:26:18

图像内容自适应滤波:原理、实现与参数调优指南

简介:PDF文档《一种基于内容的图像自适应滤波算法》是一篇面向图像处理与人工智能方向研究者的算法论文。该论文针对高斯白噪声和椒盐噪声干扰下的图像去噪问题,提出基于图像分块内容自适应调整滤波系数的思路,融合均值滤波与中值滤波优势&am…

作者头像 李华
网站建设 2026/9/18 19:22:55

Go 服务内存泄漏定位实战:pprof 与 inuse_space 分析

Go 服务内存泄漏定位实战:pprof 与 inuse_space 分析在很多人印象中,Go 拥有现代化的垃圾回收器(GC),基本不会发生内存泄漏。但在线上长期运行的高并发服务中,“Goroutine 泄漏”和“未释放的切片底层数组引…

作者头像 李华
网站建设 2026/9/18 19:20:53

自组织视角下智能制造系统演进与仿真实践

简介:一份围绕智能制造系统技术演进的学术文献,以自组织方法论为分析框架,面向智能制造研究者、产业规划人员以及系统开发从业者。内容从传统制造业痛点出发,剖析现有研究方法的局限,并基于系统开放性、非线性等特征&a…

作者头像 李华
网站建设 2026/9/18 19:20:14

电机控制工程师的PCB能力边界:看懂、排查、提意见

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华