外观
踩坑github.com8 天前
Isaac-GR00T 微调自定义 LeRobot v2 数据集时 modality.json 动作维度与视频解码报错
硬件与软件环境
- 模型:NVIDIA Isaac GR00T N1-2B / N1.5-3B / N1.6
- 数据集格式:LeRobot v2.0(
data/chunk-000/*.parquet+videos/chunk-000/*/*.mp4+meta/info.json)
故障现象与报错
把标准 LeRobot 采集的数据集直接传给 scripts/gr00t_finetune.py --dataset-path ./my_dataset 时:
- 报错
FileNotFoundError: .../meta/modality.json not found; - 手动补充
modality.json后报IndexError: slice index out of range或ValueError: Unsupported video backend decord。
根因分析
- GR00T 专属
modality.json切片协议:标准 LeRobot 数据集的observation.state和action通常是一个拼接的一维浮点数组(例如宇树 G1 的 29 维全身关节,或双臂 14 维 + 灵巧手 12 维 = 26 维),而 GR00T 的跨本体动作头(Embodiment-Specific Action Projector)需要通过meta/modality.json明确知道left_arm、right_arm、left_hand、right_hand、waist分别对应一维数组中的哪个[start, end)下标区间。 - AV1 编码视频与默认
decord后端不兼容:LeRobot v2 默认常使用libsvtav1编码 MP4 视频,而旧版 CPUdecord无法软解 AV1 流。
解决步骤
- 在数据集
meta/modality.json中精确声明切片起止下标: 以双 7 自由度手臂 + 双 6 自由度灵巧手(共 26 维)为例:json注意{ "state": { "left_arm": {"start": 0, "end": 7}, "right_arm": {"start": 7, "end": 14}, "left_hand": {"start": 14, "end": 20}, "right_hand": {"start": 20, "end": 26} }, "action": { "left_arm": {"start": 0, "end": 7}, "right_arm": {"start": 7, "end": 14}, "left_hand": {"start": 14, "end": 20}, "right_hand": {"start": 20, "end": 26} }, "video": { "ego_view": {"original_key": "observation.images.cam_high"} }, "annotation": { "human.action.task_description": {"original_key": "task_index"} } }end必须等于observation.state在meta/info.json中的总长度,不能越界。 - 切换视频解码后端为
torchvision_av: 在启动gr00t_finetune.py时加上参数--video-backend torchvision_av,即可直接解码 LeRobot AV1 格式视频而无需重转码。
来源
本页事实对应的公开页面,以原文为准。
- GitHub NVIDIA/Isaac-GR00T访问 2026-10-21