跳到主要内容

用 HDF5 数据集训练

平台导出的 HDF5 数据集由平台之外的训练框架读取。接入训练前需完成数据准备、字段读取与结构校验。

适用角色与前提​

角色与关注点​

角色关注点
算法工程师字段形状、帧对齐、训练框架接入
训练运维数据集挂载、显存与磁盘占用

使用前提​

项要求
数据集已完成 HDF5 导出并下载归档,结构见 HDF5 数据集
文件解压后包含 chunk_*.hdf5
字段每个 episode 至少含 action 与 observation.state
运行环境Python 环境含 h5py、numpy,以及目标框架(PyTorch、TensorFlow、JAX 之一)
图像解码可解码 JPEG(Pillow、OpenCV 或 torchvision)
资源训练机磁盘可容纳解压后的分块文件与 checkpoint

操作步骤​

  1. 解压归档,确认全部分块文件位于同一目录。
  2. 打开一个分块文件,读取 data 下的 episode 列表与各数据集形状,核对与 HDF5 数据集 的字段表和形状一致。
import h5py

with h5py.File("chunk_001.hdf5", "r") as f:
for episode_name in f["data"]:
episode = f[f"data/{episode_name}"]
print(episode_name, episode.attrs["task"].decode())
for key in episode:
print(" ", key, episode[key].shape, episode[key].dtype)
  1. 建立 (分块文件路径, episode 名) 索引,避免每个 epoch 重新扫描文件。
  2. 按 episode 划分训练集与验证集,同一分块文件不跨集合,避免同源样本泄漏。
  3. 读取时对 observation.images.* 逐帧 JPEG 解码,并与 action、observation.state、observation.gripper 按帧下标对齐。
  4. 将 episode 封装为目标框架的数据集对象,按批输出图像张量与状态、动作向量。
  5. 读取 task、task_zh、score 属性,用于按任务或质量筛选样本。

最小加载器示例:

import io
import h5py
import numpy as np
import torch
from PIL import Image
from torch.utils.data import Dataset

class Hdf5EpisodeDataset(Dataset):
def __init__(self, files, transform=None):
self.index = []
self.transform = transform
for path in files:
with h5py.File(path, "r") as f:
self.index += [(path, name) for name in f["data"]]

def __len__(self):
return len(self.index)

def __getitem__(self, i):
path, name = self.index[i]
with h5py.File(path, "r") as f:
ep = f[f"data/{name}"]
images = [Image.open(io.BytesIO(frame.tobytes()))
for frame in ep["observation.images.camera_01"][:]]
if self.transform:
images = [self.transform(img) for img in images]
return {
"images": torch.stack(images),
"state": torch.as_tensor(np.asarray(ep["observation.state"][:]), dtype=torch.float32),
"action": torch.as_tensor(np.asarray(ep["action"][:]), dtype=torch.float32),
"task": ep.attrs["task"].decode(),
}

结果校验​

校验项方法通过标准
文件完整列出解压目录内的分块文件命名连续,无缺号
字段齐全遍历 data 下各 episode含 action、observation.state,且含至少一个 observation.images.*
形状一致读取各数据集 shape各数据集首维等于该 episode 的帧数
图像可解码抽样 observation.images.* 元素JPEG 解码成功
帧对齐比较 action 与 observation.state 的行数行数相等

异常处置​

现象可能原因处置责任方
文件无法打开下载中断或解压不完整重新下载并核对文件大小使用者
缺少 observation.gripper导出源无夹爪话题训练时忽略该字段,或在动作维度配置中去除算法工程师
图像解码失败该帧为原始数组而非 JPEG按 uint8 数组自行解码,或剔除该帧算法工程师
各数据集帧数不一致sidecar JSON 子任务区间与消息时间不对齐以 action 的时间戳为准重采样算法工程师
显存不足单批加载图像过多降低批大小或降低图像分辨率算法工程师
训练指标不收敛帧率抽样过低或状态与动作错位提高导出 hz,检查话题映射与帧对齐算法工程师

相关页面​