深入理解Xiaomi-Robotics-0-LIBERO的动作生成机制:从输入编码到控制命令的全流程
深入理解Xiaomi-Robotics-0-LIBERO的动作生成机制:从输入编码到控制命令的全流程
【免费下载链接】Xiaomi-Robotics-0-LIBERO项目地址: https://ai.gitcode.com/hf_mirrors/XiaomiRobotics/Xiaomi-Robotics-0-LIBERO
Xiaomi-Robotics-0-LIBERO是小米机器人技术团队开发的开源项目,专注于机器人动作生成与控制。本文将详细解析其核心动作生成机制,从输入编码到控制命令输出的完整流程,帮助新手开发者快速掌握项目核心技术。
动作生成系统架构概览
Xiaomi-Robotics-0-LIBERO采用模块化设计,主要由视觉语言模型(VLM)和动作生成模块(DiT)两部分组成。系统架构如图所示:
输入数据 → 视觉语言编码器 → 状态与动作投影 → DiT解码器 → 动作输出核心实现位于modeling_mibot.py文件中,其中MiBoTForActionGeneration类整合了完整的动作生成流程。
关键组件介绍
- Qwen3VL视觉语言模型:负责处理多模态输入(图像/视频+文本指令)
- DiT解码器:基于扩散模型的动作生成核心
- 状态/动作投影器:实现状态与动作空间的维度转换
- 时间嵌入模块:为扩散过程提供时间步信息
输入编码:多模态信息处理
系统支持图像、视频和文本指令等多种输入形式,通过统一的编码流程转换为模型可处理的特征向量。
视觉输入处理
图像和视频输入通过Qwen3VLVisionModel类进行处理:
- 图像分块嵌入:使用
Qwen3VLVisionPatchEmbed将图像分割为固定大小的块并投影到特征空间 - 位置编码:通过
fast_pos_embed_interpolate方法生成空间位置信息 - 视觉注意力:
Qwen3VLVisionAttention模块提取图像特征
关键代码实现:
# 图像特征提取流程 hidden_states = self.patch_embed(hidden_states) # 分块嵌入 pos_embeds = self.fast_pos_embed_interpolate(grid_thw) # 位置编码 hidden_states = hidden_states + pos_embeds # 添加位置信息文本指令编码
文本指令通过Qwen3VLTextModel处理,采用Transformer架构:
- 词嵌入:
embed_tokens将文本转换为向量表示 - ** Rotary位置编码**:
Qwen3VLTextRotaryEmbedding处理序列位置信息 - 自注意力机制:
Qwen3VLTextAttention捕获文本上下文关系
状态与动作空间转换
机器人状态和动作需要经过投影处理以适应模型输入输出要求。
状态投影
环境状态通过MLPProjector转换为与模型隐藏层维度匹配的特征:
self.state_projector = MLPProjector( input_dim=config.state_dim, output_dim=config.dit_config.hidden_size, num_layers=2 )动作投影与输出
动作空间转换包括编码(输入到模型)和解码(模型输出到动作)两个过程:
# 动作输入投影 self.action_projector = MLPProjector( input_dim=config.action_dim, output_dim=config.dit_config.hidden_size, num_layers=2 ) # 动作输出解码 self.action_output_layer = MLPProjector( input_dim=config.dit_config.hidden_size, output_dim=config.action_dim, num_layers=2 )DiT动作生成核心
扩散模型(DiT)是动作生成的核心,通过逐步去噪过程生成平滑的机器人动作序列。
时间嵌入
扩散过程的时间步信息通过TimestepEmbedder编码:
class TimestepEmbedder(nn.Module): def forward(self, t): t_freq = self.timestep_embedding(t, self.frequency_embedding_size) t_emb = self.mlp(t_freq) return t_emb[:, None]解码器层结构
DecoderLayer整合了注意力和MLP模块,支持动作序列生成:
class DecoderLayer(nn.Module): def forward(self, hidden_states, past_key_values, position_embeds, t_embeds, attn_mask=None): # 注意力子层 residual = hidden_states hidden_states = self.input_layernorm(hidden_states) hidden_states = modulate(hidden_states, shift_msa, scale_msa) hidden_states = self.attn(hidden_states, past_key_values, position_embeds, attn_mask) hidden_states = residual + gate_msa * hidden_states # MLP子层 residual = hidden_states hidden_states = self.post_layernorm(hidden_states) hidden_states = modulate(hidden_states, shift_mlp, scale_mlp) hidden_states = self.mlp(hidden_states) hidden_states = residual + gate_mlp * hidden_states return hidden_states扩散过程实现
动作生成采用逐步去噪的扩散过程,从随机噪声开始迭代优化:
x = torch.randn_like(action_mask) # 初始随机噪声 dt = 1.0 / num_steps for step in range(num_steps): t = torch.ones((x.shape[0], 1, 1), device=x.device, dtype=x.dtype) * step / num_steps v = dit_forward_fn(x, t) # 预测噪声 x = x + v * dt # 更新动作完整动作生成流程
综合上述模块,完整的动作生成流程如下:
- 输入处理:多模态输入(图像/视频+文本)通过VLM编码
- 状态编码:机器人当前状态通过状态投影器转换
- 初始噪声:生成随机动作噪声作为扩散起点
- 迭代去噪:DiT模型逐步优化动作序列
- 动作输出:生成最终机器人控制命令
核心代码入口在MiBoTForActionGeneration类的forward方法:
@torch.no_grad() def forward(self, state, action_mask, num_steps=5,** kwargs): vlm_outputs = self.vlm(**kwargs, use_cache=True) # VLM编码 state_embed = self.state_projector(state) # 状态投影 # 扩散过程 x = torch.randn_like(action_mask) # 初始噪声 for step in range(num_steps): t = torch.ones((x.shape[0], 1, 1), device=x.device) * step / num_steps v = self.dit_forward(x, t, ...) # 噪声预测 x = x + v * (1.0/num_steps) # 迭代更新 return ActionGenerationOutput(actions=x)快速上手与实践
环境准备
首先克隆项目仓库:
git clone https://gitcode.com/hf_mirrors/XiaomiRobotics/Xiaomi-Robotics-0-LIBERO基本使用示例
动作生成的基本调用方式:
from modeling_mibot import MiBoTForActionGeneration import torch # 加载模型 model = MiBoTForActionGeneration.from_pretrained("./") # 准备输入 state = torch.randn(1, 10, 64) # 示例状态 action_mask = torch.ones(1, 20, 7) # 动作掩码 # 生成动作 outputs = model(state=state, action_mask=action_mask, num_steps=5) print("生成的动作序列:", outputs.actions.shape)总结与扩展
Xiaomi-Robotics-0-LIBERO通过视觉语言模型与扩散模型的结合,实现了从多模态指令到机器人动作的端到端生成。核心优势包括:
- 多模态理解:同时处理视觉和文本输入
- 平滑动作生成:扩散模型确保动作序列的连续性
- 灵活扩展:模块化设计支持不同机器人平台适配
未来可以通过以下方向进一步优化:
- 增加动作约束条件,提高安全性
- 优化扩散过程,减少计算量
- 增强环境交互反馈机制
通过本文的解析,相信您已经对Xiaomi-Robotics-0-LIBERO的动作生成机制有了全面了解。更多细节请参考项目源代码和技术文档。
【免费下载链接】Xiaomi-Robotics-0-LIBERO项目地址: https://ai.gitcode.com/hf_mirrors/XiaomiRobotics/Xiaomi-Robotics-0-LIBERO
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
