LeRobot documentation
Переименовать карты и пустые камеры
Переименовать карты и пустые камеры
При обучении, оценке или записи с использованием роботизированной политики ваш датасет или среда предоставляет наблюдения по одному набору ключей (например, observation.images.front, observation.images.eagle), тогда как ваша политика ожидает другой (например, observation.images.image, observation.images.image2). Карта переименования устраняет это расхождение без изменения политики или источника данных.
Область применения: Карта переименований переименовывает только ключи observation (изображения и состояние). Ключи действий не затрагиваются.
Почему ключи наблюдений не всегда совпадают
У политик есть фиксированный набор имён входных признаков, зашитый в их предобученную конфигурацию. Например:
- pi0fast-libero ожидает
observation.images.base_0_rgbиobservation.images.left_wrist_0_rgb. - xvla-base ожидает
observation.images.image,observation.images.image2иobservation.images.image3.
Ваш набор данных может использовать совершенно другие имена (например, observation.images.front, observation.images.eagle, observation.images.glove), а среда оценки — ещё один набор. Вместо того чтобы редактировать конфигурацию политики или переименовывать столбцы в наборе данных, вы передаёте карту переименования: JSON-словарь, который сопоставляет исходные ключи с ключами, ожидаемыми политикой. Переименование происходит внутри конвейера препроцессора, поэтому политика всегда видит ожидаемые ею ключи.
Использование карты переименования
Передайте отображение в виде JSON-строки в командной строке. Соглашение всегда следующее:
--rename_map='{"source_key": "policy_key", ...}'где source_key — это то, что предоставляет набор данных или среда, а policy_key — то, что ожидает политика.
Переименовываются только перечисленные ключи; все остальные передаются без изменений. Порядок записей не имеет значения.
Поддерживаемые политики: PI0, PI05, PI0Fast, SmolVLA и XVLA.
Обучение
Допустим, вы дообучаете lerobot/xvla-base на наборе данных с изображениями в observation.images.front, observation.images.eagle и observation.images.glove. XVLA ожидает observation.images.image, observation.images.image2 и observation.images.image3:
lerobot-train \
--dataset.repo_id=YOUR_DATASET \
--output_dir=./outputs/xvla_training \
--job_name=xvla_training \
--policy.path="lerobot/xvla-base" \
--policy.repo_id="HF_USER/xvla-your-robot" \
--policy.dtype=bfloat16 \
--policy.action_mode=auto \
--steps=20000 \
--policy.device=cuda \
--policy.freeze_vision_encoder=false \
--policy.freeze_language_encoder=false \
--policy.train_policy_transformer=true \
--policy.train_soft_prompts=true \
--rename_map='{"observation.images.front": "observation.images.image", "observation.images.eagle": "observation.images.image2", "observation.images.glove": "observation.images.image3"}'Оценка
Политика, ожидающая observation.images.base_0_rgb и observation.images.left_wrist_0_rgb (например, pi0fast-libero), но среда LIBERO возвращает observation.images.image и observation.images.image2:
lerobot-eval \
--policy.path=lerobot/pi0fast-libero \
--env.type=libero \
... \
--rename_map='{"observation.images.image": "observation.images.base_0_rgb", "observation.images.image2": "observation.images.left_wrist_0_rgb"}'Альтернатива: отредактируйте конфигурацию политики напрямую
Если вы всегда используете один и тот же набор данных или среду, вы можете изменить config.json политики, чтобы ключи наблюдений соответствовали вашему источнику данных. Тогда карта переименований не потребуется.
Компромисс: изменение конфигурации политики привязывает её к одному источнику данных. Карта переименований позволяет использовать одну политику для множества наборов данных и сред.
Пустые камеры: меньше видов, чем ожидает политика
Некоторые политики рассчитаны на фиксированное количество входных изображений. Если в вашем наборе данных меньше камер, вы можете указать empty_cameras в конфигурации политики, вместо того чтобы изменять архитектуру модели.
Как это работает
Установка empty_cameras=N добавляет N плейсхолдерных признаков изображений в конфигурацию политики, с именами:
observation.images.empty_camera_0
observation.images.empty_camera_1
...Во время выполнения этим ключам не соответствует никаких данных в батче. Политика заполняет их маскированными тензорами-заглушками (для визуальных энкодеров на базе SigLIP — с паддингом -1 и нулевой маской внимания), поэтому дополнительные слоты изображений фактически игнорируются при обучении и инференсе.
Пример
XVLA-base имеет три визуальных входа, и по умолчанию empty_cameras=0. В вашем наборе данных только две камеры:
- Установите
--policy.empty_cameras=1. - Конфигурация добавляет третий ключ:
observation.images.empty_camera_0. - Используйте карту переименований для ваших двух реальных камер, как обычно.
- Третий слот маскируется — в вашем наборе данных не нужны поддельные изображения.
Быстрая справка
| Цель | Что делать |
|---|---|
| Ключи набора данных ≠ ключи политики | --rename_map='{"dataset_key": "policy_key", ...}' |
| Ключи окружения ≠ ключи политики (оценка) | --rename_map='{"env_key": "policy_key", ...}' |
| Rollout с разными ключами (инференс) | --rename_map='{"source_key": "policy_key", ...}'. |
| Меньше камер, чем ожидает политика | --policy.empty_cameras=N (поддерживается в PI0, PI05, PI0Fast, SmolVLA, XVLA) |
| Избегайте передачи карты переименования | Отредактируйте config.json политики так, чтобы её ключи соответствовали вашему источнику данных |