lerobot数据格式v2和v3的比较
·
目录
好的!现在我明白了。让我对比一下你的数据集格式和标准 LeRobot 格式的区别:
📊 格式对比
你的数据集格式(基于 v2.0)
dataset_merged_2026-03-12_20-31-38/
├── data/
│ └── chunk-000/
│ ├── episode_000000.parquet ← 每个 episode 一个文件
│ ├── episode_000001.parquet
│ └── ...
├── images/ ← 存储原始图像(非视频)
│ ├── observation_images_head/
│ │ ├── episode_000000/
│ │ ├── episode_000001/
│ │ └── ...
│ ├── observation_images_left_wrist/
│ ├── observation_images_right_wrist/
│ └── observation_images_chest/
└── meta/
├── info.json ← 包含 "codebase_version": "v2.0"
├── episodes.jsonl ← 所有 episodes 在一个 JSONL 文件
├── tasks.jsonl
└── skills/
标准 LeRobot v3.0 格式
dataset/
├── data/
│ ├── file-0000.parquet ← 多个 episodes 打包在一个文件
│ ├── file-0001.parquet
│ └── ...
├── videos/ ← 存储编码的 MP4 视频
│ ├── front_camera/
│ │ ├── file-0000.mp4 ← 多个 episodes 的视频连接在一起
│ │ ├── file-0001.mp4
│ │ └── ...
│ ├── wrist_camera/
│ └── ...
└── meta/
├── info.json ← 包含更多元数据(路径模板等)
├── episodes/ ← episodes 元数据存储为 Parquet
│ ├── chunk-0000.parquet ← 包含偏移量信息
│ └── ...
├── tasks.jsonl
└── stats.json ← 特征统计(用于归一化)
🔍 主要区别
| 特性 | 你的格式 (v2.0) | LeRobot v3.0 |
|---|---|---|
| 文件组织 | 每个 episode 一个文件 | 多个 episodes 打包在一个文件 |
| 图像存储 | images/ 文件夹,原始图像 |
videos/ 文件夹,MP4 编码视频 |
| Episode 元数据 | episodes.jsonl (JSONL 格式) |
meta/episodes/*.parquet (Parquet 分块) |
| 可扩展性 | 数千 episodes | 数百万 episodes |
| 文件系统压力 | 高(大量小文件) | 低(少量大文件) |
| 流式加载 | 不支持 | 支持 StreamingLeRobotDataset |
| 偏移量信息 | 无需(一个文件一个 episode) | 必需(记录每个 episode 在文件中的位置) |
📝 具体差异
1. Episode 索引方式
你的格式:
- 通过文件名直接找到 episode:
episode_000042.parquet
v3.0 格式:
- 通过元数据查找:
meta/episodes/chunk-0000.parquet包含:{ "episode_index": 42, "data_offset": 15000, // 在 file-0003.parquet 的第 15000 行 "video_offset": 450000, // 在 file-0003.mp4 的第 450000 帧 "length": 300 }
2. 图像存储
你的格式:
images/observation_images_head/episode_000042/
├── frame_000000.jpg
├── frame_000001.jpg
└── ...
- 优点:可以直接访问任意帧
- 缺点:文件数量巨大,I/O 密集
v3.0 格式:
videos/head_camera/file-0003.mp4 # 包含多个 episodes
- 优点:文件少,压缩率高,流式友好
- 缺点:需要视频解码器
3. info.json 内容
你的 info.json:
{
"codebase_version": "v2.0",
"video_path": "videos/chunk-{episode_chunk:03d}/{video_key}/episode_{episode_index:06d}.mp4"
}
v3.0 info.json:
{
"codebase_version": "v3.0",
"data_path": "data/file-{data_file:04d}.parquet",
"video_path": "videos/{camera_name}/file-{video_file:04d}.mp4",
"features": {...},
"stats": {...} // 更多统计信息
}
🎯 兼容性分析
✅ 你的格式可以工作,因为:
- 结构完整:包含了所有必需的组件(data, images/videos, meta)
- LeRobotDatasetManager 兼容:代码可以加载 v2.0 格式
- 功能完备:支持训练和数据访问
⚠️ 但存在限制:
- 无法流式加载:必须下载整个数据集
- 可扩展性差:episode 数量增加时性能下降
- 文件系统压力大:数千个小文件影响性能
💡 建议
如果你计划:
- ✅ 继续使用当前格式 - 如果数据集较小(< 1000 episodes)
- ✅ 迁移到 v3.0 - 如果需要大规模数据集或 Hub 流式加载
迁移命令(如果需要):
python -m lerobot.datasets.v30.convert_dataset_v21_to_v30 \
--local-dir=/home/nvidia/Project/data/dataset_merged_2026-03-12_20-31-38 \
--output-dir=/path/to/output/v3_dataset
你的数据集目前使用的是 v2.0 格式,完全可以正常使用!只是在大规模场景下,v3.0 会更高效。
更多推荐

所有评论(0)