尧图精选

端到端VLA模型:从视觉语言到机械臂动作的具身智能实践

🕒 发布时间:2026/9/16 10:09:42 📁 来源:尧图网络
前两个月我帮一个朋友调试机械臂他一开始张口就是“视觉模块、轨迹规划、抓取策略”把VLA当成又一种控制算法。我跟他解释VLAVision-Language-Action不是原来那种模块拼接而是把视觉输入、语言指令和机械臂动作全部端到端地揉进一个模型里。这个方向在具身智能里热度很高相关搜索词已经覆盖了从数据集质量、传感器、到本地部署和微调。这篇帖子就把我对VLA的理解、项目选型时的判断还有踩过的坑一次说清楚。适合正在做或准备入局具身智能、机械臂、多模态大模型的朋友参考。1. VLA到底是什么把“看、听、动”揉进同一个模型1.1 具身智能和端到端这两个词先对齐具身智能这个词现在被引用得太频繁了很多时候被等同于“机器人”其实它强调的是“智能在物理世界里通过与环境的交互得到体现”。一个具身智能体必须有传感器、必须有能改变现实状态的执行器还要有一套根据感知和历史信息决定动作的策略。VLA就是这套策略的一种实现形态。端到端更像一种设计哲学不做感知模块、规划模块、控制模块的硬拆分而是把“摄像头画面 关节状态 人类指令”放在输入侧把下一个期望动作放在输出侧模型内部自己去学习从像素到动作的映射关系。传统机器人里比较常见的流程是目标检测-路径规划-插补-伺服控制每层之间靠接口通信单看每个模块都没问题但一旦场景变化某个模块的误差会在下一层被放大。端到端不是完全没有中间变量而是把特征表示的设计交给网络减少人工定死的接口整体上更容易做到全局优化。这里要提醒一下端到端并不等于“黑箱万能”。控制器层面该有的限位、碰撞保护、急停逻辑不要因为用了模型就把这些层拆掉。我在很多项目里看到的做法是VLA输出目标或轨迹底层还是保留一个安全控制守护层模型负责聪明控制负责保命。1.2 Vision-Language-Action的三个核心组件VLA的输入一般由三部分组成视觉输入当前相机画面可以是单目RGB也可以是RGB-D或鱼眼多视角。视觉信息决定模型对环境的感知能力。语言指令自然语言描述例如“把红色杯子放到蓝色托盘里”这是任务意图的核心输入。本体状态关节角度、夹爪开合状态、末端位姿等对应的是“身体状态”的反馈。输出则是一个动作序列或连续动作增量。具体到模型结构可以把它分成三段看。第一段是视觉编码器Vision Encoder。常见的包括ViT、SigLIP、DINOv2这类预训练视觉Transformer负责把图像变成token序列。写训练管线时这里最容易被忽略的是图像分辨率和相机内参畸变。同一个模型用1080p训练部署时缩放到224可能没问题但如果相机拿到的画面本身有畸变不预处理就直接喂给模型动作误差会非常稳定地出现在边缘区域。第二段是语言大模型LLM。VLA之所以被归到大模型这个方向上就是因为它把语言指令作为prompt的一部分靠LLM理解“做什么”。这部分决定模型的指令跟随能力和常识推理上限。第三段是动作头Action Head。动作头是VLA区别于普通多模态大模型的关键结构。有的实现把它做成动作token的输出去预测离散动作有的做成MLP直接回归连续动作增量。不要小看这一段后文会专门拆开讲。简单类比这三个组件相当于给机器人请了一个带队老师傅——眼睛负责看场景视觉编码器脑子负责理解需求并想步骤LLM手负责执行动作动作头。具身智能要落地这三个人基本缺一不可。1.3 绕不开的几个参考模型想入门VLA有几篇工作绕不开。RT-1是谷歌较早提出的机器人Transformer模型并不大但是证明了用Transformer结构去直接输出高层动作是可行的也带火了“动作token”这个说法。RT-2是RT-1的继任者直接用大规模视觉语言模型来做VLA网络内部的语义理解明显提升能迁移常识到没有见过的指令上。它的经典做法是把机器人动作离散成token然后像语言模型生成文本一样生成动作token。这个思路影响很大后来很多工作都在它的基础上做动作分桶。OpenVLA是目前开源社区里比较主流的一个7B级别VLA完整开源了模型权重和训练代码适合自己在机械臂上做二次开发和微调。它基于Prismatic视觉语言模型微调而来也是用离散动作token。πPi走的是另一条路线通过专家混合机制构建动作生成模型在部分连续控制场景下比纯语言模型结构的VLA更平滑。还有一个比较新的例子是NVIDIA发布的Alpamayo面向辅助驾驶场景做开源VLA推理模型虽然场合放在车上但模型对语言、视觉和连续动作的统一建模思路跟机械臂VLA是一致的。了解它可以帮助理解VLA如何从实验室走向行业。这里建议大家不要只盯着一篇论文看最好按时间线横向对比一下RT-1、RT-2、OpenVLA、π这几篇重点观察它们的动作表征方式是怎么演进的。2. 为什么端到端成为主流VLA背后的技术逻辑2.1 大语言模型带来了常识推理能力传统机器人策略一般只能执行程序员写死的动作模板遇到没见过的物体或者没见过的布局就会失效。VLA不同它前面挂了一个在大规模图文数据上预训练过的语言模型。这个模型的权重里压缩了大量“世界常识”比如杯子是圆柱形、杯子通常要开口朝上、托盘是平的这类知识。面对新物体时VLA可以靠这些先验知识完成零样本或少样本迁移不需要重新采集几千条轨迹。在实测里最直观的体验是同一个VLA模型我可以把“把红色杯子放到蓝色托盘里”换成“把茶壶放到最左边的盘子里”不用重新训练它也能大致做对。这在传统视觉抓取方案里是做不到的传统方案往往需要重新标注、重新训练或至少更新识别器。但也要提醒自己这里说的是“常识推理”不是“真理解”。当指令里包含复杂因果、否定含义或者多步骤组合时模型经常会在中间某一步出错。比如你告诉它“如果杯子里没有水就把它倒扣过来”很多VLA会忽略“如果没有”这个前置条件直接执行倒扣。这种语义缺陷并不是换一个更大的模型就能解决的很多时候需要在数据里专门设计条件指令。VLA的评测也不能只看动作成功率。我见过有人在论文里刷出95%的成功率但测试任务的物体位置只换了三个固定点位。换到真实项目里物体位置稍微偏离一点成功率立刻掉到六成。所以评估指标至少要包括成功率、任务耗时、失败原因分类、以及不同光照和背景下的鲁棒性。这些都是项目落地时更关注的东西。2.2 动作表征连续回归还是离散Token动作表征是我认为整个VLA设计里最容易被低估的地方。语言模型天生擅长输出离散token但机器人动作是连续的力矩、位置增量。为了让大模型输出能用业界主要就三条路线。方案思路优点缺点代表工作离散动作Token将动作空间分桶做成词表对齐LLM训练范式实现简单离散化带来量化误差细粒度控制吃力RT-1/RT-2/OpenVLA连续动作回归动作头输出浮点增量直接给底层执行精度高、平滑性好需要额外训练动作头模型收敛难度大π混合专家及部分扩散策略扩散式动作生成用扩散模型去噪生成下一步动作分布拟合能力强多峰动作表达好推理速度慢需要多次采样扩散策略系列如果只是做桌面抓取离散token完全够用如果要做精密装配、插孔、打磨这类连续力控任务纯离散动作会明显卡顿因为动作空间被分桶后末端的微小调整可能落在同一个桶里模型“感知不到”差异。这时建议考虑连续回归或扩散式生成。另外一个容易踩的点是动作坐标系。有的模型输出的是末端在相机坐标系下的位姿有的是在基座坐标系下的增量还有的直接输出电机关节角度。选型时一定要先确认模型的输出定义然后与机器人底层接口对齐否则模型本身没问题但一执行就乱动。2.3 两阶段训练先对齐视觉语言再学动作VLA的完整训练一般分两步走。第一步是视觉语言对齐。直接用现成的多模态大模型或视觉语言模型让模型对输入图像和语言指令形成稳定的语义表示。这一步通常不需要机器人数据用的是大量的图文数据。第二步是策略微调。用遥操作采集的轨迹数据图像序列指令动作标签把模型从“能理解任务”变成“能输出动作”。微调时动作头在这一步被单独投入使用有些模型会把动作预测损失和语言损失混在一起共同优化。数据混合是个细节。一个常见策略是把机器人轨迹数据和大规模纯文本数据按比例混合比例大概在1:2到1:10之间目的是防止灾难性遗忘。忘了语言能力模型会从“能听会看”退化回“只会复制动作”的尴尬状态。训练损失的设计也要注意。动作损失如果权重太高模型会变得只关注动作输出忽略语言指令结果就是它对所有指令都输出同一个动作语言损失权重太高动作精度又上不去。一般的做法是动作损失和语言损失分开设定动作部分用L2或交叉熵语言部分用标准的大模型损失然后通过一个超参数去平衡。这个超参数在不同模型上差异很大我通常会先在少量数据上跑一轮画出两个loss的下降曲线再决定权重比例。3. 数据、传感器、算力VLA落地的三座山3.1 具身智能数据集的质量要求越来越像一门学科VLA对数据的依赖程度比传统视觉模型高得多。以前做视觉识别拿一两千张图也能凑合现在做VLA动辄几万条轨迹数据而且每条轨迹里要同时包含图像、指令和动作标签。这时候就出现了一个问题到底什么样的数据才叫合格最近“具身智能数据集质量要求及评价方法”这类话题频繁出现核心维度可以归纳成几点。第一动作与场景必须严格对齐。遥操作录数据时人操作错误、中途犹豫都会留在数据里。动作标签本身是“人手动记录的操作”如果图像内容跟动作标签对不上模型就会学到错误的映射。第二语言指令要有覆盖度和一致性。一个任务最好有多条不同表达方式的指令避免过拟合到某个固定句式。比如“拿起杯子”和“帮我把那个杯子拿过来”虽然意思相近但在模型看来是完全不同的token序列训练集里如果只有一种说法部署时换成自然口语就失效了。第三时间戳要干净。相机的图像帧率和动作记录的频率经常不一致比如相机30FPS底层控制100Hz做数据清洗时就要匹配好时间戳。这个问题在真实采集时非常常见也是最容易被忽视的。第四场景分布要多样。如果只在一张桌面上采集抓取数据部署到隔壁工位效果断崖式下跌是正常现象。多样性比总量更重要的原因就在这里模型需要学会的是“泛化规则”不是“背诵场景”。第五要考虑负样本。不少VLA项目只录成功轨迹没有把“尝试但失败”的过程录进去。这样模型学到的策略往往很脆碰到障碍物不会做纠偏。做数据采集时我建议至少留出20%的轨迹做验证集而且验证集要跟训练集来自不同的采集批次。这样才能判断模型是在记忆数据还是在学习泛化能力。3.2 机械臂本体与传感器选型做VLA Demo不一定非要非常昂贵的工业设备。常见配置是一台六轴或七轴协作机械臂、一个腕部RGB-D相机、一台带RTX GPU的工作站再配一个夹爪。六维力/力矩传感器是在热词里出现率比较高的传感器这里单独说一下。它跟普通视觉传感器最大的区别是能感知力的大小和方向模型在做插拔、装配、打磨这类接触任务时单靠图像判断“插没插到底”是不靠谱的但力觉信息能给出非常明确的反馈。如果项目里要用VLA做精细操作强烈建议在末端加上六维力/力矩传感器即使模型本身不能直接消费力信号也可以用它在底层控制做力位混合保护。机械臂选型方面像幻尔这类偏教育和入门级的机械臂胜在便宜、驱动接口开放、容易上手适合验证VLA流程工业级机械臂在精度和重复性上有优势但厂家SDK往往封闭需要额外写适配层。用教育级机械臂做模型验证时还要注意它的关节电机响应速度如果电机响应跟不上模型输出的动作频率VLA的精度再好也体现不出来。这里有一个所有VLA项目都避不开的步骤手眼标定。相机装在机械臂腕部叫眼在手上装在旁边固定位置叫眼在手外。不管哪种方式相机坐标系到机械臂基座的变换矩阵必须标定准。模型输出动作如果是相机坐标系下的目标标定误差会直接吃动作精度。很多VLA项目第一周没跑通最后发现不是模型问题是标定矩阵歪了几毫米。3.3 本地部署VLA的算力方案VLA本质上是多模态大模型对算力的要求跟通用LLM一致。这里直接给几个经验值。一个7B参数模型FP16权重大约占14GB显存再加上输入图像经过视觉编码器之后的特征缓存和KV cache推理一张图至少要16到20GB显存。想做微调单卡24GB勉强能用LoRA做低秩适配完整全参数微调基本要2到4张A100/H100这种级别。部署层面常见做法是用vLLM这类推理服务框架提供OpenAI风格接口把VLA包装成一个“输入图像文本输出动作序列”的服务。也可以直接用Ollama这类工具先跑通大模型的调用链路再替换成VLA模型格式。模型量化几乎是必走的一步用AWQ或GPTQ做4bit量化后7B模型显存占用能从14GB降到5GB左右推理速度也会更快。代价是动作输出精度可能略有下降如果做精密操作要仔细评估。显卡选择上消费级RTX 4090/4080 24GB显卡跑7B VLA推理足够但要注意功耗和散热。有条件上企业级卡再考虑更大的模型。显存不足时优先改成小分辨率输入、减少图像token数量效果比暴力降精度好。接口设计上我推荐把模型服务化之后用异步消息来接机械臂控制循环。比如机器人控制模块每100毫秒向模型服务请求一次动作模型服务返回未来0.3秒的轨迹增量控制模块再在本地插值执行。这样即使模型偶尔卡顿控制器也不会立刻停摆。4. 从推理到微调跑通一个最小流程再说4.1 加载模型做一次动作预测我不在这里贴某个仓库的死代码因为VLA模型的开源实现变化很快但整体推理流程是固定的。伪代码如下具体API以你使用的模型库为准。import torch from transformers import AutoProcessor, AutoModelForVision2Seq model_id your-vla-model-path processor AutoProcessor.from_pretrained(model_id, trust_remote_codeTrue) model AutoModelForVision2Seq.from_pretrained(model_id, trust_remote_codeTrue).cuda() rgb load_image(camera_frame.jpg) # 读取当前相机画面 instruction 把红色杯子放到蓝色托盘里 # 自然语言指令 joint_state get_current_joint_positions() # 关节状态按具体模型格式组装 inputs processor( textinstruction, imagesrgb, proprioceptive_statejoint_state, return_tensorspt, ).to(cuda) outputs model.generate( **inputs, max_new_tokens64, do_sampleFalse ) action processor.postprocess_action_tokens(outputs) execute(action) # 把动作下发到机器人控制器这个流程里最容易出问题的是proprioceptive_state的格式。不同模型对本体状态的编码方式不同有的直接放关节角度有的放末端位姿有的归一化到[0,1]。第一次跑通前建议先打印模型输入预处理后的shape对照模型的README文档检查一遍不要直接拿机器人实跑。模型第一次生成的动作不要直接下发给机器人先做一次仿真环境或纯数值检查确认输出在关节限位范围内再小步幅执行。安全第一数据没清洗干净时动作乱飞是常态。4.2 用自有数据做LoRA微调如果开源VLA在自有场景效果不好第一个反应不应该是换更大的模型而是先做LoRA微调。LoRA冻结原始权重只训练低秩矩阵显存占用小单卡基本都能跑。步骤大概是采集自有场景数据用遥操作或人工示教录轨迹保存图像、指令、动作标签。数据清洗筛掉重复帧、修正时间戳、统一图像尺寸。格式化训练集转成模型要求的格式比如JSONL或TFRecord。加载基础模型和LoRA配置设置目标模块开始训练。验证与部署在验证集上对比微调前后的动作误差确认提升后再合并权重部署。很多朋友会直接拿LLaMA-Factory或者HuggingFace的PEFT库去改这类工具确实能用来做通用LLM微调但VLA多了一个视觉编码器和动作头配置时要注意别把视觉分支的权重也冻结了。多数时候动作头和视觉编码器至少有一个需要解冻否则训练半天只会更新语言层对动作精度提升有限。我个人的项目经验是LoRA的秩选16到32比较合适太低拟合不动太高又很容易把数据遗忘掉。学习率比通用LLM微调要保守一般从2e-5往下调先跑几百步看损失曲线再决定要不要继续降。微调完成后还要做一次“回归测试”。用之前能成功执行的任务再去跑一遍防止模型为了新任务丢掉原本会做的动作。这种回归测试在VLA项目里特别重要因为多任务能力是VLA的核心价值一旦遗忘就变回一个普通专用模型了。4.3 给完全没入门的朋友VLA学习路线如果你刚接触这类技术不知道怎么下手下面这套路线是实操性较强的先补大模型底子。把Transformer、Self-Attention、Prompt理解清楚最好自己写一个极小的LLM训练流程或者用Ollama跑一次本地模型部署。再补多模态基础。看图文模型、多模态大模型的基本结构搞清楚视觉编码器和语言模型是怎么对接的。直接对着VLA论文精读。优先读RT-2、OpenVLA这两篇把模型结构图和动作Token的设计读透比看十篇综述有用。动手部署一次模型。按照开源仓库步骤把VLA模型跑起来输入一张机械臂场景图看它输出什么动作。如果手边有机械臂就自己采集数据用LoRA微调一个专属策略。不要一上来就学机器人控制里的底层算法那部分可以被控制器封装。VLA的核心竞争力在大模型这个侧面上。5. 常见问题和排雷清单5.1 数据集相关的坑现象可能原因排查与解法训练损失下降但实机一塌糊涂训练集和真实场景分布差异太大检查相机位置、光照、背景是否一致模型对指令不敏感指令太单一句式过拟合扩充同义指令加入否定句和复杂指令动作抖动严重时间戳对齐错误图像帧和动作记录错位抽查对齐后的序列重新插值重复执行同一动作多次失败数据里没有负样本在轨迹中加入纠错和尝试过程数据清洗是体力活也是技术活。最常见的是图像帧和动作帧时间戳没对齐导致同一张画面被记成了两个完全不同的动作模型在这种数据上会学到“随机乱动”。另外一个容易踩的坑是很多人录数据时习惯让机械臂跑得很慢保证轨迹平滑。但部署时又希望机械臂快点动作这会导致训练和部署的速度不匹配。模型输出的轨迹是基于慢速示教学的一旦控制频率和速度变了动作序列就扭曲了。最好在数据采集时就用接近实际部署的速度录。5.2 模型结构和部署相关的坑现象可能原因排查与解法动作输出超出关节限位输出后处理没有做剪裁加限位裁剪和碰撞检测推理太慢无法实时控制模型太大或图像token太多缩小输入分辨率、量化模型、批量推理微调后语言能力下降数据混合比例不合理训练时混入纯文本数据图像边缘识别不准相机畸变未校正标定畸变参数先校正再输入模型手眼标定后精度仍然差标定板角点检测或外参优化失败换高质量标定板保留多角度标定数据这里想重点强调一下推理速度问题。VLA是自回归生成动作token如果模型输出64个动作token每个token都要过一遍Transformer累计延迟可能接近1秒。这个速度想做在线闭环控制基本不可能。我的处理方法是让VLA生成一个短轨迹片段比如未来0.3秒的动作序列再由底层控制器按轨迹执行中间不再调用模型。这样既保留了模型的智能又避开了实时性问题。5.3 项目落地时容易被忽视的三个风险第一不要迷信单个指标的提升。VLA项目最喜欢刷“动作成功率”但成功率在实验室桌面上达到95%不代表现场就能用。真正要看的还有任务完成时间、失败后的恢复能力、对位置扰动的鲁棒性。第二版本管理要做细。模型、数据集、标定参数、代码仓库几者必须绑定版本。经常有人模型换了一个版本数据没动结果怎么调都复现不了最后发现是视觉预处理代码升级了。第三留一条人工遥控的底路。任何时候都要保证系统可以通过人工示教恢复不要把所有控制权都交给大模型。这不光是安全问题也是排查问题时最基本的手段到底是模型判断错了还是底层控制执行错了。最后再分享一个小技巧。如果你在做个项目第一版VLA尽量不要追求一步到位做全场景端到端。先固定一个狭窄场景比如“固定相机、固定桌面、单一夹爪”跑通数据采集、训练、部署、执行全链路再逐步放开自由度。全链路跑通的信心比任何论文精读都重要。等这条链路稳定了你自然会理解VLA的设计为什么是现在这个样子也知道下一步该往哪个方向调。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →