LeRobot documentation
Наборы данных
Наборы данных
LeRobotDataset — это формат, который используют все скрипты LeRobot для чтения и записи. Он учитывает эпизоды, декодирует видеонаблюдения на лету и поддерживает обратную передачу в Hugging Face Hub.
См. Использование LeRobotDataset для формата и общих операций, Перенос больших наборов данных для миграции и Инструменты для CLI.
LeRobotDataset
класс lerobot.datasets.LeRobotDataset
< source >( repo_id: strroot: str | pathlib.Path | None = Noneepisodes: list[int] | None = Noneepisode_filter: collections.abc.Callable[[dict], bool] | None = Noneimage_transforms: collections.abc.Callable | None = Nonedelta_timestamps: dict[str, list[float]] | None = Nonetolerance_s: float = 0.0001revision: str | None = Noneforce_cache_sync: bool = Falsedownload_videos: bool = Truevideo_backend: str | None = Nonereturn_uint8: bool = Falsedepth_output_unit: str = 'mm'batch_encoding_size: int = 1rgb_encoder: lerobot.configs.video.RGBEncoderConfig | None = Nonedepth_encoder: lerobot.configs.video.DepthEncoderConfig | None = Noneencoder_threads: int | None = Nonestreaming_encoding: bool = Falseencoder_queue_maxsize: int = 30repo_type: str = 'dataset'token: str | bool | None = Nonevideo_decoder_cache_size: int | None = None )
add_frame
< source >( frame: dict )
Добавьте один кадр в текущий буфер эпизода.
Делегирует вызов в DatasetWriter.add_frame. Набор данных должен находиться в режиме записи (создан с помощью create или resume).
clear_episode_buffer
< source >( delete_images: bool = True )
Отбросить текущий буфер эпизода без сохранения.
Делегирует вызов в DatasetWriter.clear_episode_buffer. Полезно для удаления неудачной или прерванной записи эпизода.
Удалите преобразование, применённое к визуальным наблюдениям.
create
< source >( repo_id: strfps: intfeatures: dictroot: str | pathlib.Path | None = Nonerobot_type: str | None = Noneuse_videos: bool = Truetolerance_s: float = 0.0001image_writer_processes: int = 0image_writer_threads: int = 0video_backend: str | None = Nonebatch_encoding_size: int = 1rgb_encoder: lerobot.configs.video.RGBEncoderConfig | None = Nonedepth_encoder: lerobot.configs.video.DepthEncoderConfig | None = Nonemetadata_buffer_size: int = 10streaming_encoding: bool = Falseencoder_queue_maxsize: int = 30encoder_threads: int | None = Nonevideo_files_size_in_mb: int | None = Nonedata_files_size_in_mb: int | None = None )
Параметры
- repo_id — Идентификатор репозитория, обычно
'{hf_user}/{dataset_name}'. - fps — Количество кадров в секунду, используемое при сборе данных.
- features — словарь спецификации признаков, сопоставляющий имена признаков с их метаданными типа/формы.
- root — Локальная директория для хранения набора данных. По умолчанию
$HF_LEROBOT_HOME/{repo_id}. - robot_type — Необязательная строка с типом робота, хранящаяся в метаданных.
- use_videos — если
True, визуальные модальности сохраняются в формате MP4-видео. ЕслиFalse, они сохраняются в виде изображений. - tolerance_s — Допустимое отклонение синхронизации временных меток в секундах.
- image_writer_processes — Количество подпроцессов для асинхронной записи изображений.
0означает использование только потоков. - image_writer_threads — Количество потоков для асинхронной записи изображений.
- video_backend — Бэкенд декодирования видео (используется при чтении обратно).
- batch_encoding_size — количество эпизодов, накапливаемых перед пакетным кодированием видео.
1означает немедленное кодирование. - rgb_encoder — Настройки видеокодирования для камер (кодек, качество и т. д.).
Если
None, используетсяrgb_encoder_defaults(). - depth_encoder — Настройки видеокодека для камер глубины (кодек, качество и т. д.).
Если
None, используетсяdepth_encoder_defaults(). - encoder_threads — количество потоков кодировщика (глобально).
Noneпозволяет кодеку принимать решение. - metadata_buffer_size — количество записей метаданных эпизодов, которые буферизуются перед записью в parquet.
- streaming_encoding — Если
True, кадры видео кодируются в реальном времени во время захвата, а не записываются сначала как изображения. - encoder_queue_maxsize — Максимальное количество буферизованных кадров на камеру при использовании потокового кодирования.
Создайте новый LeRobotDataset с нуля для записи данных.
Возвращает набор данных в режиме записи с активным DatasetWriter. Используйте add_frame / save_episode для заполнения, а затем finalize по завершении.
Очистите все ожидающие операции и закройте писатели.
Должен вызываться после сбора/конвертации данных, иначе метаданные футера не будут записаны в файлы parquet, и набор данных окажется недействительным.
Идемпотентный — безопасен для многократного вызова. del в DatasetWriter служит страховкой на случай, если этот метод не был вызван явно.
Получить необработанный кадр без применения преобразований изображения.
В отличие от __getitem__, этот метод возвращает исходную строку датасета HF с указанным индексом без расширения по дельта-времени, декодирования видео или преобразований изображений.
Проверьте, есть ли несохранённые кадры в буфере эпизода.
push_to_hub
< source >( branch: str | None = Nonetags: list | None = Nonelicense: str | None = 'apache-2.0'tag_version: bool = Truepush_videos: bool = Trueprivate: bool | None = Noneallow_patterns: list[str] | str | None = Noneupload_large_folder: bool = False**card_kwargs )
Параметры
- branch — Необязательная ветка для отправки. Если она не существует, будет создана из текущего ревизии.
- tags — Необязательный список тегов для карточки набора данных.
- license — Идентификатор лицензии для карточки набора данных.
- tag_version — Если
True, создаёт Git-тег для текущей версии кодовой базы. - push_videos — если
False, пропустить загрузку каталогаvideos/. - private — Если
True, создаётся приватный репозиторий. ЕслиNone(значение по умолчанию), используется настройка по умолчанию для организации на Hub (влияет только на организации). - allow_patterns — глобальный шаблон (или шаблоны), ограничивающий, какие файлы загружать.
- upload_large_folder — оставлено для обратной совместимости и игнорируется.
upload_folderобрабатывает наборы данных любого размера. - **card_kwargs — Дополнительные именованные аргументы, передаваемые при создании карточки набора данных.
Загрузите набор данных в Hugging Face Hub.
Создаёт репозиторий, если он не существует, загружает все файлы набора данных (по желанию, исключая видео), генерирует карточку набора данных и помечает ревизию текущей версией кодовой базы.
resume
< source >( repo_id: strroot: str | pathlib.Path | None = Nonetolerance_s: float = 0.0001revision: str | None = Noneforce_cache_sync: bool = Falsevideo_backend: str | None = Nonebatch_encoding_size: int = 1rgb_encoder: lerobot.configs.video.RGBEncoderConfig | None = Nonedepth_encoder: lerobot.configs.video.DepthEncoderConfig | None = Noneencoder_threads: int | None = Noneimage_writer_processes: int = 0image_writer_threads: int = 0streaming_encoding: bool = Falseencoder_queue_maxsize: int = 30token: str | bool | None = None )
Параметры
- repo_id — Идентификатор репозитория существующего набора данных.
- root — Локальный каталог набора данных. Если указан, загрузки из Hub материализуются непосредственно в этот каталог. Если не указан, загрузки из Hub используют кэш снимков, безопасный для ревизий, в каталоге
$HF_LEROBOT_HOME/hub. - tolerance_s — Допустимое отклонение синхронизации временных меток в секундах.
- revision — ревизия Git (ветка, тег или хэш коммита). По умолчанию используется тег текущей версии кодовой базы.
- force_cache_sync — Если
True, повторно скачивает метаданные с Hub, даже если локальный кэш существует. - video_backend — Бэкенд декодирования видео для чтения данных.
- batch_encoding_size — количество эпизодов, накапливаемых перед пакетным кодированием видео.
- rgb_encoder — Настройки видеокодирования для камер (кодек, качество и т. д.).
Если
None, используетсяrgb_encoder_defaults(). - depth_encoder — Настройки видеокодека для камер глубины (кодек, качество и т. д.).
Если
None, используетсяdepth_encoder_defaults(). - encoder_threads — количество потоков кодировщика (глобально).
Noneпозволяет кодеку принимать решение. - image_writer_processes — Подпроцессы для асинхронной записи изображений.
- image_writer_threads — Потоки для асинхронной записи изображений.
- streaming_encoding — Если
True, кодирует видео в реальном времени во время захвата. - encoder_queue_maxsize — Максимальное количество буферизованных кадров на камеру для потоковой передачи.
- token — токен аутентификации, используемый при необходимости загрузки метаданных с Hub. Токен не сохраняется в экземпляре набора данных.
Возобновить запись в существующий набор данных.
Загружает метаданные из существующего набора данных (локального или из Hub) и создаёт DatasetWriter для добавления новых эпизодов. Базовый набор данных HF не загружается, пока не будет вызван finalize и данные не будут прочитаны.
save_episode
< source >( episode_data: dict | None = Noneparallel_encoding: bool = True )
Параметры
- episode_data — Необязательный заранее созданный словарь эпизода. Если
None, используется внутренний буфер эпизода, заполняемый методомadd_frame. - parallel_encoding — Если
Trueи существует несколько камер, кодирует видео параллельно с использованием пула процессов.
Исключения
RuntimeError
RuntimeError— если набор данных доступен только для чтения (нет писателя).
Сохранить текущий буфер эпизода на диск.
Делегирует вызов в DatasetWriter.save_episode. Кодирует видео, записывает данные в parquet и обновляет метаданные. После этого буфер эпизодов сбрасывается.
Выберите конкретные столбцы из базового набора данных.
Полезно для извлечения последовательностей действий во время воспроизведения без загрузки всех признаков.
Возвращает datasets.Dataset, содержащий только запрошенные столбцы.
Замените преобразование, применяемое к визуальным наблюдениям.
LeRobotDatasetMetadata
класс lerobot.datasets.LeRobotDatasetMetadata
< source >( repo_id: strroot: str | pathlib.Path | None = Nonerevision: str | None = Noneforce_cache_sync: bool = Falsemetadata_buffer_size: int = 10repo_type: typing.Literal['dataset', 'bucket'] = 'dataset'token: str | bool | None = None )
Контейнер метаданных для набора данных LeRobot.
Управляет файлами info.json, stats.json, tasks.parquet и episodes/ в формате parquet, которые описывают структуру, содержимое и статистику набора данных.
create
< source >( repo_id: strfps: intfeatures: dictrobot_type: str | None = Noneroot: str | pathlib.Path | None = Noneuse_videos: bool = Truemetadata_buffer_size: int = 10chunks_size: int | None = Nonedata_files_size_in_mb: int | None = Nonevideo_files_size_in_mb: int | None = None )
Параметры
- repo_id — Идентификатор репозитория (например,
'user/my_dataset'). - fps — Количество кадров в секунду, используемое при сборе данных.
- features — словарь спецификации признаков, сопоставляющий имена признаков с их метаданными типа/формы.
- robot_type — Необязательная строка с типом робота, хранящаяся в метаданных.
- root — Локальная директория для набора данных. По умолчанию
$HF_LEROBOT_HOME/{repo_id}. Директория не должна существовать. - use_videos — если
True, визуальные модальности кодируются в виде MP4-видео. - metadata_buffer_size — количество записей метаданных эпизодов, которые буферизуются перед записью в parquet.
- chunks_size — максимальное количество файлов в каталоге чанка.
Noneиспользует значение по умолчанию. - data_files_size_in_mb — максимальный размер файла parquet в МБ.
Noneиспользует значение по умолчанию. - video_files_size_in_mb — максимальный размер видеофайла в МБ.
Noneиспользует значение по умолчанию.
Создайте метаданные для нового набора данных LeRobot с нуля.
Инициализирует файл info.json на диске с предоставленной схемой признаков и настройками набора данных. Данные эпизодов пока не записываются.
Гарантируйте, что метаданные полностью загружены для операций чтения.
Идемпотентность — если метаданные уже находятся в памяти, это просто проверка is None. Вызывайте этот метод перед переходом от режима записи к режиму чтения в том же экземпляре.
filter_episodes
< source >( predicate: Callablecandidates: list[int] | None = None )
Фильтруйте эпизоды, метаданные которых удовлетворяют заданному предикату.
Очистить буфер метаданных и закрыть паркет-записыватель.
Идемпотентный — безопасно вызывать несколько раз.
Получить текущие настройки размера фрагмента и файла.
get_data_file_path
< source >( ep_index: int )
Возвращает относительный путь к файлу parquet для указанного индекса эпизода.
По заданной задаче на естественном языке возвращает её task_index, если такая задача уже существует в наборе данных, иначе возвращает None.
get_video_file_path
< source >( ep_index: intvid_key: str )
Параметры
- ep_index — Индекс эпизода, начинающийся с нуля.
- vid_key — ключ признака, идентифицирующий видеопоток
(например,
'observation.images.laptop').
Исключения
IndexError или ValueError
IndexError— еслиep_indexвыходит за пределы диапазона.ValueError— если в наборе данных нет видео (отсутствует шаблонvideo_path).
Возвращает относительный путь к файлу видео для указанной серии и ключа видео.
Масштабируйте статистику признаков глубины на месте из их записанной единицы в output_unit.
Статистика глубины хранится в единицах, в которых были записаны кадры (features[key]["info"]["depth_unit"]), тогда как при чтении кадры возвращаются в output_unit. Это преобразует записи статистики с указанием единиц, чтобы статистика соответствовала кадрам, которые видят потребители.
save_episode
< source >( episode_index: intepisode_length: intepisode_tasks: listepisode_stats: dictepisode_metadata: dict )
Параметры
- episode_index — Индекс эпизода, сохраняемого в данный момент, начиная с нуля.
- episode_length — Количество кадров в этом эпизоде.
- episode_tasks — список описаний задач для этого эпизода.
- episode_stats — Статистика по каждой характеристике для этого эпизода.
- episode_metadata — Дополнительные метаданные (индексы чанков/файлов, диапазоны кадров, временные метки видео и т. д.).
Сохраняйте метаданные эпизода, обновляйте информацию о наборе данных и агрегируйте статистику.
Записывает метаданные эпизода в буферизованный паркет-райтер, увеличивает счётчики общего числа эпизодов/кадров в info.json и объединяет статистику эпизода с накопленной статистикой набора данных.
save_episode_tasks
< source >( tasks: list )
Зарегистрируйте задачи для текущего эпизода и сохраните их на диске.
Новые задачи, которые ещё не существуют в наборе данных, получают последовательные индексы задач и добавляются в файл задач в формате parquet.
update_chunk_settings
< source >( chunks_size: int | None = Nonedata_files_size_in_mb: int | None = Nonevideo_files_size_in_mb: int | None = None )
Параметры
- chunks_size — Максимальное количество файлов в каталоге чанка. Если None, сохраняет текущее значение.
- data_files_size_in_mb — Максимальный размер файлов данных в формате parquet в МБ. Если значение равно None, сохраняется текущее значение.
- video_files_size_in_mb — Максимальный размер видеофайлов в МБ. Если None, сохраняет текущее значение.
Обновите настройки размера чанка и файла после создания набора данных.
Это позволяет пользователям настраивать организацию хранения без изменения конструктора. Эти параметры управляют тем, как эпизоды разбиваются на блоки, и максимальным размером файлов до создания новых.
update_video_info
< source >( video_key: str | None = Nonevideo_encoder: lerobot.configs.video.VideoEncoderConfig | None = Nonepreserve_keys: collections.abc.Iterable[str] | None = None )
Параметры
- video_key — если указано, обновляется только этот ключ видео. В противном случае обновляются все ключи видео в наборе данных.
- video_encoder — Конфигурация энкодера, используемая для создания видео. Если она указана, её поля записываются как записи
video.<field>наряду с записямиvideo.*, полученными из потока (см.get_video_info). - preserve_keys — ключи, значения которых сохраняются, а не пересчитываются.
None(по умолчанию) пересчитывает все ключи.
Заполните или обновите информацию о видео по каждому признаку в info.json.
Warning: эта функция записывает информацию из видео первого эпизода, неявно предполагая, что все видео были закодированы одинаково. Кроме того, это означает, что предполагается существование первого эпизода.
Всегда повторно анализирует видео и перезаписывает существующие данные для каждого пересчитанного ключа. preserve_keys содержит список ключей, значения которых необходимо сохранить (например, встроенные в данные записи, такие как is_depth_map и параметры квантования глубины), а не пересчитывать.
MultiLeRobotDataset
класс lerobot.datasets.MultiLeRobotDataset
< source >( repo_ids: listroot: str | pathlib.Path | None = Noneepisodes: dict | None = Noneimage_transforms: collections.abc.Callable | None = Nonedelta_timestamps: dict[str, list[float]] | None = Nonetolerances_s: dict | None = Nonedownload_videos: bool = Truevideo_backend: str | None = Nonetoken: str | bool | None = None )
Набор данных, состоящий из нескольких базовых LeRobotDataset.
Базовые LeRobotDataset фактически конкатенируются, и этот класс во многом повторяет структуру API LeRobotDataset.
Удалите transform из этого набора данных и его дочерних элементов.
Замените transform для этого набора данных и его дочерних элементов.
StreamingLeRobotDataset
класс lerobot.datasets.StreamingLeRobotDataset
< source >( repo_id: strroot: str | pathlib.Path | None = Noneepisodes: list[int] | None = Noneimage_transforms: collections.abc.Callable[[torch.Tensor], torch.Tensor] | None = Nonedelta_timestamps: dict[str, list[float]] | None = Nonetolerance_s: float = 0.0001revision: str | None = Noneforce_cache_sync: bool = Falsestreaming: bool | None = Nonebuffer_size: int = 1000max_num_shards: int = 16seed: int = 42rng: numpy.random._generator.Generator | None = Noneshuffle: bool = Truereturn_uint8: bool = Falsedepth_output_unit: str = 'mm'video_backend: str | None = Nonedata_root: str | pathlib.Path | None = Noneepisode_pool_size: int | None = Noneprefetch_episodes: int = 8byte_budget_gb: float = 8.0repeat: bool = Falserepo_type: typing.Literal['dataset', 'bucket'] = 'dataset'token: str | bool | None = Nonedecode_threads: int = 2decoded_queue_size: int = 8video_decoder_cache_size: int | None = Nonenative_http_connections: int | None = Nonenative_http_subranges: int = 1sidecar_lock_timeout_s: float = 1800sampling_strategy: lerobot.streaming.episode_pool.StreamingSamplingStrategy | str = <StreamingSamplingStrategy.REMAINING: 'remaining'> )
Потоковый читатель с областью видимости эпизода для наборов данных LeRobot.
Метаданные кэшируются локально, при этом каждый ранг читает только строки Parquet и диапазоны байтов MP4, необходимые для полных эпизодов, за которые он отвечает. При наличии N воркеров DataLoader каждый воркер владеет непересекающейся, сбалансированной по кадрам частью эпизодов ранга, имеет собственный пул эпизодов и 1/N от бюджета байтов. У каждого процесса есть собственный Python GIL, поэтому N воркеров декодируют и собирают образцы параллельно. Владельство эпизодов не пересекается, и каждый выбранный кадр возвращается ровно один раз за итерацию. MP4-файлы-спутники разрешаются автоматически и создаются в локальном кэше с ключом ревизии, если отсутствуют.
Пример:
Базовое использование:
from lerobot.datasets.streaming_dataset import StreamingLeRobotDataset
# Create a streaming dataset with delta timestamps
delta_timestamps = {
"observation.image": [-1.0, -0.5, 0.0], # 1 sec ago, 0.5 sec ago, current
"action": [0.0, 0.1, 0.2], # current, 0.1 sec future, 0.2 sec future
}
dataset = StreamingLeRobotDataset(
repo_id="your-dataset-repo-id",
delta_timestamps=delta_timestamps,
)
# Iterate over the dataset
for i, item in enumerate(dataset):
print(f"Sample {i}: Episode {item['episode_index']} Frame {item['frame_index']}")
# item will contain stacked frames according to delta_timestamps
if i >= 10:
breakload_state_dict
< source >( state: dict )
Восстановить позицию якоря следующего итератора без получения пропущенных образцов.
Note:
Для воспроизведения порядка якорей необходимы один и тот же набор данных, seed, sampler, настройки пула, распределённая топология и количество workers в DataLoader. При использовании нескольких workers смещение представляет собой смещение rank в целых батчах размера batch_size; каждый worker вычисляет свою часть, поскольку DataLoader получает батчи от своих workers по очереди. Случайные преобразования изображений этим методом не восстанавливаются.
Возвращает количество полных эпизодов, за которыми закреплён один ранг обучения.
Возвращает кадры, принадлежащие одному рангу обучения, при сбалансированном шардировании целых эпизодов.
Зафиксируйте ранг и размер мира для параллелизма данных до torch.distributed и окружения.
Созданный рабочий процесс DataLoader не имеет инициализированного torch.distributed; значения передаются в него через pickle.
set_epoch
< source >( epoch: int )
Выберите неотрицательную эпоху и сбросьте локальный для ранга смещение возобновления.
state_dict
< source >( ) → dict[str, int]
Возвращает
dict[str, int]
Эпоха, смещение по выданным образцам и размер батча для возобновления.
Возвращает текущую позицию итератора в пределах локального ранга.
Note: При предварительной загрузке данных с помощью DataLoader выданные образцы могут ещё не быть использованы в процессе обучения. Конвейер обучения восстанавливает свою позицию на основе завершённых шагов. При использовании нескольких рабочих процессов DataLoader каждый процесс хранит только собственную позицию.