数据集结构与 meta/info.json
Dataset Structure & Metadata
理解 LeRobot 数据集格式、目录结构和元数据文件
未开始
完成后会同步到学习路径和首页统计
你刚录了 50 条演示,它们现在在硬盘的哪里?长什么样?这一章打开来看一眼 —— 理解数据集结构能帮你在训练报错时快速定位问题。
数据集藏在 ~/.cache/huggingface/lerobot/<repo-id>/ 下,里面是三个核心目录:data/(关节角度,很小)、videos/(相机帧,很大)、meta/(描述这个数据集是什么)。
其中 meta/info.json 是整个数据集的"身份证",也是初学者最常见崩溃 FileNotFoundError: meta/info.json 的主角 —— 搞懂它能省你大量时间。
不理解数据结构,训练报错时只能干瞪眼:
- 不知道 info.json 的作用 → 遇到 FileNotFoundError 不知从何查起
- 不知道视频占了 95% 空间 → 磁盘爆了不知道该压什么
- 不会用 LeRobotDataset 验证 → 带着坏数据去训练,浪费几小时才发现
这一章很短,但能让你在第 7 章训练出问题时,第一时间判断"是不是数据集的问题"。
- 理解 LeRobot 数据集目录结构
- 掌握 meta/info.json 的作用
- 学会检查和修复数据集问题
- 1数据集包含 parquet 文件和视频数据
- 2meta/info.json 记录数据集的元信息
- 3正确的数据格式是训练成功的前提
数据集目录结构
flowchart TD
Root["📁 so100-pick-cup/"] --> Data["📁 data/ 关节角度"]
Root --> Meta["📁 meta/ 元信息"]
Root --> Videos["📁 videos/ 相机帧"]
Data --> P["📄 episode_000.parquet ..."]
Meta --> Info["📄 info.json / episodes.jsonl / stats.json"]
Videos --> M["🎥 episode_000.mp4 ..."]
style Data fill:#dbeafe,stroke:#3b82f6
style Meta fill:#fef3c7,stroke:#f59e0b
style Videos fill:#fce7f3,stroke:#ec4899看一眼目录结构
用 tree 浏览数据集目录,建立整体印象:parquet 在 data/chunk-000/ 下,视频按相机分文件夹放在 videos/ 下,meta/ 里几个 json 文件描述全局信息。
查看结构
tree ~/.cache/huggingface/lerobot/your-name/so100-pick-cupso100-pick-cup/
├── data/
│ └── chunk-000/ episode_000.parquet ...
├── meta/
│ ├── info.json episodes.jsonl stats.json
└── videos/
└── observation.images.cam_top/ episode_000.mp4 ...打开 info.json —— 数据集的身份证
info.json 记录 episodes 总数、总帧数、fps、状态/动作维度、相机配置、schema 版本。训练时 LeRobot 第一件事就是读它,读不到就直接崩。
cat 出来对一对逻辑:total_episodes × 平均帧数 ≈ total_frames,能帮你确认数据集是不是完整。
查看元数据
cat ~/.cache/huggingface/lerobot/your-name/so100-pick-cup/meta/info.json{
"robot_type": "so100",
"total_episodes": 50,
"total_frames": 7423,
"fps": 30,
"features": {
"observation.state": {"dtype": "float32", "shape": [6]},
"action": {"dtype": "float32", "shape": [6]}
}
}total_episodes=50、total_frames≈7500 → 平均每条 150 帧 = 5 秒×30fps,逻辑自洽。
用代码验证能否加载
光看文件不够,用 LeRobotDataset 真的加载一次,能加载成功才说明数据集结构没问题、可以拿去训练。
验证加载
python -c "from lerobot.common.datasets.lerobot_dataset import LeRobotDataset; ds = LeRobotDataset('your-name/so100-pick-cup'); print(len(ds))"7423 # 能打印出帧数 = 加载成功
这一步报错(尤其 FileNotFoundError: meta/info.json)说明数据集不完整,别急着训练,先回去补录或重建 meta。
查看数据集结构
tree ~/.cache/huggingface/lerobot/your-name/so100-task查看元数据
cat ~/.cache/huggingface/lerobot/your-name/so100-task/meta/info.json验证数据集
python -c "from lerobot.common.datasets.lerobot_dataset import LeRobotDataset; ds = LeRobotDataset('your-name/so100-task')"训练一启动就 `FileNotFoundError: meta/info.json`。
根本原因
上次 record 中途被 Ctrl+C 强退 —— data/ 里有部分 parquet,但 meta/ 没生成(它在全部录完后才统一写)。
正确认识
要么重新完整录一遍,要么用 LeRobot 工具脚本基于 data/ 反向重建 meta。检查:ls -la .../meta/ 看是不是空的。
硬盘很快被数据集占满。
根本原因
视频帧占了数据集 95%+ 的空间,关节数据反而微不足道。
正确认识
想省空间就降相机分辨率 / 用 H.265 编码 / 减少相机数量。删 data/ 没用 —— 它本来就小。
- 理解目录结构
- info.json 内容正确
- 数据集加载无报错
算关节数据的体积
info.json 显示 fps=30、state 和 action 都是 6 维 float32。一条 7 秒演示的纯关节数据大约多少 KB?
FileNotFoundError: meta/info.json
- 原因:
- 数据集元数据文件缺失
- 解决:
- 检查数据集目录是否完整,可能需要重新采集
ls -la ~/.cache/huggingface/lerobot/your-name/so100-task/meta/- HuggingFace LeRobot 模型/数据集库
看别人公开的数据集结构,对照理解 data/meta/videos 布局。
数据集在 ~/.cache/huggingface/lerobot/<repo-id>/,三大目录:data(关节,小)、videos(相机,占 95% 空间)、meta(信息)。
meta/info.json 是身份证,缺了就报 FileNotFoundError —— 多半是 record 中途强退导致。训练前用 LeRobotDataset 加载一次验证完整性。
下一章进入正题:让神经网络真正开始学。
本章讨论区
登录后即可参与讨论 —— 点击右上角的 登录 按钮
加载中…