微软研究院×清华大学:靠“潜在动作建模”领跑机器人操作!平均成功率达 90.1%

深蓝具身智能 2025-08-07 10:56

资讯配图


当前 ViLLA 模型虽试图通过潜在动作连接视觉、语言与机器人操作,却卡在了关键瓶颈:

让抽象动作扎根于物理规律!

为此,微软研究院、清华大学等机构新提出的 villa-X 框架,目的是改进机器人操作的潜在动作建模,先用本体感觉模型从人类视频里 “破译” 动作背后的物理逻辑(比如拿东西时关节发力的轻重规律);再用联合扩散模型,把文字指令拆解成一步步可执行的 “动作积木”,让潜在动作与实际操作指令精准绑定。

我们开设此账号,想要向各位对【具身智能】感兴趣的人传递最前沿最权威的知识讯息外,也想和大家一起见证它到底是泡沫还是又一场热浪?
欢迎关注【深蓝具身智能】👇

资讯配图

方法介绍

villa-X 的核心设计围绕潜在动作建模与动作整合机制展开,通过两个核心组件:Latent Action Model(LAM)和 Actor Module(ACT)实现机器人操作策略的学习,并分为三个训练阶段逐步优化

资讯配图

说明:(a)villa-X架构图,(b)LAM的结构组成©️【深蓝具身智能】编译

资讯配图

说明:ACT的结构组成©️【深蓝具身智能】编译

核心组件设计

(1) 潜在动作模型(LAM)

LAM的核心功能是从连续观测帧中提取潜在动作,并确保与机器人物理行为对齐。其设计亮点包括:

  • 逆动力学模型 (IDM): 通过时空 Transformer 编码输入的帧序列 (长度为 ), 经量化后生成  个潜在动作 , 用于捕捉帧间运动语义信息。

  • 增强的动力学监督: 引入两个辅助解码器:

① 视觉前向动力学模型 (FDM): 基于当前帧  和潜在动作  预测未来帧 , 确保潜在动作捕捉到视觉变化;

② 本体感知前向动力学模型 (proprio FDM): 以当前机器人状态  和潜在动作  为输入, 预测未来  步的机器人本体感知状态和动作, 并通过上下文嵌入分离机器人特异性特征, 增强跨机器人泛化能力。

逆动力学IDM的代码部分:

class IgorEncoder(IgorPretrainedModel):    def __init__(self,     config: IgorConfig) -> None:        ...        # Spatial–Temporal Transformer,用于IDM捕捉帧间运动语义信息        self.pe_spatial = nn.Parameter(            torch.from_numpy(                get_2D_position_embeddings(config.encoder_embed_dim, config.grid_size)            )            .float()            .unsqueeze(0),            requires_grad=False,        )        self.pe_temporal = nn.Parameter(            torch.from_numpy(                get_1D_position_embeddings(config.encoder_embed_dim, config.d_t)            )            .float()            .unsqueeze(0),            requires_grad=False,        )    ...    @torch.inference_mode()    def idm(        self,        clips: torch.Tensor | list[torch.Tensor],        mask: torch.Tensor | None = None,        padding_side: str = "left",    ):        ...        # 前面是对输入tensor做预处理的工作,这里省略        # 这里对图像做一些增广处理        clips = self.preprocess(clips, augment_type="no")        ...        # 预测d_t帧latent actions        for i in range(t - self.config.d_t + 1):            clips_ = clips[:, i : i + self.config.d_t]  # [B d_t C H W]            mask_ = mask[:, i : i + self.config.d_t]  # [B d_t]            action = self.forward(clips_, mask_.sum(dim=1).tolist())            if i == 0:                actions = torch.split(                    action,                    split_size_or_sections=(mask_.sum(dim=1) - 1).tolist(),                    dim=0,                )  # list of [T 1 nd]            else:                new_actions = torch.split(                    action,                    split_size_or_sections=(mask_.sum(dim=1) - 1).tolist(),                    dim=0,                )  # list of [T 1 nd]                new_action = [xi[-1].unsqueeze(0for xi in new_actions]  # [1 1 nd]                actions = [                    torch.cat([x, y], dim=0for x, y in zip(actions, new_action)                ]  # [T+1 1 nd]        return actions

上述代码通过输入视频流,提取视频中的潜在动作。以下为使用 IDM 的示例:

from lam import IgorModel def read_video(fp: str):    from torchvision.io import read_video     video, *_ = read_video(fp, pts_unit="sec")    return video lam = IgorModel.from_pretrained("LOCAL_MODEL_DIRECTORY").cuda()video = read_video("path/to/video.mp4").cuda()  # Load your video herelatent_action = lam.idm(video)

