这个 repo 用于从 MineDojo 采集轨迹数据,代码按三层组织:
- Input layer:
wm_lab2/inputs/(动作生成策略 / policy,可替换) - Sim layer:
wm_lab2/sim/(MineDojo 环境创建 + rollout) - Output layer:
wm_lab2/output/(写video.mp4+data.npz+manifest.json)
你主要跑 data_collector.py(CLI 入口),通过参数选择不同的 policy。
如果你不指定 --out_root,默认会输出到:./data/<policy_name>/(每个 policy 一个文件夹,方便按类别管理)。
安装细节见:installation_README.md(Java8 / gym 版本等)。
你本机已经有 conda env:alexwm2 的话,直接:
conda activate alexwm2
python --version
python -c "import minedojo, numpy; print('env_ok')"python data_collector.py --num_episodes 1 --max_steps 100 --policy safe_randompython data_collector.py --num_episodes 1 --max_steps 200 --policy wasd --p_jump 0.05每个 episode 一个文件夹:
data/episode_<UTC时间戳>_<index>/
manifest.json: 环境参数 + policy + action space 信息video.mp4: 观测 RGB 视频(H.264)data.npz: 对齐的 step 序列actions: (T, D) int64positions: (T, 3) float32yaws: (T,) float32pitches: (T,) float32
CLI 支持 --policy custom,并用 --policy_entrypoint 指定一个 factory:
python data_collector.py \
--num_episodes 1 --max_steps 200 --out_root ./data \
--policy custom \
--policy_entrypoint examples.custom_policy:make_policy其中 examples/custom_policy.py 里提供了模板:factory 签名必须是:
def make_policy(nvec, noop, rng) -> Policy:
...返回对象需要实现:
reset(obs) -> Noneact(obs) -> np.ndarray(动作向量 shape (D,))
--task_id: MineDojo task(默认open-ended)--image_size_hw:H,W(默认160,256)--policy:safe_random | wasd | custom--active_dims: safe_random 只随机哪些维度(默认0,1,2,3,4)--out_root: 输出根目录
进入交互式命令行(推荐在 alexwm2 环境里运行):
python -m wm_lab2.tools.data_manager --root ./data --recursive常用命令:
ls/ls ok/ls empty/ls failedshow <episode_id_or_prefix>rm <episode_id_or_prefix>rm empty/rm failed(一键按状态删除)rm all empty/rm all failed/rm all ok/rm allmv <episode_id_or_prefix> <category>(把 episode 移动到data/<category>/<episode_id>/方便分类)
把所有 ok episode 的 actions 导出成 JSON(写到 postprocessed/ 子目录):
python -m wm_lab2.tools.postprocess --root ./data --only_ok --processor actions_json --out_mode subdir说明:
--processor actions_json是一个内置 processor;后续想支持别的格式,只要在wm_lab2/postprocess/新增 processor 并注册即可。