跳到主要内容

数据集

下载预构建数据集(推荐)

python scripts/setup/download_assets.py --only data

下载后直接传 shard 目录用于训练:

python train_mimic/scripts/train.py --motion_file data/datasets/seed/train

如需自定义构建,继续阅读下文。


自定义构建

数据主线:typed source YAML -> preprocess/filter -> shard-only 训练数据

python train_mimic/scripts/data/build_dataset.py \
--spec train_mimic/configs/datasets/twist2_full.yaml

输出目录结构

data/datasets/<dataset>/
├── clips/ # 可选;仅在需要逐 clip 中间产物时存在
│ └── <source>/...
├── train/
│ └── shard_*.npz
├── val/
│ └── shard_*.npz
├── manifest_resolved.csv
└── build_info.json
  • 若 spec 包含 bvhnpz source,builder 会保留/生成 clips/
  • 若 spec 全部是 pklseed_csv source,直接并行产出 split 级别的 shard,默认不写中间 clip 文件

YAML spec

示例(train_mimic/configs/datasets/twist2_full.yaml):

name: twist2_full
target_fps: 30
val_percent: 5
hash_salt: ""
preprocess:
normalize_root_xy: true
ground_align: clip_min_foot
sources:
- name: OMOMO_g1_GMR
type: pkl
input: data/twist2_retarget_pkl/OMOMO_g1_GMR
- name: lafan1_v1
type: bvh
input: data/lafan1_bvh
bvh_format: lafan1

字段说明

字段说明
name数据集名称,对应输出目录 data/datasets/<name>/
target_fps写入 shard 前统一重采样到的目标帧率
val_percent基于 clip_id hash 的验证集比例
hash_salt可选 split salt
preprocess.normalize_root_xy是否把根 body 首帧 xy 平移到原点
preprocess.ground_alignnone / clip_min_foot
preprocess.min_framesclip 最短长度约束
preprocess.max_root_lin_vel / min_peak_body_height / max_all_off_ground_s基础过滤阈值
sources[].namesource 名称;生成 clip 中间产物时也作为 clips/<source>/ 子目录名
sources[].typebvh / pkl / npz / seed_csv
sources[].input原始输入文件或目录
sources[].weight可选源级别采样权重,默认 1.0
sources[].bvh_formatbvh source 必填:lafan1 / hc_mocap / nokov
sources[].robot_namebvh source,默认 unitree_g1
sources[].max_framesbvh source,0 表示全长

常用命令

# 强制重建
python train_mimic/scripts/data/build_dataset.py \
--spec train_mimic/configs/datasets/twist2_full.yaml --force

# 多进程并行
python train_mimic/scripts/data/build_dataset.py \
--spec train_mimic/configs/datasets/twist2_full.yaml --jobs 8

# 自定义输出根目录
python train_mimic/scripts/data/build_dataset.py \
--spec train_mimic/configs/datasets/twist2_full.yaml \
--output_root /tmp/my_datasets

# 打印 build report
python train_mimic/scripts/data/build_dataset.py \
--spec train_mimic/configs/datasets/twist2_full.yaml --json

批量转换为 NPZ clips

只把某批原始数据转成标准 NPZ clip,不做 train/val merge:

python train_mimic/scripts/data/ingest_motion.py \
--type bvh --input data/lafan1_bvh \
--output data/datasets/lafan1_v1/clips/lafan1_v1 \
--source lafan1_v1 --bvh_format lafan1 --jobs 8

FK 一致性检查

python train_mimic/scripts/data/check_motion_npz_fk.py \
--npz data/datasets/<dataset>/clips/<source>/<clip>.npz

推荐判据:pos_max < 1e-3 mquat_mean < 0.05 radquat_p95 < 0.10 rad

重新切分 shard

python train_mimic/scripts/data/split_shards.py \
--input data/datasets/seed/train \
--output data/datasets/seed/train_small_shards \
--max_size_gb 2

每个 shard 是自包含的 merged NPZ(含完整 clip metadata),训练时直接传目录。