视觉前向动力学模型FDM的代码部分:

class IgorDecoder(IgorPretrainedModel):    @torch.inference_mode()    def apply_latent_action(self, images: torch.Tensor, la: torch.Tensor):        single_image = False        if len(images.shape) == 3 or (len(images.shape) == 4 and images.shape[0] == 1):            single_image = True        if len(images.shape) == 3:            images = images.unsqueeze(0)            la = la.unsqueeze(0)        images = self.preprocess(images, augment_type="no")        x = self.fdm(la, images=images)        x = self.patch2image(x)        if single_image:            return x.squeeze(0)        return x     def fdm(        self,        la: torch.Tensor,        images: torch.Tensor | None = None,        embeddings: torch.Tensor | None = None,    ):        # images: [B C H W], la: [B 1 nd]        if embeddings is None:            x = self.embed(images)  # [B N D]        else:            x = embeddings         x = x + self.pe  # [B N D]        x = torch.cat([self.action_embed(la), x], dim=1)  # [B N + 1 D]        for layer in self.layers:            x = layer(kv=x, q=x)        x = self.norm(x)        x = x[:, 1:]  # [B N D]        output = self.pred_head(x)  # [B N D]        return output上述代码基于当前帧

上述代码基于当前帧潜在动作预测未来帧,确保潜在动作捕捉到视觉变化。以下为使用 FDM 的示例:

frames = []for i in range(len(latent_action[0])):    pred = lam.apply_latent_action(video[i], latent_action[0][i])    frames.append(pred)
(2) Actor模块(ACT)

ACT基于VLM模型将潜在动作作为中阶桥梁,连接视觉-语言提示与低级别机器人动作。设计包括3个组件:

ACT模块代码(暂未开源,思路供参考)

① 先导入一些三方库

import torchimport torch.nn as nnimport torch.optim as optimfrom torch.utils.data import DataLoader from transformers import AutoModelForVision2Seq # 参考PaliGemmafrom diffusion import GaussianDiffusion  # 参考Transfusion扩散实现from flow_matching import FlowMatchingLoss  # 参考Flow Matching论文import numpy as npfrom typing import Dict # 参考代码库:# HPT: https://github.com/liruiw/HPT (模态Token处理)# Transfusion: https://github.com/lucidrains/transfusion-pytorch (扩散Transformer)# Moto: https://github.com/TencentARC/Moto (注意力掩码)# PaliGemma: https://github.com/google-research/big_vision (V

② 定义ACT模块类,包含VLM特征提取、ACT-latent(潜在动作生成)、ACT-robot(机器人动作生成)3个部分,并给出推理代码。

class ActorModule(nn.Module):    def __init__(self, latent_dim=128, action_dim=8, vision_dim=768, lang_dim=768):        super().__init__()        # 1. VLM特征提取 (PaliGemma)        self.vlm = AutoModelForVision2Seq.from_pretrained("google/paligemma-3b-vision-text")        self.vision_proj = nn.Linear(vision_dim, latent_dim)  # 视觉特征投影        self.lang_proj = nn.Linear(lang_dim, latent_dim)       # 语言特征投影         # 2. ACT-latent (潜在动作扩散模型)        self.act_latent = GaussianDiffusion(            model=TransfusionTransformer(  # 参考Transfusion的扩散Transformer                dim=latent_dim,                depth=6,                heads=8,                input_dim=latent_dim + vision_dim + lang_dim  # 融合特征            ),            loss_type="flow_matching"  # 流匹配损失        )         # 3. ACT-robot (机器人动作扩散模型)        self.act_robot = GaussianDiffusion(            model=TransfusionTransformer(                dim=action_dim,                depth=6,                heads=8,                input_dim=latent_dim + vision_dim + lang_dim  # 含潜在动作特征            ),            loss_type="flow_matching"        )         # 4. 本体感觉上下文嵌入 (适配不同机器人)        self.embodiment_emb = nn.Embedding(num_embeddings=10, embedding_dim=latent_dim)  # 机器人类型嵌入     def forward(self, vision_inputs, lang_inputs, proprio, embodiment_id, actions=None):        # 1. VLM特征提取        vlm_output = self.vlm(            pixel_values=vision_inputs.pixel_values,            input_ids=lang_inputs.input_ids,            return_dict=True        )        vision_feat = self.vision_proj(vlm_output.vision_outputs.last_hidden_state.mean(dim=1))        lang_feat = self.lang_proj(vlm_output.language_outputs.last_hidden_state.mean(dim=1))         # 2. 融合特征 (视觉+语言+本体感觉嵌入)        emb = self.embodiment_emb(embodiment_id)  # 机器人结构嵌入        fused_feat = torch.cat([vision_feat, lang_feat, emb], dim=-1)         # 3. ACT-latent生成潜在动作序列        latent_actions = self.act_latent(fused_feat, cond=fused_feat, labels=actions)         # 4. ACT-robot生成机器人动作        robot_actions = self.act_robot(            torch.cat([latent_actions, fused_feat], dim=-1),            cond=fused_feat,            labels=actions        )        return latent_actions, robot_actions

