系列文章目录

目录

系列文章目录

前言

亮点

一、交互式演示

1.1 运行演示程序

1.1.1 从命令行启动

1.1.2 使用 Docker 启动

1.2 UI 概述

1.2.1 查看器

1.2.1.1 摄像机

1.2.1.2 播放

1.2.2 时间轴

1.2.2.1 时间轴导航

1.2.2.2 提示

1.2.2.3 约束

1.2.3 设置面板

1.3 模型选择

1.4 示例

1.5 生成

1.6 约束条件

1.7 保存/加载

二、命令行界面 (CLI)

2.1 可视化生成的运动轨迹

2.2 参数

2.3 Python API

三、约束 JSON 格式

3.1 总体结构

3.2 约束类型

3.2.1 root2d

3.2.2 fullbody

3.2.3 左手 / 右手 / 左脚 / 右脚

3.3 最小示例

四、输出格式

4.1 Kimodo NPZ 格式

4.2 Kimodo-G1 的 CSV 格式

4.3 适用于 Kimodo-SMPLX 的 AMASS NPZ 格式

五、生成参数

5.1 无分类器引导

5.2 去噪步骤


前言

 

        Kimodo 是一个基于大规模(700 小时)商用友好型光学动作捕捉数据集训练而成的运动学动作扩散模型。该模型可生成高质量的人体和机器人 3D 动作,并通过文本提示以及一系列约束条件(如全身姿态关键帧、末端执行器位置/旋转、2D 路径和 2D 路点)进行控制。详情请参阅项目页面

亮点

  • 受控生成
    • 结合文本提示与全身、根节点及末端执行器约束。
  • 人类(类人)支持
    • 同时提供数字人类和类人机器人的模型变体。
  • 交互式演示
    • 时间轴编辑、实时3D可视化及示例预设。

一、交互式演示

        这款基于网页的交互式演示提供了直观的界面,可用于使用任何一种 Kimodo 模型变体生成运动轨迹。

使用 Viser 构建的交互式演示界面

注意:

        要查看演示的实际运行效果,请按照下面的设置说明进行操作,并在本地启动演示程序。启动后,请在网页浏览器中访问 http://127.0.0.1:7860 打开演示程序;如果是在服务器上运行,请使用端口转发。

        该演示提供了一个基于时间轴的界面,用于编写文本提示和约束条件,并支持实时3D可视化。以下是部分主要功能:

  • 多角色支持:支持使用 Kimodo 的 SOMA、G1 和 SMPL-X 版本进行生成
  • 文本提示:在时间轴上输入一个或多个描述所需动作的自然语言描述
  • 时间轴编辑器:在多个约束轨道上添加和编辑关键帧及受约束区间
  • 约束类型
    • 全身约束:在特定帧设置完 整的关节位置约束
    • 2D 根点:在地面平面上定义路径 点或完整路径以供跟随
    • 末端执行器:控制手部和脚部的位 置/旋转角度
  • 约束编辑:编辑模式支持重新调整约束姿势或修改路径点
  • 3D 可视化:实时渲染生成的动作,支持骨骼和蒙皮网格选项
  • 播放控制:以可调节的播放速度预览生成的动作
  • 多重样本:生成并比较多种动作变体
  • 示例:加载现成示例以更好地了解 Kimodo 的功能
  • 导出:保存约束和生成的动作以备后用

