# iUMI Inference · 双臂UMI推理与部署
[English](README.md) · **简体中文**
Crobotia iUMI的模型推理与机器人部署代码,支持OpenPI(π0.5)和FLUX后端,包含配置模板、启动脚本及双臂名义URDF。
## 模型演示与 sample rollouts
本仓库提供 OpenPI π0.5 和 FLUX 的叠衣推理权重、部署源码、两段演示视频,以及每个后端各 1 条机器人执行样例。任务为 `fold_the_clothes`,硬件为 Flexiv Rizon 4 双臂与左右 ego 相机。
| 后端 | 演示视频(静音剪辑) | 完整 rollout | 帧数 / 30 Hz | 完整记录时长 |
| --- | --- | --- | ---: | ---: |
| OpenPI π0.5 | [4分15.4秒](demos/openpi_fold_demo.mp4) | [openpi_pi05](rollout_data/openpi_pi05) | 6,540 | 218 秒 |
| FLUX | [4分29.7秒](demos/flux_fold_demo.mp4) | [flux](rollout_data/flux) | 30,619 | 1,020.633 秒 |
**OpenPI π0.5**
**FLUX**
视频用于快速浏览,剪辑时间轴不与 rollout 逐帧对应。两条 rollout 合计 37,159 帧、约 20分38.6秒,保留左右两路 960×960 / 30 Hz AV1 视频、16 维状态/动作、关节数据、双侧 IMU、标定和机器人 H5;不包含音频或 rear 相机。
只下载视频和 rollout,无需下载约 21.37 GB 的模型文件:
```bash
pip install -U huggingface_hub
hf download Crobotia/iUMI_Inference --local-dir iUMI_Inference --include "demos/*" "rollout_data/*"
```
媒体与 rollout 合计约 2.35 GB。分别以 `rollout_data/openpi_pi05/` 和 `rollout_data/flux/` 为独立 LeRobot v3 数据集根目录;两者都从 episode 0 开始。见 [rollout 读取说明](rollout_data/README.md) 和 [视频说明](demos/README.md)。这些文件存放在本模型仓库中,下载时使用默认 `repo_type="model"`。
## 模型用途与数据约定
两种后端用于双臂 UMI 衣物折叠的研究、离线接口集成和匹配设备上的部署验证。每次推理使用左右腕部图像、前一/当前位姿和任务文本,输出动作块,再由配套适配器完成坐标还原。
| 项目 | 约定 |
| --- | --- |
| 记录的状态 / 动作 | 16 维,左手在前;每手 `[x, y, z, qw, qx, qy, qz, gripper]`;米 / `wxyz` / 夹爪角度 |
| rollout 动作语义 | `action_mode=next_state`,`action[t] = observation.state[t+1]`(末帧除外),不是原始策略输出 |
| 模型内部 UMI 表示 | 两手合计 20 维;每手相对平移 3 + 旋转前两列 6 + 夹爪 1 |
| FLUX 动作块 | 32 步 / 30 Hz,使用双腕图像 |
| π0.5 动作块 | 50 个模型步;32 维模型头由 20 维 UMI 目标补齐,适配器还原为双臂目标位姿 |
记录位姿来源为 `robot_fk_cad`。相机光学坐标、机器人法兰坐标和模型相对表示需要显式转换,见 [输入输出与坐标约定](docs/INFERENCE_CONTRACT.md)。
## 训练来源、验证与局限
发布的 FLUX 为 step 14418 的 BF16 推理导出;π0.5 为 `pi05_umi_v3` 的 epoch 2 checkpoint。完整训练语料清单、划分和精确运行配置未随本次新增材料提供;这两条 rollout 是机器人执行样例,不能据此反推训练集。
本次新增材料通过文件哈希、视频流/包计数、Parquet 索引与下一帧动作关系、IMU 和 H5 结构检查,详见 [rollout 验证](docs/ROLLOUT_VALIDATION.md)。每个模型只有 1 条样例,未建立评测协议或任务成功率,也未运行完整运动质检。演示记录的确切 checkpoint 哈希、采样配置和剪辑到数据的逐帧映射未随材料提供,因此不能把当前启动脚本默认值视为视频的精确复现配方。
现有权重与源码的验证记录仍见 [验证范围](docs/VALIDATION.md);此次上传没有重新运行 GPU 推理或机器人。实机部署需要匹配的编码器、厂商 SDK、设备标定、工作空间限制与现场验证。
## 获取代码
```bash
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Crobotia/iUMI_Inference
cd iUMI_Inference
```
| 目录 | 内容 |
| --- | --- |
| flexiv-umi-infer/ | 策略服务、机器人/相机/夹爪接口及数据记录 |
| flux-umi/ | FLUX模型与UMI数据表示 |
| openpi-umi/ | OpenPI模型、数据变换与客户端 |
| scripts/ | 模型服务和机器人端启动脚本 |
| configs/ | 推理配置模板 |
| checkpoints/ | FLUX BF16 和 π0.5 叠衣推理权重 |
| demos/ | 两段静音叠衣演示视频 |
| rollout_data/ | OpenPI π0.5 / FLUX 各 1 条完整执行记录 |
OpenPI使用Linux(glibc ≥2.31);按`openpi-umi/.python-version`配置Python3.12,在该目录运行`uv sync --frozen --python 3.12`。
FLUX使用`scripts/run_flux_server.sh`,OpenPI使用`scripts/run_pi05_server.sh`,机器人端使用`scripts/run_robot.sh`。两类模型使用独立环境,按各子项目说明安装依赖。启动前配置模型资源路径及设备标定;机器人脚本默认为dry run。
运行前准备所需编码器、厂商SDK及设备标定。输入输出约定见`docs/INFERENCE_CONTRACT.md`,安装与设备配置见各子项目README。
## 服务部署关系
```mermaid
flowchart LR
Robot["Flexiv 主机:robot_agent / 相机 / 本地伺服"] <-->|"WebSocket Observation / Action"| Server["GPU 主机:UMI policy_server"]
Server --> Flux["FLUX 后端:flux-umi + FLUX checkpoint"]
Server --> Pi["π0.5 后端:openpi-umi + OpenPI checkpoint"]
```
每个服务进程选择一个后端。`run_flux_server.sh` 和 `run_pi05_server.sh` 都启动 `umi_infer.policy_server`,分别调用对应的模型加载器;UMI 服务包装层位于 `flexiv-umi-infer/`。机器人端只运行 `robot_agent`,通过接口请求推理,不加载权重。模型输入编码、归一化和动作坐标还原在服务包装层执行;伺服执行在 Flexiv 主机上进行。
跨机器部署时,GPU 主机设置 `SERVER_HOST=0.0.0.0`、`SERVER_PORT=8765`;Flexiv 主机设置 `SERVER_URI=ws://:8765`,再运行 `bash scripts/run_robot.sh`。同时部署两种模型时使用不同端口。设备标定路径 `UMI_INFER_DATA` 应在对应主机可访问;机器人脚本默认为 dry run。
请使用这套匹配的服务/客户端。OpenPI 原生 WebSocket 服务有不同的握手和数据封装,不能直接连接此 `robot_agent`。
## 下载权重与启动
两份权重已放在本仓库的 `checkpoints/` 下,共约 21.37 GB。在仓库根目录下载(需要 Hugging Face CLI):
```bash
pip install -U huggingface_hub
hf download Crobotia/iUMI_Inference --local-dir . --include "checkpoints/*"
```
| 后端 | 启动脚本默认权重目录 | 模型文件大小 |
| --- | --- | --- |
| FLUX | `checkpoints/flux_fold_clothes_bf16/` | 13,894,466,592 B |
| π0.5 | `checkpoints/pi05_fold_clothes/epoch_2/` | 7,473,091,464 B |
启动脚本自动使用上述目录;也可用 `FLUX_EXPORT_DIR` 或 `PI05_CHECKPOINT_DIR` 指定其他位置。按后端安装依赖后,复制配置并填写资源、Python 环境和设备标定路径:
```bash
cp configs/inference.env.example .env
# 编辑 .env:FLUX_RESOURCES、TOKENIZER_DIR、UMI_INFER_DATA 及 Python 路径
set -a
source .env
set +a
bash scripts/run_flux_server.sh
# 或在 π0.5 环境中运行:bash scripts/run_pi05_server.sh
```
FLUX 仍需单独准备 `FLUX_RESOURCES/video_vae.safetensors` 和 `FLUX_RESOURCES/text_encoder/`;π0.5 仍需 `TOKENIZER_DIR/paligemma-3b-pt-224/tokenizer.model`。这些外部资源未包含在此次权重发布中。归一化参数随权重提供,启动时自动加载对应文件。
FLUX 导出未保存采样参数。当前脚本使用 Euler、4 步、shift 42、video/action guidance 1.0;这是可覆盖的脚本默认值,尚未验证叠衣效果。π0.5 默认 10 步去噪,`VLA_QUAT_PERM=0` 对应该权重的 `xyz_quat_wxyz` 配置。
权重已完成下载校验、文件结构及脱敏检查;CPU 检查不代表 GPU 推理或实机叠衣验证。详情见 [FLUX 权重说明](docs/CHECKPOINTS_FLUX.md)、[π0.5 权重说明](docs/CHECKPOINTS_PI05.md) 和 [验证范围](docs/VALIDATION.md)。
## 许可证
源码采用Apache-2.0许可,各子项目保留原有声明;Gemma、模型资源及厂商SDK遵循各自条款。详见[LICENSES.md](LICENSES.md)。
新增 demo 与 rollout 未附独立的媒体/数据许可声明;根目录 Apache-2.0 标签用于源码,不自动授予这些媒体、数据或模型资源的相同许可。使用或再分发前请向 Crobotia 确认适用条款;不将其他人工演示数据集的 CC BY-SA 声明套用于本次材料。