训练流程

villa-X的训练分为三个阶段:

(1) 预训练LAM:在机器人轨迹和人类视频数据上训练IDM、FDM和proprio FDM,学习通用潜在动作表示;

(2) 预训练ACT:联合训练VLM、ACT-latent和ACT-robot,优化潜在动作生成与机器人动作预测损失;

(3) 微调ACT:针对目标机器人平台,初始化新的上下文嵌入,并在目标数据上进行微调,以适配具体硬件特性。

资讯配图

说明:villa-X由LAM和ACT两部分结构组成©️【深蓝具身智能】编译

训练微调代码

分预训练和微调2个阶段阶段,预训练共享trunk,微调适配新机器人。

def train_actor(module: ActorModule, dataloader: DataLoader, is_pretrain=True):    optimizer = optim.AdamW(        module.parameters(),        lr=3e-4,        weight_decay=0.05,        betas=(0.90.95)    )    scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=10000)    loss_fn = FlowMatchingLoss()  # 流匹配损失函数     module.train()    for epoch in range(100):        total_loss = 0.0        for batch in dataloader:            # 输入解析            vision = batch["vision"]            lang = batch["lang"]            proprio = batch["proprio"]            actions = batch["actions"]            embodiment_id = torch.zeros(len(batch), dtype=torch.long)  # 机器人ID             # 前向传播            latent_actions, robot_actions = module(                vision, lang, proprio, embodiment_id, actions            )             # 损失计算 (联合潜在动作和机器人动作损失)            loss_latent = loss_fn(latent_actions, actions)            loss_robot = loss_fn(robot_actions, actions)            loss = loss_latent + loss_robot  # 联合损失             # 反向传播            optimizer.zero_grad()            loss.backward()            optimizer.step()            scheduler.step()             total_loss += loss.item()        print(f"Epoch {epoch}, Loss: {total_loss/len(dataloader):.4f}")     # 预训练后冻结trunk,微调仅更新stem和head    if not is_pretrain:        for param in module.vlm.parameters():            param.requires_grad = False
资讯配图

实验

实验设计从以下4个疑问出发进行验证说明:

(1) 改进的LAM模型是否学习了更高质量的潜在动作?

(2) ACT-latent能否成功预测未来的动作?

(3) ACT-latent能否有效利用预训练的潜在动作?

(4) 在模拟基准测试和真实机器人任务中,villa-X与现有VLA基线相比表现如何?


验证改进的LAM模型质量

(2)在探测实验中带本体感知前向动力学模型(proprio FDM)的LAM变体(w/pp)在LIBERO数据集上预测机器人动作时,低误差样本数量显著多于不带proprio FDM 的变体(wo/pp),最大L1误差更小。

资讯配图

说明:探测实验结果,在不同误差threshold下,w/pp减wo/pp的误差样本数量差值©️【深蓝具身智能】编译

(2)在决策预训练对比中w/pp变体在SIMPLER环境的8项任务中性能显著优于wo/pp,并且没有LAM的基线(wo/LAM)表现最差。

资讯配图

说明:不同villa-X变体(上半部分)以及整合潜在动作的其他方法(下半部分)在SIMPLER上的评估结果©️【深蓝具身智能】编译

ACT-latent的未来动作规划能力验证

基于初始图像和语言指令,ACT-latent生成的潜在动作序列经世界模型渲染后,在分布内任务(如“移动银锅到左炉”、“打开抽屉”)和分布外任务(如“触摸表情符号”、“拾取新物体”)中均能准确识别目标并生成符合指令的动作。

注:分发内是指样本来自训练数据的验证集,而分布外是指样本来自Realman机械臂,这是训练中从未见过的新实施例。

资讯配图

说明:分布内和分布外数据,可以跳转到项目地址中查看完整功能:点击图片中的数字展示模型规划效果©️【深蓝具身智能】编译

ACT-latent对预训练潜在动作的利用有效性验证

在SIMPLER环境中,villa-X通过联合扩散和注意力机制实现潜在动作到机器人动作的显式传递,性能显著优于LAPA(两阶段预训练)和GO-1(自回归潜在规划)

资讯配图

模拟与真实环境中的综合性能评估