1.1 运行演示程序

        按照安装说明操作后,可通过以下命令启动演示程序。演示程序将在网页浏览器中运行,地址为 http://localhost:7860。

        若在服务器上运行演示程序,可使用端口转发进行访问。

        若要在远程服务器上访问演示程序的 Web 界面,请设置 SSH 端口转发,以便您的 Web 浏览器能够像访问本地服务器一样访问 http://localhost:7860。

  1. 在 SSH 配置文件中添加 LocalForward

      编辑(或创建)您的 SSH 配置文件(通常位于 ~/.ssh/config):

    Host your-server-name
        HostName your.server.address
        User username
        LocalForward 7860 localhost:7860

    然后连接到:

    ssh your-server-name
  2. 直接使用 SSH 命令行
    在您的本地计算机上运行:
    ssh -N -L 7860:localhost:7860 username@your.server.address

    这将把您的本地端口 7860 转发到服务器的端口 7860。连接成功后,请在网页浏览器中打开 http://localhost:7860。

    请将 username 和 your.server.address 替换为您实际的用户名和服务器地址。

        如果您需要频繁重启演示,建议先按照快速入门指南中的说明,在后台启动文本编码器服务。如果文本编码器服务未运行,演示将自动加载文本编码器模型。

        演示在启动时以及用户界面中更改模型首选项时,也会自动下载 Kimodo 模型检查点。

1.1.1 从命令行启动

        无论您是通过软件包还是源代码安装的 Kimodo,均可使用以下命令启动演示程序:

kimodo_demo

1.1.2 使用 Docker 启动

        如果您是通过 Docker 安装的,可以使用以下命令启动演示:

docker compose up demo

 如果您在 Docker 容器中运行 Kimodo,以下命令可能会对您有所帮助。在下面的示例命令中,您也可以将 demo 替换为 text-encoder:

        查看日志:

docker compose logs demo

        停用服务:

docker compose stop demo

        重启服务:

docker compose restart demo

        停止并移除所有内容:

docker compose down

1.2 UI 概述

        本页面概述了演示界面的各个主要元素及其使用方法。

演示 Web 应用中的一个示例场景

1.2.1 查看器

        3D 查看器显示当前生成的运动。它支持骨骼或蒙皮网格渲染,相关设置可在“可视化”面板中进行配置。

1.2.1.1 摄像机
  • 向左拖动:旋转
  • 向右拖动:平移
  • 滚动:缩放
1.2.1.2 播放
  • 空格键播放/暂停
  • ←/→ 逐帧播放,或点击帧号。

1.2.2 时间轴

        时间轴是您:

  • 添加、编辑和删除提示片段
  • 在帧或时间间隔处添加和删除约束条件,并调整时间
1.2.2.1 时间轴导航
  • 在时间轴上滚动上下:左右移动
  • 按住 Shift 键并滚动时间轴:放大/缩小
1.2.2.2 提示
  • 双击文本提示以编辑文本
  • 点击并拖动提示框的右边缘以延长/缩短其时长(2-10 秒)
  • 点击空白处以添加提示
  • 右键点击提示以删除它
1.2.2.3 约束

        在查看器中存在活动动作时,首次生成后可添加约束:

  • 在时间轴轨道(全身/2D根等)上单击,以使用该帧的姿势添加该类型的约束条件
  • 按住 Ctrl/Cmd 键并单击拖动以添加间隔约束,或将关键帧扩展为间隔
  • 单击并拖动现有约束将其移动到其他帧
  • 右键单击约束以删除它
  • 要编辑约束:
    • 将播放光标移至目标帧
    • 在“设置”面板的“约束”选项卡中点击“进入编辑模式”。请注意,再次生成前必须退出编辑模式。

1.2.3 设置面板

        设置面板包含:

  • 模型选择
  • 加载示例
  • 用于生成和后处理的模型参数选择
  • 约束编辑参数
  • 运动加载和保存
  • 可视化选项

        后续页面将分别对重要设置面板进行详细说明。

1.3 模型选择

        模型选择功能允许您在快速入门指南中详细介绍的Kimodo模型之间进行选择。

        这些模型决定了场景中加载的角色以及可用的导出选项。

  • SOMA:默认人体骨骼
  • G1:支持MuJoCo格式的导出
  • SMPL-X:支持SMPL-X格式的输出

        有关各骨骼的详细信息,请参阅“骨骼”部分。

