Пролог

Популярность автономного вождения возросла не только в академическом сообществе, но и в отрасли, когда миллиарды долларов были вложены в разработку автономных транспортных средств 4-го уровня.

Одним из подходов к автономному вождению является сквозное вождение с помощью имитационного обучения. Модель учится подражать и водить как человек-водитель. Этот подход направлен на то, чтобы дополнить традиционную автономную систему вождения моделью вождения на основе нейронной сети, которая неявно управляет восприятием, планированием пути и контролем. По сути, сквозная модель вождения представляет собой нейронную сеть, которая берет некоторое подмножество доступных данных датчиков от транспортного средства и прогнозирует будущие результаты управления.

Введение

Целью ICCV 2019: Learning-to-Drive Challenge является разработка современных моделей вождения, которые могут предсказывать будущий угол поворота рулевого колеса и скорость автомобиля, учитывая большой набор входных данных датчиков. Я занял 3-е место в этом испытании, поэтому я хотел бы поделиться своими методами и опытом.

Данные датчика

Задача предоставляет следующие данные датчика:

  • 4 камеры GoPro Hero5 (спереди, сзади, справа, слева)
  • Визуальная карта от TomTom (может быть не совсем синхронизирована)
  • Наглядная карта от HERE Technologies
  • Семантическая карта от HERE Technologies

Я использовал только изображения с фронтальной камеры, визуальную карту и семантическую карту от HERE Technologies. Я не использовал визуальную карту от TomTom, потому что она не улучшила производительность модели в экспериментах. Понижающая выборка была основной причиной того, что я не занял первое место, потому что, насколько я знаю, две лучшие группы использовали полный набор данных (ни с пониженной дискретизацией, ни с уменьшенным размером), потому что у них были гораздо более мощные графические процессоры.

Базовая модель

Базовая модель, предоставляемая каждому участнику испытания, представляет собой простую модель нейронной сети, которая содержит LSTM и полностью подключенный слой в конце.

Оценка

Все модели, участвующие в испытании, будут оцениваться в тестовом разделе с использованием характеристик среднеквадратичной ошибки (MSE) как для прогнозов угла поворота рулевого колеса («canSteering»), так и для скорости автомобиля («canSpeed») с правдой на земле человека в качестве метрики. . Таким образом, наиболее эффективные модели вождения в этих ситуациях будут вести себя так же, как водитель-человек. Базовый уровень может достигать СКО около 1650 при прогнозировании угла поворота рулевого колеса и СКО около 50 при прогнозировании скорости. Моя модель, наконец, достигла MSE 922,836 при прогнозировании угла поворота рулевого колеса и MSE 7,255 при прогнозировании скорости, что в целом занимает 3-е место. СКО угла поворота руля и СКО скорости у верхней записи составляют 90,09% и 62,62% от моего соответственно.

Методология

Полную работу можно найти в моем Github-репозитории для этой задачи. В этой статье я покажу только самые важные части моей работы.

Предварительная обработка данных

Полные сенсорные данные задачи чрезвычайно велики (более 500 ГБ) и содержат около 10 миллионов изображений. Чтобы обучить мою модель с использованием ограниченных ресурсов (настройка ПК с AMD Ryzen 7 2700X и Nvidia GTX 1080 и около 24 часов обучения с Nvidia Tesla V100 на Google Cloud Platform) и времени, данные должны быть предварительно обработаны, чтобы уменьшить их сложность.

Все изображения (первоначально 1920 на 1080) изменены на 90 на 160. Кроме того, данные уменьшены до 1/40 исходного размера. (Исходный набор данных содержит 10 изображений в секунду, а предварительно обработанный набор данных содержит 1 изображение за 4 секунды). Описанная выше предварительная обработка увеличивает общий размер набора данных с более чем 500 ГБ до всего 700 МБ.

В этой части используется код downsample.py.

Загрузка данных

Загрузка всех изображений с помощью пользовательского загрузчика данных также имеет решающее значение, поскольку базовый загрузчик данных загружает только изображения с передней камеры: в дополнение к изображениям с передней камеры мне нужны карты GPS и изображения с боковых камер. Этот шаг выполняется в два этапа: файл конфигурации загрузчика данных и код загрузки данных.

Файл конфигурации загрузчика данных определяет, какие части набора данных будут обрабатываться загрузчиком данных, размер пакета, корневая папка данных, потому что мне часто нужны разные конфигурации для загрузки данных. Взгляните на config_full_downsampled.json.

Код загрузки данных берет параметры из конфигурационного файла, загружает изображения с диска в загрузчик данных и нормализует все загруженные данные. Взгляните на dataset.py.

Архитектура модели

На самом деле я не добавлял к базовой модели. Моя модель абсолютно новая.

Архитектура моей модели намного сложнее базовой модели. Базовая модель имеет только один LSTM и один полносвязный слой. Моя модель использует ResNet для извлечения функций из входных изображений. Затем функции проходят через LSTM и полносвязные слои для вывода окончательных прогнозов. Подробную реализацию модели можно найти на here_model.py.

Обучение и проверка

В обучении моей модели используется оптимизатор ADAM со скоростью обучения 0,0001 и плавной потерей L1. Модель обучается на 20 эпох. Вы можете найти учебный Jupyter Notebook на LearningToDrive.ipynb. Ниже приведены некоторые графики, полученные в результате обучения.

Вывод

Моя модель, наконец, достигла MSE 922,836 при прогнозировании угла поворота рулевого колеса и MSE 7,255 при прогнозировании скорости, что в целом занимает 3-е место.