图像与设计
需要文本或运动学约束生成 3D 人体/Unitree G1…
在需要生成、约束、导出 3D 人体或人形机器人动作(含 G1 MuJoCo、SMPL-X/AMASS、ProtoMotions)时使用 Kimodo。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要文本或运动学约束生成 3D 人体/U特定
解决思路
- 克隆 Kimodo 仓库:`git clone https://github.com/nv-tlabs/kimodo.git`
- 进入目录:`cd kimodo`
- 用 pip 可编辑安装并生成 `kimodo_gen`、`kimodo_demo` CLI:`pip install -e .`
- 或用 Docker(推荐 Windows 或干净环境):`docker build -t kimodo .`,再 `docker run --gpus all -p 7860:7860 kimodo`
- 确认运行环境:约 17GB VRAM(RTX 3090/4090、A100 推荐),Linux;Windows 通过 Docker;模型首次使用从 Hugging Face 自动下载。
- 按用途选择模型:`Kimodo-SOMA-RP-v1`(SOMA 人体,Bones Rigplay 1 700h,通用人体动作)。
- 按用途选择模型:`Kimodo-G1-RP-v1`(Unitree G1 机器人,Bones Rigplay 1 700h,人形机器人动作)。
- 按用途选择模型:`Kimodo-SOMA-SEED-v1`(SOMA,BONES-SEED 288h,基准测试)。
- 按用途选择模型:`Kimodo-G1-SEED-v1`(Unitree G1,BONES-SEED 288h,基准测试)。
- 按用途选择模型:`Kimodo-SMPLX-RP-v1`(SMPL-X,Bones Rigplay 1 700h,重定向/AMASS 导出)。
- 基本文本到动作:`kimodo_gen "a person walks forward at a moderate pace"`
- 指定时长和样本数:`kimodo_gen "a person jogs in a circle" --duration 5.0 --num_samples 3`
- 用 G1 机器人模型生成:`kimodo_gen "a robot walks forward" --model Kimodo-G1-RP-v1 --duration 4.0`
- 用 SMPL-X 模型生成 AMASS 兼容导出:`kimodo_gen "a person waves their right hand" --model Kimodo-SMPLX-RP-v1`
- 设置随机种子以便复现:`kimodo_gen "a person sits down slowly" --seed 42`
- 控制扩散步数(更多步更慢但质量更高):`kimodo_gen "a person does a jumping jack" --diffusion_steps 50`
- 默认输出为 Web demo 兼容 NPZ:`kimodo_gen "a person walks" --output ./outputs/walk.npz`
- G1 机器人输出为 MuJoCo qpos CSV:`kimodo_gen "robot walks forward" --model Kimodo-G1-RP-v1 --output ./outputs/walk.csv`
- SMPL-X 输出 AMASS 兼容 NPZ(另写 `stem_amass.npz`):`kimodo_gen "a person waves" --model Kimodo-SMPLX-RP-v1 --output ./outputs/wave.npz`,会同时写 `./outputs/wave_amass.npz`
- 关闭后处理(脚滑修正、约束清理):`kimodo_gen "a person walks" --no-postprocess`
- 多提示序列生成过渡:`kimodo_gen "a person stands still" "a person walks forward" "a person stops and turns"`
- 多段提示并控制整体时长和样本数:`kimodo_gen "a person jogs" "a person slows to a walk" "a person stops" --duration 8.0 --num_samples 2`
- 加载交互式 demo 保存的约束:`kimodo_gen "a person walks to a table and picks something up" --constraints ./my_constraints.json`
- 组合文本和约束并指定模型与样本数:`kimodo_gen "a person performs a complex motion" --constraints ./keyframe_constraints.json --model Kimodo-SOMA-RP-v1 --num_samples 5`
- 启动 Web 交互 demo:`kimodo_demo`,默认 `http://127.0.0.1:7860`
- 远程服务器访问 demo:`kimodo_demo --server-name 0.0.0.0 --server-port 7860`
- 在 demo 中使用时间线编辑器编辑文本提示和约束。
- 在 demo 中添加全身关键帧约束。
- 在 demo 中使用 2D 根路径/路点编辑器。
- 在 demo 中控制末端执行器位置/旋转。
- 在 demo 中查看带骨架和蒙皮网格的实时 3D 可视化。
- 从 demo 导出约束为 JSON、动作 as NPZ。
- Python 低层 API 基本推理:`from kimodo.model import Kimodo`,`model = Kimodo(model_name="Kimodo-SOMA-RP-v1")`
- 简单文本到动作生成:`model(prompts=["a person walks forward at a moderate pace"], duration=4.0, num_samples=1, seed=42)`
- 读取结果字段形状:`posed_joints` `[T,J,3]`、`global_rot_mats` `[T,J,3,3]`、`local_rot_mats` `[T,J,3,3]`、`foot_contacts` `[T,4]`、`root_positions` `[T,3]`。
- 高级 API:多提示、时长、样本数、扩散步数、`guidance_scale`、种子:`model(prompts=[...], duration=9.0, num_samples=3, diffusion_steps=50, guidance_scale=7.5, seed=0)`
- 访问每个样本结果:`result["posed_joints"][i]`
- 程序化约束:`from kimodo.constraints import ConstraintSet, FullBodyKeyframe, EndEffectorConstraint`
- 创建约束集:`constraints = ConstraintSet()`
- 添加全身关键帧:在第 30 帧(30fps 下约 1 秒)调用 `constraints.add_full_body_keyframe(frame=30, joint_positions=keyframe_pose)`,其中 `keyframe_pose` 为 `[J,3]` 关节位置。
- 添加右手末端执行器约束:`constraints.add_end_effector(joint_name="right_hand", frame_start=45, frame_end=60, position=np.array([0.5,1.2,0.3]), rotation=None)`
- 添加根路径 2D 路点:`constraints.add_root_waypoints(waypoints=np.array([[0,0],[1,0],[1,1],[0,1]]))`
- 带约束生成:`model(prompts=["a person walks in a square"], duration=6.0, constraints=constraints, num_samples=2)`
- 加载已保存约束:`json.load` 读取 `constraints.json`,`ConstraintSet.from_dict(constraint_data)`,再传给 `model(...)`。
- 保存生成动作:`np.savez("walk_motion.npz", **result)`
- 加载并检查保存动作:`data = np.load("walk_motion.npz")`,读取 `posed_joints`、`global_rot_mats`、`local_rot_mats`、`foot_contacts`、`root_positions`、`smooth_root_pos`、`global_root_heading`。
- MuJoCo 可视化 G1:生成 G1 动作 CSV,然后 `python -m kimodo.scripts.mujoco_load`,按脚本中的 `CSV_PATH` 和 `MJCF_PATH` 配置。
- MuJoCo 播放循环:`qpos_data = np.loadtxt(CSV_PATH, delimiter=",")`,创建 `mujoco.MjModel.from_xml_path(MJCF_PATH)` 和 `mujoco.MjData(model)`,在 `mujoco.viewer.launch_passive` 中逐帧设置 `data.qpos[:] = frame_qpos`,调用 `mujoco.mj_forward(model, data)` 和 `viewer.sync()`。
- ProtoMotions 集成:用 Kimodo 生成 `--output ./run_jump.npz --duration 5.0`,再按 ProtoMotions 文档导入。
- GMR 重定向:用 `Kimodo-SMPLX-RP-v1` 生成并输出 `./cartwheel.npz`,使用自动生成的 `cartwheel_amass.npz` 配合 GMR。
- NPZ 输出格式解析:`posed_joints [T,J,3]` 全局关节位置(米)、`global_rot_mats [T,J,3,3]` 全局旋转矩阵、`local_rot_mats [T,J,3,3]` 父相对旋转矩阵、`foot_contacts [T,4]` 接触标签 `[L-heel,L-toe,R-heel,R-toe]`、`smooth_root_pos [T,3]` 平滑根轨迹、`root_positions [T,3]` 实际根(骨盆)轨迹、`global_root_heading [T,2]` 朝向 2D 单位向量;`T` 为帧数(30fps),`J` 为关节数(依赖骨架)。
- 直接用脚本生成:`python scripts/generate.py "a person walks" --duration 4.0`
- 查看所有 `kimodo_gen` 参数:`kimodo_gen --help`
- 批量生成:初始化 `Kimodo`,创建输出目录 `Path("./batch_outputs")`,遍历 prompts,用 `duration=4.0`、`num_samples=1`、`seed=i` 生成,`np.savez(output_dir / f"motion_{i:03d}.npz", **result)`。
- 比较模型变体:对同一 prompt 依次加载 `Kimodo-SOMA-RP-v1` 和 `Kimodo-SOMA-SEED-v1`,用 `duration=4.0`、`seed=0` 生成并打印 `posed_joints.shape`。
- 排查显存不足:`nvidia-smi` 检查可用显存,`--num_samples 1` 降低峰值显存,`--diffusion_steps 20` 降低步数加速(质量下降)。
- 排查模型下载:如代理问题设置 `export HF_ENDPOINT=https://huggingface.co`、`export HUGGINGFACE_HUB_VERBOSITY=debug`,或设置 `export HF_HOME=/path/to/your/cache`。
- 提升动作质量:提示要具体,如 `"a person walks forward at a moderate pace"` 优于 `"walking"`;复杂动作用交互 demo 加关键帧约束;提高 `--diffusion_steps`(默认约 20-30,试 50);生成多个样本 `--num_samples 5` 后选最佳;避免极快或物理不可能动作;模型 30fps,时长小于 1s 可能效果差。
- 处理脚滑伪影:默认开启后处理;仅在调试时使用 `--no-postprocess` 关闭。
- 排查 demo 加载:用 `lsof -i :7860` 检查 7860 端口;用 `kimodo_demo --server-port 7861` 换端口;远程服务器用 `kimodo_demo --server-name 0.0.0.0 --server-port 7860` 并通过 `ssh -L 7860:localhost:7860 user@server` 端口转发。
适用边界 · 注意事项
- 没有约 17GB VRAM 的 NVIDIA GPU、不能使用 Linux 或 Docker 时,不适合直接运行 Kimodo 模型。
- 目标输出骨骼/机器人不是 SOMA、Unitree G1 或 SMPL-X,且没有 MuJoCo/GMR/ProtoMotions 等重定向流程时,不要直接套用。
- 不能从 Hugging Face 下载模型、不能安装 Kimodo CLI/Python 包,或必须完全离线使用时,不适用。