1.4 示例

        设置面板中的“示例”选项卡包含多个示例,这些示例突出了 Kimodo 的关键功能及其潜在的工作流程。其中包含了针对 Kimodo-SOMA-RP 和 Kimodo-G1-RP 模型的示例。

        从下拉菜单中选择一个示例后,点击“加载示例”将示例配置加载到查看器中。

        查看器将在时间轴上显示预生成的运动,以及用于生成该运动的提示和约束条件。用于生成模型的所有设置(例如初始值、无分类器引导设置)也会随示例一并加载,因此您只需在面板中点击“生成”即可恢复相同的结果。

        这些示例涵盖了多种生成方式,包括使用一个或多个文本提示以及运动学约束进行生成。

        保存新示例:生成动作后,您可以在“设置”面板的“加载/保存”选项卡下保存一个新示例。您应能立即看到“示例”下拉菜单更新为新保存的示例,以便日后加载。

        本节将逐步介绍常见的工作流程以及如何使用该网络应用。每个工作流程都有独立的章节和配套视频。

1.5 生成

        最重要的面板是“生成”面板,它允许您调用 Kimodo,根据提供的提示、约束和设置生成一个或多个动作。

  • 采样数量:根据当前设置生成的动作数量。当生成多个采样时,在编辑约束或生成新动作之前,必须通过在查看器中点击角色来选择其中一个采样。
  • SOMA 层:若使用 Kimodo-SOMA 模型,此选项将显示。它允许您使用 SOMA 身体层为角色贴皮,而非使用 SOMA 骨骼系统。有关两者的区别,请参阅“骨骼”页面。
  • 种子:用于可重复生成的随机种子
  • 去噪步骤:DDIM 所使用的步骤数
  • CFG 文本/约束权重:用于无分类器引导的权重值
  • 后处理:是否使用脚部滑动清理和约束后优化来改善生成后的动作
    • 根节点容差:如果骨骼根节点偏离约束的幅度超过此容差值,后处理将进行修正

1.6 约束条件

        约束条件用于引导特定帧或时间间隔内的运动。如需了解各种约束类型的详细信息,请参阅“约束概念”和“约束格式”页面。

        约束面板允许您配置约束和编辑设置:

  • 进入编辑模式:在查看器中启用前向约束(FK)姿势编辑。可编辑的关节上将显示操作控件。如果当前帧的时间轴上已有约束,任何姿势编辑都会调整该约束;否则,您需要在调整姿势后在时间轴上添加约束。
  • 操作控件空间:编辑时在本地或全局关节空间中显示旋转操作控件。
  • 吸附到约束:将当前帧的运动吸附到该帧的约束上。当生成的姿势与约束不完全吻合,且您希望继续编辑约束时,此功能非常有用。
  • 重置约束:执行相反操作,将姿势从受约束的姿势吸附回最初生成的运动。
  • 根节点 2D 选项 > 生成平滑路径:若已设置根节点路径点约束,勾选此框将把路径点转换为平滑的密集路径约束。若运动的首帧和末帧没有路径点,系统将自动添加,因为 Kimodo 仅针对完整序列路径进行过训练。
  • 清除所有约束:从查看器和时间轴中清除所有当前约束。

1.7 保存/加载

        “加载/保存”和“导出”面板可用于保存生成的结果以及加载先前生成的结果

  • 加载/保存
    • 运动:将当前运动以 NPZ 格式保存到指定路径。也可通过此面板将运动 NPZ 文件加载到查看器中。此功能可用于加载通过命令行界面 (CLI) 生成的运动。
    • 约束:将当前约束以 JSON 格式保存至指定路径。约束 JSON 文件也可加载到查看器中。
    • 示例:允许保存包含当前运动、约束及所有设置的新示例。这对于重新加载先前的工作非常有用。如果示例保存到演示示例目录中,则可从“示例”下拉菜单加载;否则,您可通过此菜单中的文件路径加载。
  • 导出功能
    • 截图:将当前画布保存为图像,可通过浏览器下载
    • 视频:将当前运动录制为视频,可通过浏览器下载
    • 运动数据:根据骨骼类型,将当前运动保存为指定格式。包括输出格式中所述的 NPZ、BVH、CSV 和 AMASS NPZ 格式。