(1)模拟环境:

在SIMPLER中,villa-X在Google机器人(平均59.6%)和 WidowX机器人(平均62.5%)上优于RT-1-X、OpenVLA等VLA模型以及 GR00T等潜在动作方法;

在LIBERO的4个任务套件中平均成功率90.1%,显著优于Diffusion Policy等基线。

资讯配图

说明:villa-X与现有方法在SIMPLER上的对比结果。标有∗的方法是在预训练后直接进行评估的,而其他方法则是在对应数据集上进行后训练(微调)后再评估的©️【深蓝具身智能】编译

资讯配图

说明:villa-X与现有方法在LIBERO四个任务套件上的评估结果©️【深蓝具身智能】编译

(2)真实世界:

在Realman机械臂任务中,villa-X在Pick-out、Unstack等任务成功率达100%,对场景变化的泛化(改变积木颜色/桌布)表现更优;

在Xarm灵巧手任务中,对seen和unseen的场景成功率均高于GR-1和GR00T。

资讯配图

说明:villa-X与现有方法在Xarm上的评估结果©️【深蓝具身智能】编译

资讯配图

说明:villa-X与现有方法在Realman上的评估结果©️【深蓝具身智能】编译

资讯配图

总结

villa-X是一种新型的视觉-语言-潜在动作(ViLLA)框架,其目的是改进VLA模型中的潜在动作建模,提升机器人操作的泛化能力和性能。

为解决现有方法中潜在动作不符合机器人物理动力学基础以及潜在动作向机器人动作信息传递效率不足的问题villa-X提出了两项关键改进:

一是在潜在动作模型(LAM)中引入本体感感知前向动力学模型(proprio FDM),使潜在动作向机器人物理行为对齐;

二是通过联合扩散过程建模潜在动作与机器人动作分布,从而借助注意力机制实现更结构化的信息传递。

相较于现有的方案,villa-X能够获得更优的潜在动作、更强的未来动作规划能力、更有效的动作整合机制,在SIMPLER、LIBERO等模拟环境以及Realman机械臂、Xarm灵巧手等真实世界场景中均展现出更高的成功率和泛化能力,为通用机器人操作研究提供了强有力的基础框架。

编辑|木木伞

审编|具身君


Ref

论文题目:villa-X: Enhancing Latent Action Modeling in Vision-Language-Action Models

论文地址:https://arxiv.org/pdf/2507.23682

项目地址:https://microsoft.github.io/villa-x/


资讯配图【深蓝具身智能读者群】-参观机器人
欢迎各位粉丝朋友,加入深蓝具身君的读者群,具体参观开放日时间将在群内陆续通知。
扫下方二维码,添加具身君;通过验证后,加入群聊:
资讯配图

我们开设此账号,想要向各位对【具身智能】感兴趣的人传递最前沿最权威的知识讯息外,也想和大家一起见证它到底是泡沫还是又一场热浪?‍

欢迎关注【深蓝具身智能】👇

资讯配图
1、VLA模型的「核心引擎」:盘点5类核心动作Token,如何驱动机器人精准操作?
2、模仿学习再迎新突破!清华大学×地平线:第一人称视角“破局”,机器人操作成功率提高 40.5%
3、突破传统 RL 局限!首个新型强化学习框架:靠隐式反馈革新「人机协作」
资讯配图

【深蓝具身智能】的原创内容均由作者团队倾注个人心血制作而成,希望各位遵守原创规则珍惜作者们的劳动成果,转载添加下方微信进行授权,发文时务必注明出自【深蓝具身智能】微信公众号,否则侵权必究⚠️⚠️


投稿|寻求合作|研究工作推荐:SL13126828869


资讯配图

点击收藏并推荐本文

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
功率 机器人
more
2025年半导体功率器件行业技术特点及发展趋势
电驱动产业解读:53家供应商在华布局+电机电控功率器件关键数据一览
MeanFlow再下一城,北大提出机器人学习新范式MP1,实现速度与成功率双SOTA
芯联集成:上半年营收34.95亿元,车规功率模块收入增长200%
国家定调!直流充电桩占比飙升,大功率赛道全面爆发
模仿学习再迎新突破!清华大学×地平线:第一人称视角“破局”,机器人操作成功率提高 40.5%
42.5 亿元,华润微封测、斯达半导功率模块等8大项目集中签约!
ERMV框架:针对操作任务的数据增强,显著提升VLA模型跨场景成功率
英飞凌推出采用Q-DPAK 封装的CoolSiC™ MOSFET 1200V G2,将工业应用功率密度提升至新高度
拟4亿元,功率器件又一收购!
Copyright © 2025 成都科技区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号