资讯动态

Rerun 中的 LeRobot 数据集测试夹具(Test Fixtures)解析:v2/v3 结构、视频转码与导入验证

发布时间:2026/9/15 10:10:39 来源:尧图企业网站定制
Rerun 中的 LeRobot 数据集测试夹具Test Fixtures解析v2/v3 结构、视频转码与导入验证【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun本文档围绕crates/store/re_importer/tests/assets/lerobot/README.md展开解读 Rerun 仓库中用于验证 LeRobot 数据加载器dataloader的两套测试夹具v21_apple_storagev2.1 格式与v30_apple_storagev3.0 格式。文章将说明夹具的目录结构、meta/info.json关键字段、视频文件的转码规则并结合re_lerobotcrate 与re_importer的导入器实现解释这些夹具如何在测试中驱动一个 episode 对应一个 recording的导入流程。一、夹具定位为 LeRobot 数据加载器准备的验证数据Rerun 通过 importer_lerobot.rs 提供 LeRobot 数据集导入能力其核心逻辑位于 re_lerobot crate。为了在不依赖外部网络、无需下载 Hugging Face 数据集的前提下持续验证这条导入链路仓库在crates/store/re_importer/tests/assets/lerobot/下固化了两套小型数据集test fixturesv21_apple_storage来自pollen-robotics/apple_storage数据集的前三个 episode格式为 LeRobotv2.1codebase_version: v2.1v30_apple_storage同样的前三个 episode格式为 LeRobotv3.0codebase_version: v3.0。两个子目录下各有自己的README.mdv21 版、v30 版均声明 Apache-2.0 许可证并明确写道This dataset is used to test the LeRobot dataloader in Rerun该数据集用于测试 Rerun 中的 LeRobot 数据加载器。值得注意的溯源信息v21_apple_storage派生自rerun/v21_apple_storage的91b47932e95ae0c688960f96889bd3f447383d52修订版v30_apple_storage派生自rerun/v30_apple_storage的da288fcf2eee05e4f5839735d3c19839bf0b24e5修订版。上游数据集pollen-robotics/apple_storage与两个 Rerun 镜像都声明 Apache-2.0 许可见仓库根目录 LICENSE-APACHE。二、两套夹具的目录结构对比从仓库实际内容看两套夹具呈现了 LeRobot v2 与 v3 两种截然不同的磁盘布局crates/store/re_importer/tests/assets/lerobot/ ├── v21_apple_storage/ # LeRobot v2.1 │ ├── README.md │ ├── data/ │ │ └── chunk-000/ │ │ ├── episode_000000.parquet │ │ ├── episode_000001.parquet │ │ └── episode_000002.parquet │ ├── meta/ │ │ ├── episodes.jsonl # 每个 episode 的任务与帧数 │ │ ├── episodes_stats.jsonl │ │ ├── info.json # 数据集总览与 features 定义 │ │ └── tasks.jsonl # 任务定义 │ └── videos/ │ └── chunk-000/ │ └── observation.image/ │ ├── episode_000000.mp4 │ ├── episode_000001.mp4 │ └── episode_000002.mp4 └── v30_apple_storage/ # LeRobot v3.0 ├── README.md ├── data/ │ └── chunk-000/ │ └── file-000.parquet ├── meta/ │ ├── episodes/ │ │ └── chunk-000/ │ │ └── file-000.parquet # v3 将 episode 元数据也存为 Parquet │ ├── info.json │ ├── stats.json │ └── tasks.parquet └── videos/ └── observation.image/ └── chunk-000/ └── file-000.mp4这正好印证了 datasetv2.rs 与 datasetv3.rs 中对两种格式的文档化描述v2meta/下使用episodes.jsonl、tasks.jsonl、info.json、stats.json等 JSON/JSONL 文本元数据数据文件以episode_{episode_index:06d}.parquet命名v3meta/episodes/下的 episode 元数据本身也是 Parquet 文件file-*.parquettasks.parquet取代tasks.jsonl并新增stats.json存放特征统计。在源码中版本识别正是依据这些布局差异is_v3_lerobot_dataset要求存在非空的meta、data子目录且meta/episodes为目录is_v2_lerobot_dataset要求存在非空的meta、data无meta/episodesis_v1_lerobot_dataset则检查meta_data目录见 lib.rs。三、meta/info.json两代格式的特征定义对比meta/info.json是数据集的核心描述文件其中features字段声明了每个数据流的dtype、shape与names。两套夹具的 features 完全一致因为源自同一上游数据集但格式细节体现了 v2→v3 的演进字段v21_apple_storagev2.1v30_apple_storagev3.0codebase_versionv2.1v3.0robot_typereachy2reachy2total_episodes33total_frames1498314983total_chunks1缺省chunks_size10001000fps3030data_pathdata/chunk-{episode_chunk:03d}/episode_{episode_index:06d}.parquetdata/chunk-{chunk_index:03d}/file-{file_index:03d}.parquetvideo_pathvideos/chunk-{episode_chunk:03d}/{video_key}/episode_{episode_index:06d}.mp4videos/{video_key}/chunk-{chunk_index:03d}/file-{file_index:03d}.mp4特征级fps无每个特征带fps字段data_files_size_in_mb/video_files_size_in_mb无100/500features中包含以下数据流两套一致observation.statefloat32shape[19]——机器人状态向量Reachy2 的 19 维关节/状态actionfloat32shape[19]——动作向量observation.imagevideoshape[3, 240, 320]names: [channel, height, width]——观察视频流其info子对象记录了video.fps: 30.0、video.height: 240、video.width: 320、video.channels: 3、video.codec: h264、video.pix_fmt: yuv420p、video.is_depth_map: false、has_audio: falsetimestampfloat32shape[1]frame_indexint64shape[1]episode_indexint64shape[1]indexint64shape[1]task_indexint64shape[1]。关于names字段lib.rs 指出它可以有多种形态单个字符串如img_state_delta、扁平数组如[height,width,channel]、嵌套数组或单键对象如{axes: [x,y,z]}并有对应的反序列化测试test_deserialize_*系列保证兼容。Feature::channel_dim()会优先寻找名为channels的维度否则回退到 shape 最后一维——这解释了为什么observation.image的 channel 维能正确解析为 3。episodes.jsonlv2.1 夹具每行一个 episode例如{episode_index: 0, tasks: [place the apple in the plate], length: 299} {episode_index: 1, tasks: [place the apple in the plate], length: 300} {episode_index: 2, tasks: [place the apple in the plate], length: 300}tasks.jsonl定义任务索引到描述的映射{task_index: 0, task: place the apple in the plate}。四、视频文件的转码规则320×240 H.264这是本 README 中信息量最大的工程细节。夹具中的视频并非上游原始文件而是经过有损转码处理以压缩仓库体积Parquet 与 MP4 载荷通过 Git LFS 存储。转码规则如下分辨率统一为 320×240编码器FFmpeg 的libx264质量CRF 32较高压缩比画质损失可接受足以验证导入链路GOP30 帧一组30-frame group of pictures与 30 fps 的数据节奏对齐保证每个关键帧周期内都有 I 帧可供随机访问/帧级定位。同时 README 明确了三条不变约束transcoding 不得破坏的语义视频的帧率frame rate、帧数frame count、时长duration与上游快照保持一致每个meta/info.json中对应的尺寸dimensions字段已同步更新为 320×240observation.image的 feature 定义中video.height: 240、video.width: 320、video.fps: 30.0与转码产物一一对应。这些约束对导入器至关重要re_lerobot依赖meta/info.json的video_path模板来定位视频文件见 datasetv2.rs 的video_path()它把{episode_chunk:03d}、{episode_index:06d}、{video_key}占位符替换为实际路径并将视频作为AssetVideo类型的 feature 载入如果视频实际尺寸与元数据不符下游可视化与时间轴对位都会出错。五、这些夹具如何在测试中被使用夹具的唯一消费方是re_importer中的导入器测试。核心测试位于 importer_lerobot.rsimports_real_v2_and_v3_datasets_into_one_recording_per_episode同时遍历v21_apple_storage与v30_apple_storage断言版本探测正确——LeRobotDatasetVersion::find_version分别返回V2与V3导入产生三个 recordingID 依次为episode_0、episode_1、episode_2每个 recording 内都必须包含实体路径/__properties、/action、/observation.state、/observation.image、/task。这条断言链覆盖了从目录识别 → 元数据解析 → episode 枚举 → Parquet 读取 → 视频引用 → 任务文本解析 → chunk 构建 → 按 episode 分 recording 流式发送的完整链路。实体路径中的/task来自task_index列到任务文本的解析datasetv2.rs 将DType::Int64的task_index特征映射为task实体上的文本/observation.image则来自video类型特征。底层行为契约由 common.rs 的LeRobotDatasetOpstrait 定义仅包含两个方法iter_episode_indices()枚举全部 episode 索引与load_episode_chunks()加载单个 episode 的 chunks。导入器 importer_lerobot.rs 的load_and_stream_versioned则保证两阶段协议先按 episode 升序为每个 episode 发送一个SetStoreInfo再流式发送 chunk 数据即一个 episode 一个 recording。从导入器的结构看importer_lerobot.rsv1.x 格式会被显式拒绝LeRobot v1.x dataset format is unsupported只有 v2/v3 走加载流程这也与夹具只覆盖 v2.1 与 v3.0 两个版本的事实相互印证——测试夹具刻意覆盖了导入器支持的全部版本区间。六、把测试夹具当作你自己的 LeRobot 数据集参考除了服务 CI 测试这两套夹具本身就是学习 LeRobot 数据集格式的最小可用样例。如果你正在准备一份自定义的 LeRobot 数据集并用 Rerun 导入可以对照它们自查目录骨架必须存在非空的meta与data目录v3 还需meta/episodes/否则 is_v2/v3_lerobot_dataset 无法识别你的数据集路径模板meta/info.json中的data_path/video_path模板占位符{episode_chunk:03d}、{episode_index:06d}、{chunk_index:03d}、{file_index:03d}、{video_key}必须与实际文件布局一致时间列Parquet 中至少要有frame_index整型序列时间线或timestamp浮点秒数转换为时长时间线之一否则 derive_timeline 会报错特征类型支持范围目前仅video、image1/3 通道、float32、float64与task_index被完整支持int16/int64/bool/string会以警告跳过datasetv2.rsv2 的language类型会被直接拒绝对应测试test_v2_language_dtype_is_rejectedv3 则支持任务/子任务/语言文本的解析忽略列episode_index、index、frame_index、timestamp这四列不参与可视化common.rs 的LEROBOT_DATASET_IGNORED_COLUMNS。在具备 LeRobot 数据加载能力的 Rerun 版本中直接用rerun打开或导入包含上述结构的目录即可触发rerun.importers.LeRobotDataset导入器导入器名称见 importer_lerobot.rs。需要留意的是本仓库的测试夹具仅为验证而裁剪3 个 episode、视频被压到 320×240真实生产数据集通常体积更大视频建议使用 H.264 编码并保持与meta/info.json元数据一致。【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价