二、命令行界面 (CLI)

        CLI 的主要入口是 kimodo_gen 命令。该命令对应于位于 kimodo/scripts/generate.py 中的脚本,因此您也可以使用 python -m kimodo.scripts.generate 来实现相同的效果。

        Docker 使用方法:如果您使用 Docker 部署 Kimodo,则可以在 Docker 容器内运行生成操作,将 `kimodo_gen XXX` 替换为 `docker compose run --rm demo kimodo_gen XXX`。如果您需要多次运行生成操作,建议先启动 demo 容器(例如在另一个终端或后台运行),然后在容器内执行命令,使用 `docker compose exec demo kimodo_gen XXX`。

        单提示符生成:

kimodo_gen "A person walks forward." \
    --model Kimodo-SOMA-RP-v1 \
    --duration 5.0 \
    --output output

        --model 命令对应用于生成的 Kimodo 模型检查点。如果未指定,默认使用 Kimodo-SOMA-RP-v1。生成的运动轨迹将使用 --output 指定的文件名,以 Kimodo 输出格式保存。若使用 G1 或 SMPL-X 模型进行生成,您还可以保存为其他输出格式,例如 MuJoCo qpos CSV 文件和 AMASS NPZ 格式。

多提示生成:

        通过使用以句点分隔的多个句子(并附带相应的持续时间),可以实现基于文本提示序列的生成:

kimodo_gen "A person walks forward. A person is walking backwards." \
    --duration "5.0 4.0" \

        此命令将使用 Kimodo 按顺序生成每个提示,并在第二个提示的开头添加约束条件,以确保与第一个生成的动作保持连续性。您可以通过 --num_transition_frames 参数控制用于混合连续动作的帧数。

带约束条件的单个提示:

        可以通过提供一个约束条件 JSON 文件(参见《约束条件格式定义》)来对生成过程进行约束。

kimodo_gen "A person walks forward and picks something up from the ground." \
    --model Kimodo-SOMA-RP-v1 \
    --duration 5.0 \
    --constraints kimodo/assets/demo/examples/kimodo-soma-rp/03_full_body_keyframes/constraints.json

        约束文件可通过交互式演示创建并保存,也可按照约束格式指南手动定义。

2.1 可视化生成的运动轨迹

        使用命令行界面(CLI)生成的运动轨迹可在演示界面中进行可视化。操作方法如下:在“加载/保存” > “运动轨迹”下,输入生成的 npz 输出文件的路径,然后点击“加载运动轨迹”将其加载到查看器中。若生成时使用了约束,也可通过类似方式加载这些约束。

2.2 参数

        要查看所有可用参数,请运行 kimodo_gen --help。参数包括:

  • prompt:所需运动的文本描述(必填)
  • --model:要使用的模型名称(默认:Kimodo-SOMA-RP-v1;选项为该表中的模型)
  • --duration: 动作持续时间(单位:秒)(默认:5.0)。若包含多个提示,请将持续时间以空格分隔的形式作为字符串传入。
  • --diffusion_steps: 去噪步骤数(默认:100)
  • --num_samples: 要生成的动作变体数量(默认:1)
  • --num_transition_frames:用于提示词之间过渡的帧数(默认:5)
  • --constraints:包含约束条件的 JSON 文件路径
  • --output:输出干名(默认:output)。适用于所有格式(NPZ、AMASS NPZ、CSV、BVH)。若仅有一个样本,则按格式分别生成单个文件(例如 test.npz、test.csv)。若有多个样本,则创建一个文件夹并在其中生成 test_00.npz、test_01.npz 等文件。对于仅含一个样本的 SMPLX,AMASS 数据将写入 stem_amass.npz,以免覆盖主 NPZ 文件。
  • --bvh:可选标志。启用时,将使用与 --output 相同的文件名后缀导出 BVH(仅限 SOMA 模型)。
  • --seed:用于确保结果可重现的种子值
  • --no-postprocess:禁用后处理(包括足部滑动清理和约束优化)
  • --input_folder:包含 meta.json 和可选 constraints.json 的文件夹。若设置此选项,生成设置将从 meta.json 加载。这些文件可在演示示例文件夹中找到。

