i4h Workflow — Convert Dataset
Purpose
Convertir un enregistrement HDF5 agentique en dataset LeRobot (parquet + meta + vidéos). À utiliser quand l'utilisateur demande de convertir HDF5, de préparer pour l'entraînement ou d'exporter vers LeRobot.
Base Code
Ces étapes pilotent le code base i4h-workflows (l'arborescence workflows/agentic/). Pour réutiliser un checkout existant, définissez I4H_WORKFLOWS sur son chemin (aucun clone ne se produit). Sinon, cela résout le repo courant ou clone vers ~/i4h-workflows — choisissez cette valeur par défaut sans demander. Exécutez chaque commande ci-dessous depuis la racine résolue :
# Resolve the i4h-workflows base code (provides workflows/agentic/).
ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"
if [ ! -d "$ROOT/workflows/agentic" ]; then
ROOT="${I4H_WORKFLOWS:-$HOME/i4h-workflows}"
[ -d "$ROOT/workflows/agentic" ] || git clone https://github.com/isaac-for-healthcare/i4h-workflows "$ROOT"
fi
export I4H_WORKFLOWS="$ROOT"; cd "$ROOT"
Basics
- Utilisez le même
--envqui a produit le HDF5. - Env config (source de vérité) :
workflows/agentic/config/environments/<env>.yamlfournit le robot, la tâche, les caméras et les valeurs par défaut du converteurdataset.*(noms d'action/état, splits, modalité). - La sortie va dans
HF_LEROBOT_HOME/<repo-id>.
Run
Exécutez les étapes ci-dessous dans l'ordre. Chaque étape est un appel bash distinct ; les variables persistent dans la session tmux de l'agent local.
Step 1 — setup and resolve HDF5
REPO_ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"; [ -d "$REPO_ROOT/workflows/agentic" ] || REPO_ROOT="$HOME/i4h-workflows"
ENV_ID=scissor_pick_and_place
RUNS_ROOT="${REPO_ROOT}/workflows/agentic/runs"
# Point HDF5_PATH at a real recording (absolute path). Recordings come from teleop, mimic, or
# validate (which writes data/verify.hdf5 under each runs/eval_* dir). List candidates newest-first:
# find "${RUNS_ROOT}" -name '*.hdf5' -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort -r | head
HDF5_PATH="${HDF5_PATH:-}"
if [ ! -f "${HDF5_PATH}" ]; then
echo "convert: set HDF5_PATH to an existing .hdf5 (got '${HDF5_PATH:-<unset>}'). Candidates:" >&2
find "${RUNS_ROOT}" -name '*.hdf5' -printf '%TY-%Tm-%Td %TH:%TM %p\n' 2>/dev/null | sort -r | head
exit 1
fi
RUN_DIR="${RUNS_ROOT}/convert_${ENV_ID}_$(date +%Y%m%d_%H%M%S)"
mkdir -p "${RUN_DIR}/logs"
ln -sfn "${RUN_DIR}" "${RUNS_ROOT}/.latest"
export HF_LEROBOT_HOME="${RUN_DIR}/lerobot"
Step 2 — convert
"${REPO_ROOT}/workflows/agentic/dataset/run.sh" \
--env "${ENV_ID}" \
--hdf5-path "${HDF5_PATH}" \
--repo-id "local/${ENV_ID}" \
--video-codec h264 \
--overwrite \
2>&1 | tee "${RUN_DIR}/logs/convert.log"
Notes
--video-codec h264est obligatoire. Le codec AV1 par défaut du converteur casse le lecteur vidéodecordde GR00T au moment du finetune.- Scissor SO-ARM génère
meta/modality.jsonà partir des splits YAML et n'a pas besoin dedataset.modality_template_path. - G1 locomanip et assemble-trocar utilisent
dataset.modality_template_pathdu YAML env. - Tous les flux caméra sont redimensionnés à la taille
policy.image_sizedu YAML env (redéfinissez avec--image-size H W), normalisant les caméras à résolution mixte (par ex. caméra frontale + caméra d'aperçu) à l'unique taille que la config de modalité attend.
Verify
${HF_LEROBOT_HOME}/local/${ENV_ID}/meta/info.jsonexiste.- Le log rapporte le nombre d'épisodes sauvegardés.
- Les fichiers vidéo par épisode sont présents sous
${HF_LEROBOT_HOME}/local/${ENV_ID}/.
Prerequisites
- Workflow configuré via [[i4h-workflow-setup]] (le
.venvdoit exister). - Un enregistrement HDF5 existant à convertir (définissez
HDF5_PATHsur un chemin absolu ; le bloc Run liste les candidats s'il est non défini ou incorrect). - Le même
--envqui a produit le HDF5 (son YAML fournit les valeurs par défaut du robot, de la tâche, de la caméra, de la modalité et du converteur). HF_LEROBOT_HOMEdéfini à l'emplacement de sortie pour<repo-id>.
Limitations
--video-codec h264est obligatoire ; le codec AV1 par défaut du converteur casse le lecteurdecordde GR00T au moment du finetune.- Tous les flux caméra sont redimensionnés à la taille
policy.image_sizedu YAML env (redéfinissez avec--image-size H W). - G1 locomanip et assemble-trocar requièrent
dataset.modality_template_pathdu YAML env ; scissor SO-ARM génèremeta/modality.jsonà partir des splits YAML.
Troubleshooting
- Error:
.venvnot found / module import fails - Cause: workflow not set up. Fix: run [[i4h-workflow-setup]] first. - Error: input HDF5 not found - Cause: wrong or missing
--hdf5-path. Fix: pointHDF5_PATHat an existing recording. - Error:
decordfails to read video at finetune time - Cause: dataset written with the default AV1 codec. Fix: re-convert with--video-codec h264. - Error: missing/incorrect modality config - Cause: wrong
--env, so robot/task/camera/modality defaults do not match the HDF5. Fix: use the same--envthat produced the recording.
Final Response
Signalez le HDF5 source, le chemin du dataset, le repo id, le nombre d'épisodes, les épisodes ignorés ou échoués.