Transporter и CLIPort: где и что
Политики части 1 смотрят на картинку и выдают числа: координаты или углы суставов. На каждый навык им нужны десятки демонстраций, а команду словами большинство из них не понимает. Но в задачах на столе действие — точка на той же картинке, которую видит робот: взять здесь, положить туда. Transporter превращает действие в карту по пикселям и учится брать предмет по одной демонстрации. CLIP связывает слова с картинками, а CLIPort соединяет одно с другим: CLIP отвечает, что брать, Transporter — где.
Картинки и подписи в одном пространстве
Чтобы выполнить команду «положи синий кубик в миску», робот должен связать слова с тем, что видит. Классический путь — детектор с фиксированным списком классов. Но на каждый новый предмет или признак ему нужны новые размеченные картинки.
CLIP (Radford и соавторы, OpenAI, 2021) учится иначе. Берут 400 миллионов пар «картинка — подпись» из интернета и две сети: одна превращает картинку в вектор, другая — подпись. Задача обучения — угадать, какая подпись к какой картинке. В пакете из N пар N верных сочетаний и N² − N неверных: векторы верных пар сближают, неверных — разводят. Это контрастное обучение.
После обучения слова и картинки живут в одном пространстве. Чтобы найти предмет, достаточно описать его словами: побеждает картинка, вектор которой ближе всего к вектору текста. Так CLIP без единой размеченной картинки из ImageNet угадывает 76,2% классов — столько же, сколько ResNet-50, обученный на 1,28 миллиона размеченных картинок.
Проверим это в миниатюре. Предметы — четыре формы шести цветов, подписи — «цвет + форма». Одного сочетания в обучении нет совсем: фиолетового кубика модель не увидит ни разу.
По строкам — подписи, по столбцам — картинки. Чем ярче клетка, тем ближе векторы подписи и картинки. Обведена диагональ: верные пары.
Поиск по описанию
Пунктиром обведён фиолетовый кубик: в обучении его не было.
Под капотом: контрастная цель и наша маленькая модель
Пусть в пакете пар, — нормированный вектор -й картинки, — нормированный вектор -й подписи, — температура. Сходство — скалярное произведение, а цель — две перекрёстные энтропии: для каждой картинки угадать её подпись среди и для каждой подписи — её картинку:
У CLIP картинку кодирует ResNet или ViT, подпись — трансформер. Пакет — 32 768 пар, температура обучается, начальное значение 0,07.
У нас картинка — 16 × 16 пикселей, её кодирует сеть с одним скрытым слоем: 768 → 48 → 16. Подпись — сумма векторов двух слов, цвета и формы, по 16 чисел на слово. Векторы нормируются, . Пакет — 16 разных пар, у каждой картинки случайный сдвиг, размер и шум; 600 шагов Adam. Матрица на сцене — восемь пар, которых модель не видела в этом виде: картинки нарисованы заново.
Модель ни разу не видела фиолетовый кубик, но нашла его. Вектор подписи — сумма векторов слов, а цвет и форму картинки сеть научилась кодировать по отдельности: фиолетовый она видела на мяче, миске и банке, кубик — пяти других цветов. У CLIP то же даёт масштаб: в 400 миллионах пар встречается почти любое сочетание признаков. Роботу это и нужно — понимать слова, которых нет в его демонстрациях.
Но CLIP отвечает только на вопрос «что». Он сравнивает с текстом картинку целиком и не говорит, в каком месте стола взять предмет и куда его положить. Как получить из картинки место действия?
Действие — клетка на картинке
Политики части 1 выдают действие числами: по всей картинке сеть вычисляет координаты предмета. Если кубик сдвинулся, сеть должна заметить сдвиг и пересчитать числа, и этому её учат на сотнях примеров с кубиком в разных местах.
Transporter (Zeng и соавторы, Google, 2020) замечает, что в задачах на столе действие уже лежит в картинке. Камеры глубины смотрят на стол, и по их снимкам собирают вид сверху, который совпадает со столом: каждый пиксель — место, куда робот может опустить захват. Значит, можно не вычислять координаты, а оценить каждый пиксель: насколько хорошо взять здесь. Получается карта, и робот берёт там, где она ярче.
Карту считает полносвёрточная сеть: одни и те же веса скользят по всей картинке. Сдвинули кубик — пик карты сдвинулся вместе с ним. Это эквивариантность сдвига: учить отдельно каждое положение кубика не нужно.
Ада — домашний гуманоидный робот, на котором построены лабораторные работы курса. Подробнее о ней — в уроке 0.1.
Проверим на столе Ады. Демонстрация — сцена, где оператор берёт красный кубик. Обучим две модели: карту — один фильтр 5 × 5, который скользит по сетке стола 24 × 24, — и регрессию координат — сеть, которая по всей картинке выдаёт два числа, как в части 1. Проверка — 30 новых сцен, где предметы лежат в других местах.
Вид на стол сверху: квадраты — кубики, кольцо — миска, круг — мяч.
Карта «где взять» целиком. Тот же стол сверху, 24 × 24 клетки: чем темнее клетка, тем выше оценка «взять здесь». На большой сцене видна только её вершина.
Под капотом: карта, softmax по клеткам и эквивариантность
Сеть выдаёт оценку для каждой клетки . Вероятность взять в клетке — softmax по всем клеткам, а цель обучения — перекрёстная энтропия с клеткой, где брал оператор:
Последнее равенство — эквивариантность: если сдвигает картинку , то карта сдвигается так же. У Transporter карту считает глубокая полносвёрточная сеть по виду сверху, собранному из трёх камер RGB-D. У нас — один фильтр 5 × 5 по трём цветам, 75 весов и сдвиг. Регрессия координат — сеть 1728 → 32 → 2 по всей сетке, около 55 тысяч весов, ошибка — средний квадрат. Обе модели обучаются здесь же, 120 и 300 шагов Adam.
Карта брала красный кубик в новых сценах после одной демонстрации, а регрессия промахивалась и после двадцати: ей нужно выучить, как каждое положение кубика превращается в числа. В статье Transporter то же на большом масштабе. В задаче вставить блок в гнездо карта с одной демонстрацией даёт 100%, а свёрточная сеть с регрессией — 8% даже с тысячей демонстраций.
С двумя кубиками разница ещё заметнее: у карты два пика, и робот берёт один из них, а регрессия выдаёт среднее — точку между кубиками. Это мультимодальность из урока 1.3, только теперь она видна на картинке. Взять — половина задачи. Куда положить?
Куда положить: поиск по шаблону
Положить деталь в гнездо — значит найти место и поворот, где деталь совпадает с прорезью. Transporter делает это так же, как ищут знакомый фрагмент на фотографии: вырезает признаки вокруг взятого предмета и прикладывает их к каждой клетке сцены. Где совпадение лучше всего, туда и кладут. Чтобы найти поворот, вырезку поворачивают на 36 углов через 10° и строят карту для каждого угла.
Признаки вырезки и сцены Transporter учит по демонстрациям. У нас они заданы: в прорези гнезда +1, в стенках вокруг неё −1. Деталь — уголок из пяти квадратов. Яркость карты — доля детали, которая легла в прорезь, за вычетом той, что попала на стенки.
Под капотом: перенос как корреляция признаков
Пусть — признаки вырезки вокруг точки взятия, — признаки всей сцены. Оценка укладки в положение (сдвиг и поворот) — их взаимная корреляция:
и — две полносвёрточные сети, их учат той же перекрёстной энтропией по положениям, где оператор клал предмет. Поворот перебирают явно: вход поворачивают на углов, и оценка становится картой размером H × W × 36. Поэтому сеть не учит поворот как число, а сравнивает повёрнутые копии. На сцене признаки заданы вручную, сетка 32 × 32, деталь — 80 клеток.
Сколько демонстраций нужно
Карты и поиск по шаблону дают Transporter обобщение, которого нет у сетей, выдающих числа. Ниже — успех на задачах из статьи в зависимости от числа демонстраций. GT-State MLP получает на вход точные позы всех предметов — то, что классическому стеку даёт восприятие, — и всё равно учится медленнее.
По горизонтали — число демонстраций, по вертикали — доля успешных попыток. Данные — таблица 2 статьи Transporter, 2020.
Transporter берёт и кладёт по картам и учится на десятках демонстраций. Но он не знает слов: если на столе три кубика, он возьмёт тот, который чаще брали в демонстрациях. Как добавить к картам команду?
CLIPort: CLIP выбирает, что взять, Transporter — где
CLIP знает слова, но не даёт места. Transporter даёт место, но не знает слов. CLIPort (Shridhar, Manuelli, Fox, 2021) соединяет их в два потока. Семантический поток — признаки CLIP, связанные с текстом команды: он отвечает, что брать. Пространственный — сеть Transporter: она отвечает, где. Потоки сливаются в одну карту «где взять» и «куда положить».
Главное, что даёт CLIP, — слова, которых не было в демонстрациях. В статье цвета разделены: робота учат на жёлтых, коричневых, серых и голубых предметах, а проверяют на оранжевых, фиолетовых, розовых и белых. Одна модель на 10 задач работает не хуже отдельных моделей для каждой, а на настоящей руке Franka одна модель выучила 9 задач всего по 179 парам «картинка — действие».
Соберём CLIPort в миниатюре. «Где» — фильтр взятия, который учится брать кубики. «Что» — сходство с текстом команды по мини-CLIP из первой лаборатории: для каждой клетки он берёт окно, небольшой квадрат стола вокруг неё, и сравнивает его с командой. Итог — их произведение. Демонстрации робота — команды только с красным, синим и зелёным цветом. Для сравнения — модель, которая учит слова только по этим демонстрациям: к фильтру взятия для каждого слова добавляется свой фильтр.
Три карты — тот же стол сверху, 24 × 24 клетки, темнее — выше оценка. «Где» — места, где фильтр научился брать кубики, без учёта команды. «Что» — где окно стола похоже на слова команды. «Итог» — их произведение, это карта «где взять», как в лаборатории 2.
Под капотом: как устроен настоящий CLIPort и что мы упростили
В CLIPort семантический поток — замороженный энкодер картинок CLIP (ResNet-50) и его текстовый энкодер. Признаки текста умножают на признаки картинки на нескольких уровнях декодера, а признаки семантического потока на каждом уровне складывают с признаками пространственного. CLIP получает только цвет: он обучен без глубины, а пространственный поток видит RGB-D. Обучение — та же перекрёстная энтропия по положениям взятия и укладки, 200 тысяч шагов на одной видеокарте за два дня.
У нас слияние проще: вероятности двух карт перемножаются, , . Карта «что» — сходство вектора текста с вектором окна 16 × 16 вокруг каждой клетки по мини-CLIP. Фильтр «где» учится на девяти демонстрациях брать названный кубик, но команду не видит. Модель «слова из демонстраций» к общему фильтру прибавляет фильтр слова; у слова, которого не было в демонстрациях, такого фильтра нет.
Модель, которая учила слова по демонстрациям робота, знает три цвета, и фиолетовый для неё — пустое место. CLIPort знает фиолетовый от CLIP, хотя робот ни разу не брал фиолетовый кубик. Демонстрации учат его главному — брать кубики и класть их, — а за слова отвечает модель, обученная на огромном наборе пар из интернета. Это разделение труда стало основой следующих моделей.
Что осталось от этих идей
Отдельные потоки «что» и «где» ушли, идеи остались. Энкодер, обученный на парах «картинка — текст», есть почти в каждой модели зрения, языка и действий: у OpenVLA картинку кодируют вместе DINOv2 и SigLIP, наследник CLIP, а π0 построен на модели PaliGemma со своим энкодером SigLIP.
Действие как точка на картинке тоже вернулось. RoboPoint (2024) по команде отмечает на кадре точки, куда тянуться и куда класть. Gemini Robotics-ER (2025) указывает точки, предсказывает захваты, траектории и рамки предметов в 3D. Это карта Transporter, только её выдаёт большая модель, которая понимает язык.
Но карта на столе работает, когда задача сводится к «взять и положить» и сцену видно сверху. Повернуть кран, поставить чашку на полку на высоте 30 см или открыть ящик картой по пикселям стола не описать: нужны три измерения и повороты по всем осям. Об этом следующий урок.
Восемь вопросов о типичных заблуждениях
Итоги урока
- CLIP учится на 400 миллионах пар «картинка — подпись» угадывать, какая подпись к какой картинке. Слова и картинки попадают в одно пространство, и предмет можно найти по описанию, даже по сочетанию слов, которого не было в обучении.
- Transporter выдаёт действие картой по пикселям вида сверху. Сеть эквивариантна сдвигу, поэтому карте хватает одной демонстрации там, где регрессии координат мало и тысячи.
- У карты может быть несколько пиков: два одинаковых кубика — два варианта взять, а не среднее между ними.
- Укладка — поиск по шаблону: вырезку вокруг взятого предмета сравнивают со сценой на 36 поворотах и кладут туда, где совпадение лучше.
- CLIPort соединяет «что» от CLIP и «где» от Transporter. Одна модель учит много задач, а слова, которых не было в демонстрациях робота, понимает благодаря CLIP.
Открытые вопросы
Почему Transporter работает с видом сверху, а не с кадром камеры как есть?
На кадре камеры перспектива искажает размеры и расстояния: один и тот же кубик ближе к камере больше, и пиксель не соответствует одному месту на столе. Вид сверху, собранный по снимкам камер глубины, совпадает со столом, поэтому каждый пиксель — действие, а сдвиг предмета — тот же сдвиг на картинке. Без этого эквивариантность не работает.
Роботу нужно поставить чашку на полку на высоте 30 см. Чего не хватает карте на столе?
Высоты и поворотов по всем осям: карта по пикселям вида сверху задаёт только место на плоскости и поворот вокруг вертикали. Transporter для таких задач добавляет регрессию оставшихся степеней свободы, а PerAct из урока 2.2 переходит к 3D-сетке и ищет следующую позу среди вокселей.
Гид по статье
- Читать внимательноРаздел 3 и рисунок 2: два потока и как текст смешивается с картинкой. Раздел 4: знакомые и новые цвета и предметы, одна модель на 10 задач.
- Можно пропуститьОписание каждой задачи в приложении и подробности аугментаций.
- Вопрос по ходуПочему семантический поток получает только цвет, а пространственный — цвет и глубину? Что бы изменилось, если бы CLIP видел глубину?
A. Zeng и соавторы, «Transporter Networks: Rearranging the Visual World for Robotic Manipulation», CoRL 2020 — карты взятия, перенос как корреляция и бенчмарк Ravens.
A. Radford и соавторы, «Learning Transferable Visual Models From Natural Language Supervision», ICML 2021 — CLIP: контрастное обучение и нулевой перенос.
Материалы
- Transporter NetworksСтраница проекта: видео и код бенчмарка Ravens
- CLIPortСтраница проекта, видео с настоящей рукой и код
- CLIP: Connecting text and imagesЗапись OpenAI с примерами нулевого переноса
- OpenCLIPОткрытые модели CLIP разных размеров и код обучения
- RoboPointVLM, которая по команде отмечает точки действия на кадре
Дальше: PerAct, 3D-представления и язык. Карта по пикселям стола задаёт место на плоскости и поворот вокруг вертикали. Чтобы открыть ящик или поставить чашку на полку, нужно выбрать позу в объёме. PerAct делит пространство на миллион вокселей и ищет следующую ключевую позу как самый ценный воксель — урок 2.2.