2.3 Python API

        如果您希望直接使用 Kimodo 的 Python API,建议从 kimodo/scripts/generate.py 脚本开始熟悉。完整的模型 API 详见 API 文档。

三、约束 JSON 格式

        CLI 中的 --constraints 标志需要一个包含约束对象列表的 JSON 文件。查看演示中提供的示例是了解其格式最简单的方法。您可以在 kimodo/assets/demo/examples 中查看各种模型类型的示例。

提示:获取有效约束文件的最简单方法是在交互式演示中创建约束,然后点击“保存约束”。

3.1 总体结构

  • 该文件是一个 JSON 数组:[{...}, {...}, ...]
  • 每个元素都是一个对象,至少包含:
    • type(字符串)
      • root2d、fullbody、left-hand、right-hand、left-foot、right-foot、end-effector
    • frame_indices(整数数组):生成片段中以 0 为起点的帧索引。

3.2 约束类型

        根据类型不同,某些字段为必填项,某些为可选项。所有数值数组均为普通的嵌套 JSON 列表。在以下定义中,T 表示帧数,J 表示骨骼关节数。

3.2.1 root2d

        该类型用于捕获 2D 根节点路点和 2D 根路径。它需要:

  • smooth_root_2d(数组形状 [T, 2]):在给定 frame_indices 帧号处,地面平面上经过平滑处理的根节点位置 [x, z]。

        以及可选参数:

  • global_root_heading(数组形状 [T, 2]):在给定 frame_indices 帧号处,根节点的全局航向 [cos, sin]。

3.2.2 fullbody

        此参数捕获关节位置上的全身关键帧约束。其包含:

  • local_joints_rot(数组形状 [T, J, 3]):每帧每个关节的轴-角局部旋转(弧度)。受约束的关节位置将由此推导得出。
  • root_positions (数组形状 [T, 3]):根部(髋部)平移 [x, y, z]。
  • smooth_root_2d (可选;数组 [T, 2]):平滑后的根部位置 [x, z]。若省略,则默认取自 root_positions 的 [x, z] 分量。

3.2.3 左手 / 右手 / 左脚 / 右脚

        捕获针对手/脚关节位置和旋转的末端执行器约束。

        这些使用与 fullbody 相同的字段。但在底层实现中,它们仅会影响相应的末端执行器和髋关节。

3.3 最小示例

[
  {
    "type": "root2d",
    "frame_indices": [0, 30, 60],
    "smooth_root_2d": [[0.0, 0.0], [0.5, 0.0], [1.0, 0.1]]
  }
]

四、输出格式

        命令行生成使用单一输出根目录(--output)来存储所有格式(NPZ、AMASS NPZ、CSV 和 BVH)。根据样本数量的不同,它可以写入单个文件或一组文件:

  • 单个样本(--num_samples 1):在输出路径下为每种格式生成一个文件(例如 --output test → test.npz, test.csv)。不创建文件夹。对于 SMPLX,AMASS 格式将写入 test_amass.npz。
  • 多个样本:创建一个以该主文件名命名的文件夹,并为每个样本生成一个文件,文件名后缀为 _00、_01 等(例如:--output my_run → my_run/my_run_00.npz, my_run/amass_00.npz, …)。

        使用 --bvh 标志可同时将 BVH(仅限 SOMA)导出到同一主文件中。

