Робототехника
«Один пример — один эпизод»: FiftyOne научился читать датасеты LeRobot v3 и строить индекс на 497 эпизодов
5 октября 2026 года в блоге Hugging Face вышла публикация Харприта Сахоты из Voxel51: открытый инструмент FiftyOne теперь читает датасеты LeRobot v3 напрямую, через тип fo.types.LeRobotDataset. Каждый эпизод становится отдельным образцом — его можно воспроизвести, отфильтровать, снабдить эмбеддингом и найти поиском.

Что изменилось
FiftyOne — открытый инструмент для загрузки, запросов, визуализации и курирования ML-датасетов из изображений, видео и мультимодальных данных; LeRobot — открытый фреймворк Hugging Face для обучения роботов, задающий стандартный формат датасетов v3, которым сообщество обменивается записями телеуправления.
Теперь FiftyOne читает датасеты LeRobot v3 как есть, через тип fo.types.LeRobotDataset: достаточно указать папку с датасетом, и каждый эпизод превращается в образец, который можно воспроизвести, отфильтровать, снабдить эмбеддингом и искать. Не нужно писать конвертер, копировать видео или собирать собственный просмотрщик, а код записи и обучения остаётся прежним.
Как устроен формат LeRobot v3
Формат v3 устроен так: состояние и действия хранятся в Parquet, камеры — в MP4-шардах, а метаданные эпизода отмечают, где каждый эпизод начинается и заканчивается. Именно этот формат сообщество использует, чтобы делиться записями телеуправления.
Публичная коллекция lerobot/community_dataset_v3 собирает вклады участников: 235 контрибьюторов, 50 типов роботов, 1 755 дочерних датасетов примерно на 900 ГБ. По данным публикации, в ней 17 617 файлов и 897,5 ГБ, а все поддатасеты уже находились в codebase_version v3.0, поэтому конвертация не потребовалась.
Срез на 497 эпизодов
Чтобы показать масштаб, авторы собрали кросс-эмбодиментный срез: примерно по 10 эпизодов от каждого из 50 воплощений, всего 497 эпизодов. Для них посчитали видеоэмбеддинги моделью Qwen3-VL, построили индекс текстово-видео-поиска, оценили уникальность и репрезентативность и нарезали 75 сохранённых представлений.
Результат лежит на Hub как Voxel51/community_v3_10per_embodiment и загружается одной строкой. Загрузка выполняется так: fo.Dataset.from_dir(dataset_dir=..., dataset_type=fo.types.LeRobotDataset, name=...), затем при необходимости dataset.add_dir(...) для дополнительных источников и fo.launch_app(dataset) для просмотра.
Один пример — один эпизод
Единицей данных FiftyOne делает эпизод, а не файл: каждый образец несёт episode_index, robot_type, task, duration, fps и указатель media_reference типа LeRobotEpisodeReference. Мысленно образец можно представить строкой таблицы: слева — фильтруемые скалярные поля (robot_type, task, duration, fps), справа — указатель на реальные строки Parquet и временное окно MP4.
Импорт при этом читает только meta/info.json и meta/episodes/*.parquet и не открывает ни шард данных, ни видео. В срезе длительность эпизодов колеблется от 0,02 до 148,6 секунды, а частота кадров принимает значения 10, 15, 20, 25, 30 или 50.
Три пути назад, к данным
Вернуться от представления FiftyOne к кадрам можно тремя способами: читать на месте через sample.media_reference.data без копирования; отдать episode_index в LeRobotDataset(..., episodes=...) для обучения; либо экспортировать представление через view.export(dataset_type=fo.types.LeRobotDataset) в отдельный репозиторий v3. Правило простое: если код работает в том же процессе — не копировать, если данные должны покинуть процесс — экспортировать.
Эмбеддинги для среза считала модель Qwen3-VL-Embedding: временное окно эпизода декодируется через PyAV, до 32 равномерно распределённых кадров уходят в модель как один видеоклип, а скрытое состояние последнего токена превращается в 2 048-мерный вектор поля qwen3vl_embedding. Поскольку видео и текст попадают в одно векторное пространство, работает поиск по тексту, например ds.sort_by_similarity("folding a cloth", k=10, brain_key="qwen3vl_embedding_sim").
Зачем это для роботов
Для разработки моделей «зрение — язык — действие» (VLA) такие сигналы важны при курировании данных: политика должна обобщаться между сценами, воплощениями и вариациями задач, а курировать можно только то, что можно измерить. Видеоэмбеддинги дают числовую опору одновременно и на семантику задачи, и на визуальный облик, позволяя считать похожесть, уникальность и репрезентативность эпизодов.
Публикация отделяет это от уже привычных инструментов: Foxglove и Rerun — правильный выбор, когда вопрос касается одного прогона (что увидел робот на 12,4-й секунде), тогда как FiftyOne работает на уровне датасета из сотен эпизодов от десятков роботов. Именно поэтому авторы и предлагают превращать записи в структурированные тренировочные данные, а не оставлять их просто набором видео.