Привет, Хабр! Меня зовут Андрей, я технологический предприниматель и более 9 лет занимаюсь разработкой и внедрением ИИ-решений в различных компаниях, включая стартапы в области беспилотников. Сегодня хочу поделиться с вами своим опытом создания фреймворка для обучения беспилотных машин в симуляции с использованием обучения с подкреплением (RL).
Если вам интересна тема ИИ, подписывайтесь на мой телеграм-канал — там я регулярно делюсь инсайтами по внедрению ИИ в бизнес и запуску ИИ-стартапов, объясняю как работают все эти ИИ-чудеса и рассуждаю о будущем индустрии.
Беспилотные гонки: пример Indy Autonomous Challenge
Начнем с яркого кейса — Indy Autonomous Challenge (IAC). Это гонка беспилотных болидов, впервые прошедшая в 2021 году. Участие принимали сильнейшие университетские команды мира. Их цель — довести автономное вождение до скоростей свыше 250–300 км/ч, сохраняя при этом безопасность вождения.
Почему это так важно с точки зрения технологий? На таких скоростях малейшая ошибка обходится невероятно дорого, поэтому команды оттачивали алгоритмы в симуляторах и облачных вычислительных средах, где можно безопасно воспроизводить самые разные — в том числе аварийные — сценарии, прежде чем выводить болид на реальную трассу.
В результате IAC фактически превратился из глобальной тестовой площадки беспилотных болидов в полноценный спорт, а качественная симуляция выходит на первый план как ключевой инструмент подготовки.
Вдохновившись успехами IAC, мы решили разработать собственную гоночную игру, ориентированную на картинг. Основная идея заключалась в том, чтобы предоставить игрокам возможность управлять машинкой прямо из браузера, не выходя из дома. Для реализации этого проекта мы собрали трассу из покрышек, обеспечив реалистичные условия для вождения. На саму машинку были установлены различные датчики, позволяющие точно фиксировать параметры движения и взаимодействия с трассой.
Синтетические данные: что это и зачем нужны
Огромное значение в беспилотных системах имеют синтетические данные. Это искусственно сгенерированные датасеты, имитирующие реальные условия без необходимости собирать колоссальный объем «реальных» данных. На скоростях 200–300 км/ч просто и безопасно собрать реальный датасет непросто и очень дорого. Создавать же редкие (и потенциально аварийные) сценарии легче и дешевле в виртуальном мире.
Одно из главных преимуществ синтетических данных — их масштабируемость. Достаточно задать в симуляторе нужное число «соперников» и сложных ситуаций и получить обучающую выборку любого размера. При этом все параметры можно жестко контролировать: освещение, погодные условия, конфигурацию соперников, тип дорожного покрытия. В популярных симуляторах (Carla, LGSVL) все объекты изначально «знают» свое положение, классы и прочие метаданные, что резко упрощает разметку для дальнейшего обучения моделей распознавания. Наконец, при работе с синтетикой мы не задействуем реальные GPS-треки водителей и другие персональные данные, что решает вопросы конфиденциальности.
Как мы выбирали симулятор: основные требования и итоговый выбор
При разработке беспилотных систем важно выбрать правильный симулятор. Нам было важно, чтобы виртуальная среда поддерживала ключевые модули восприятия (камеры, лидары, радары), была способна моделировать физику автомобиля (торможение, занос, подвеска) и при этом давала фотореалистичную картинку для компьютерного зрения. Важны были и готовые HD-карты, способность генерировать сложные дорожные сценарии, наличие ground truth (2D/3D-разметки) и стабильная работа на нескольких платформах.
В итоге мы выбрали CARLA. Этот симулятор создавался специально для автономных автомобилей c реалистичной физикой, имеет открытый исходный код и сильную поддержку сообщества, что упрощает внедрение новых фич и кастомизацию. Некоторые энтузиасты вообще используют GTA V для обучения беспилотников.
CARLA: открытый симулятор для автономного вождения
CARLA (Car Learning to Act) — опенсорсный симулятор на движке Unreal Engine, разработанный Intel Labs и Барселонским Центром компьютерного зрения (CVC). CARLA предоставляет обширный набор 3D-моделей улиц, зданий, автомобилей, пешеходов и погодных явлений. Все это можно свободно использовать и модифицировать в рамках научных исследований и экспериментов.
Основная ценность CARLA — ее ориентация на задачи автономного управления машиной. В симуляторе изначально предусмотрены модули для городского трафика, различные сенсоры (RGB-камеры, лидары, радары, псевдосенсоры глубины и семантической сегментации), а также система «нарушений» (infractions), отслеживающая выезд на встречку, столкновения и наезд на пешеходов. Это критически важно при обучении и тестировании RL-агентов, ведь такие «штрафы» можно сразу закладывать в функцию вознаграждения, чтобы обучать модель.
Обучение с подкреплением (RL) в автономном вождении
При классической постановке задачи RL (Reinforcement Learning) у нас есть агент (автомобиль), получающий состояния (кадры с камер, показания лидара, GPS) и выбирающий действия (управление рулем, газом, тормозом). Вознаграждение отражает «полезность» или «качество» действия: например, положительные очки за поддержание заданной скорости без вылетов с трассы, штрафы за выезд на встречную полосу или столкновения. Задача алгоритма — максимизировать суммарную награду за весь эпизод (поездку).
В гоночной среде, где действия непрерывные, часто используют policy-based методы (например, PPO), способные работать с непрерывным рулевым управлением и аналоговым газом/тормозом. Такие подходы требуют огромного количества данных, что делает симулятор абсолютно незаменимым инструментом. Теоретически можно обучаться напрямую на треке, но малейшие ошибки чреваты серьезными авариями и затратами.
Кроме того, гонки — это не только движение по траектории, но и обгоны, избегание столкновений и взаимодействие с несколькими соперниками. Здесь помогают методы мультиагентного RL. Часто в больших проектах сочетаются имитационное обучение (Imitation Learning), где модель учится по записям действий эксперта, и обучение с подкреплением (RL), позволяющее отточить агрессивные стратегии и обгоны в тяжелых условиях. Для работы с RL удобно использовать библиотеку RLlib.
Пайплайн обучения беспилотников состоит из нескольких основных компонент:
Стандартные блоки беспилотной системы. Конвейер обработки начинается с потока данных от сенсоров и завершается управлением исполнительных механизмов. В современных автономных автомобилях обычно применяют набор камер, радары, лидары, а также системы GPS-GNSS для абсолютной локализации и инерциальные измерительные устройства (IMU) для определения трёхмерного положения автомобиля в пространстве.
Модуль восприятия. Формирует промежуточное представление окружающей среды — например, карту вида сверху (bird's eye view) с препятствиями и объектами, используемую затем системой принятия решений. Сюда входит идентификация полос движения, зон, по которым можно двигаться, положение автомобилей и пешеходов, состояние светофоров и прочее. Для повышения надёжности несколько задач (семантическая сегментация, оценка движения/глубины, детектирование загрязнений и т. д.) объединяются в многозадачные модели.
Понимание сцены. Преобразует «среднеуровневые» данные модуля восприятия в «высокоуровневые» решения и действия. На этом этапе происходит слияние разнородных сенсорных данных (лидар, камеры, радары) в упрощённое представление с учётом шумов и неопределённостей детекции. Эта обобщённая информация используется затем компонентами, отвечающими за принятие решений.
Локализация и построение карт. После создания карты заданной области автомобиль может локализовать себя на этой карте. Традиционные методы картирования улучшаются за счёт семантического распознавания объектов, а высокоточные HD-карты выступают априорными данными для детекции.
Планирование и политика вождения. Генерирует команды движения на уровне траектории. Чаще всего используются алгоритмы планирования. Этот модуль получает маршрут (по HD-картам или GPS) и преобразует его в конкретный выполнимый путь.
Управление (Control). Определяет скорость, угол поворота руля и торможение на основании сгенерированной траектории. Классические подходы включают PID-регуляторы и модельно-прогнозирующее управление (MPC), стабилизирующие движение. Задача слежения за траекторией обычно формулируется как оптимизационная проблема на конечном горизонте. Методы обучения с подкреплением дополняют это, учитывая стохастику динамики и неизвестные функции вознаграждения, что делает их перспективными в управлении автономными транспортными средствами.
Curriculum Learning: учим агрессивному вождению и обгонам поэтапно
Высокоскоростное и при этом безопасное вождение на тесном треке — сложная задача. Чтобы агент не «бился лбом» о проблему сложной функции вознаграждения, мы используем Curriculum Learning (CL). Этот метод подразумевает пошаговое усложнение: от простых задач к более трудным, с передачей знаний на каждом этапе. Энтузиасты для этого использовали игру Gran Turismo.
Например, сначала обучаем машину просто ехать в одиночку по трассе и не вылетать с нее (наградой служит прогресс по кругу и штраф за столкновения). Затем добавляем одного соперника и учим обгону. На третьем этапе включаем в сценарий несколько машин и повышаем штрафы за контакты и грубые маневры. Такой подход помогает существенно ускорить сходимость и улучшает итоговую политику, поскольку агент формирует базовый «инстинкт» вождения на первой фазе и лишь после этого берется за более тонкую задачу — маневры в плотном трафике.
Виртуальные лидары: упрощенная альтернатива лидаров
Я уже несколько раз упомянул лидар, но реальный девайс стоит дорого, его нелегко калибровать и интегрировать. Однако для некоторых задач достаточно «виртуального лидара» — то есть эмуляции дальномерных данных на базе камер и семантической сегментации. Алгоритм выглядит так: четыре «рыбьеглазые» камеры дают 360°-обзор, кадры сшиваются в вид сверху, затем с помощью сегментации выделяются участки «свободного пространства» и препятствий. По границе между ними можно вычислить угол и дистанцию до границ трассы.
Этот псевдолидар хорошо подходит для задач быстрого прототипирования: не нужно покупать физическое устройство, разрабатывать драйверы, биться с аппаратными сбоями. Достаточно иметь камеры и GPU для семантической сегментации в реальном времени. Правда, возникают сложности при неровностях рельефа, а также если сегментация ошиблась, но как недорогой вариант на этапе R&D это вполне рабочий инструмент.
Simularity - наш пайплайн для обучения беспилотников в симуляции
В итоге мы разработали пайплайн Simularity, который существенно облегчает одновременный запуск нескольких сред CARLA, автоматизирует функции вознаграждения, добавляет виртуальные лидары и тесно интегрируется с Ray RLLib. Такой подход дает возможность быстро обучать RL-агентов, используя распределенное обучение, гибкие механизмы «штрафов» (за выезд за границы трека или столкновения) и поддержку кастомных гоночных треков.
Фактически у нас получилась «обертка» для использования вида сверху в качестве «дополненной реальности» (AR) в симуляторе CARLA как дополнительного канала восприятия, что позволяет более экономично осуществлять переход от симуляции к реальности (Sim2Real)
В системе используются "Actors" — независимые экземпляры Docker-контейнеров CARLA, которые обслуживают картинг, трассу и специфические настройки среды. Actors собирают данные в виде фиксированных траекторий, которые передаются "Learner" для обучения сети политики с использованием алгоритма Proximal Policy Optimisation (PPO).
Используя точные данные о местоположении и HD-карты, мы реализовали восприятие с видом сверху (Bird’s-eye view) и виртуальный лидар, что позволяет RL-алгоритмам обучаться в разнообразных и сложных сценариях. В конечном итоге несколько агентов обучаются в симуляции, и на выходе мы получаем лучший алгоритм на основе метрик в MLFlow.
Мы можем задавать формулу награды (progress, waypoint tracking, столкновения), и очень быстро менять ее компоненты. Получается «из коробки» удобная связка, где можно без труда запускать несколько рабочих процессов, накапливать опыт и обучать агентов с помощью любых подходящих алгоритмов.
В результате, обученный агент успешно прошел более десятка кругов на реальном гоночном треке без аварий, достигнув максимальной скорости 11,5 м/с. Агент, обученный на одной сложной трассе, успешно демонстрировал свои способности и на других разнообразных трассах. Однако при движении со скоростью более 22 м/с автомобиль начинает немного вилять.
Что получилось в итоге
Управлять настоящим картом прямо из браузера, не выходя из дома — это захватывающий опыт. Реальная физика добавляет игре остроты и требует высокой точности. Чувствуешь себя как в GTA, только вокруг тебя ходят реальные люди. Важно помнить о безопасности при проведении подобных экспериментов. В этом контексте минимизация задержек с помощью ИИ также является перспективной задачей.
Беспилотные гонки стимулируют развитие систем восприятия, планирования и управления на больших скоростях. При этом симуляция и синтетические данные — ключ к безопасным экспериментам и быстрой интеграции алгоритмов. Мы видим, что использование симуляторов и методов Reinforcement и Curriculum Learning и виртуальных лидаров позволяет быстро и экономично решить задачу обучения беспилотников.
Наш пайплайн Simularity упрощает процесс интеграции RL-алгоритмов с симуляцией, позволяя быстро настраивать функцию наград, сценарии и сенсоры. Все это дает серьезные преимущества в скорости обучения и точности результатов.
Для меня это был интересный опыт. Надеюсь, этот обзор вдохновит вас поэкспериментировать с использованием синтетических данных для обучения автономных агентов. Если остались вопросы или хотите поделиться своими комментариями, заходите в мой телеграм-канал — буду рад обсуждениям.
Спасибо за внимание!