4.1 Kimodo NPZ 格式

        生成的运动数据以 NPZ 文件形式存储(每个样本一个文件,例如 motion_00.npz),包含:

  • posed_joints:全局关节位置 [T, J, 3]
  • global_rot_mats:全局关节旋转矩阵 [T, J, 3, 3]
  • local_rot_mats:局部(相对于父关节)关节旋转矩阵 [T, J, 3, 3]
  • foot_contacts:脚部接触标签 [左脚跟、左脚趾、右脚跟、右脚趾] [T, 4]
  • smooth_root_pos:模型输出的平滑根关节表示 [T, 3]
  • root_positions:实际根关节(如骨盆)的(未平滑)轨迹 [T, 3]
  • global_root_heading:模型输出的根关节航向 [T, 2]

        其中:

  • T:帧数
  • J:关节数

        若生成多个样本,文件将以 _00、_01 等后缀保存。

4.2 Kimodo-G1 的 CSV 格式

        在使用 Kimodo-G1 模型并通过 CLI 生成时,若指定 --output 参数,导出器会将 MuJoCo qpos 数据写入 CSV 文件。每行对应运动中的一个姿态,包含 36 个值:

  • 根节点平移 [x, y, z]
  • 根节点旋转四元数 [w, x, y, z]
  • 29 个关节的 1-DoF 值(按 G1 关节顺序排列)

        该 CSV 采用 MuJoCo 坐标系(z 轴向上,+x 轴向前)。若生成多个样本,文件将以 _00、_01 等后缀保存。

4.3 适用于 Kimodo-SMPLX 的 AMASS NPZ 格式

        当使用 Kimodo-SMPLX-RP 模型且 --output 参数指定为 CLI 生成时,导出器将写入一个 AMASS 风格的 SMPL-X .npz 文件。键包括:

  • trans: 根节点平移 [T, 3]
  • root_orient: 根节点方向(轴-角)[T, 3]
  • pose_body: 身体姿态(轴-角)[T, 63](21 个关节 × 3)
  • pose_hand: 手部姿态(轴-角)[T, 90](15 个关节 × 2 只手 × 3)
  • pose_jaw:下颌姿态轴角 [T, 3]
  • pose_eye:眼部姿态轴角 [T, 6]
  • betas:形状系数
  • num_betas:形状系数数量
  • gender:中性
  • surface_model_type:smplx
  • mocap_frame_rate:帧率 (fps)
  • mocap_time_length: 动作持续时间(秒)

        导出器将 Kimodo 坐标系(y 轴向上,+z 轴向前)转换为 AMASS 坐标系(z 轴向上,+y 轴向前)。如果生成了多个样本,文件将以 _00、_01 等后缀保存。

五、生成参数

        在演示界面和低级 Python API 中,Kimodo 支持对动作生成进行一些高级配置。

5.1 无分类器引导

        控制文本和约束引导的强度:

output = model(
    prompt="A person jumps",
    num_frames=150,
    cfg_weight=[2.0, 2.0],  # [text_weight, constraint_weight]
    cfg_type="separated",  # Options: "nocfg", "regular", "separated"
    num_denoising_steps=100,
)

        当遵循提示与满足约束之间存在权衡时,这些选项会很有帮助。

        CFG 选项包括:

  • cfg_type="nocfg": 不提供引导(速度更快,可控性较低)
  • cfg_type="regular": “标准”无分类器引导
    • 公式:out_uncond + w * (out_text_and_constraint - out_uncond)
  • cfg_type="separated":文本和约束采用独立权重
    • 公式:out_uncond + w_text * (out_text - out_uncond) + w_constraint * (out_constraint - out_uncond)

5.2 去噪步骤

        DDIM采样中使用的去噪步骤数量可用于控制速度与质量之间的权衡:

  • 步骤较少(50-100):推理速度更快,质量略低
  • 步骤较多(100-200):质量更高,推理速度较慢
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