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

Позвольте мне перейти к делу: ниже представлено видео, на котором мой полностью автономный автомобиль едет в виртуальной тестовой среде. Конечно, хотя это и выглядит как ретро (довольно скучная) гоночная игра 1990-х годов, автомобилем управляет глубокая сверточная нейронная сеть (CNN), основанная на модификации алгоритма глубокого обучения, разработанного Nvidia.

Давайте погрузимся и посмотрим, что здесь происходит. Я знаю, что некоторые читатели более знакомы с некоторыми частями технологии автономного вождения, чем другие, поэтому я разбил их на части, чтобы вы могли перейти к той части, которая вас интересует.

Как работают беспилотные автомобили?

Когда мы ведем машину, мы обрабатываем и интерпретируем тысячи вещей вокруг нас, поэтому программное обеспечение самоуправляемых автомобилей (SDC) должно делать то же самое. Чтобы обучить это программное обеспечение, SDC должны проехать тысячи часов и миллионы миль по дороге, чтобы накопить достаточно информации, чтобы научиться справляться как с обычными дорожными ситуациями, так и с необычными (например, когда женщина в электрическом инвалидном кресле преследует утка с метлой посреди дороги ).

Чтобы сэкономить на невероятно дорогом обучении (которое требует тысячи часов водителей, обеспечивающих безопасность, плюс риски безопасности, связанные с использованием учебного автомобиля на дорогах общего пользования), разработчики SDC обращаются к виртуальным средам для обучения своих автомобилей.

SDC эффективно «видят» свое окружение с помощью датчиков автомобиля (например, камер, LiDAR, радаров, ультразвуковых устройств, GPS и т. Д.) И преобразуют его в инструкции, которые отправляются на приводы автомобиля. Наиболее важные команды:

  1. Ускорение (дроссельная заслонка) / замедление (торможение)
  2. Поверните влево / вправо на X градусов (рулевое управление)

Хотя детали и методы этого «конверсионного» программного обеспечения различаются для каждого разработчика SDC, обычно оно состоит из некоторой комбинации локализации (где машина?), ориентация (в каком направлении смотрит машина?), обнаружение (что вокруг машины?), восприятие (являются ли обнаруженные объекты светофором, пешеходами или другими автомобилями?), прогноз (что будут делать обнаруженные объекты дальше?), планирование движения (куда должна двигаться машина?), и команда транспортного средства (отправка сигналов в двигатель автомобиля, торможение и рулевое управление). Большинство из них полагаются на машинное и глубокое обучение в своей основе.

Обучение самоуправлению в видеоиграх

То же программное обеспечение, которое выполняет вышеуказанное преобразование для реального вождения, можно также использовать в виртуальной тестовой среде. Чтобы обучить алгоритм глубокого обучения, я несколько раз проеду машину с датчиками по трассе в симуляторе (представьте себе любую видеоигру о гонках) и запишу изображения, которые «видят» датчики (в данном случае камеры) »Внутри симулятора.

Например, если я вот что вижу, когда играю в гоночную игру:

затем камера слева, спереди и справа от моей виртуальной машины увидит следующее:

Затем мой код преобразует эти изображения в команды вождения, которые передаются обратно в органы управления автомобилем (в симуляторе). Суммируя:

  • Виртуальные сенсоры «видят» виртуальный мир вокруг себя внутри видеоигры.
  • Во время тренировки (когда я веду машину по трассе): алгоритм учится связывать изображения, которые он видит, с тем, как я вижу это вручную (т. е. неавтономно) гнал машину по трассе (дроссельная заслонка и скорость). Это помеченные данные обучения, которые обучают алгоритму глубокого обучения.
  • Например, код обучается связывать указанные выше три изображения с «поверните рулевое колесо на 0,22 градуса и установите скорость на 8,99 миль в час».
  • Во время логического вывода (когда автомобиль движется автономно без моего контроля): код видит свое окружение - ›передает его в обученный алгоритм -› алгоритм выводит скорость и дроссельную заслонку - ›автомобиль обновляет скорость и газ - ›повтор.

Есть много симуляторов, которые можно использовать для этого обучения (я использовал симулятор Udacity с открытым исходным кодом).

Обратите внимание, что если вы играли в Grand Theft Auto, ваша Playstation / Xbox преобразует элементы управления с вашего КПК в сигналы в игре. Так что нетрудно представить, что им также можно управлять с помощью другого контроллера, например, «выходом» вышеупомянутого алгоритма.

Итак, как работает алгоритм?

Это основано на глубокой сверточной нейронной сети (CNN: см. Еще одну еженедельную статью здесь), которая принимает изображения, снятые камерами в симуляторе, и возвращает углы поворота (на данный момент я оставляю управление дроссельной заслонкой в ​​стороне).

Архитектура нейронной сети, которую я использовал, похожа на основополагающую нейронную сеть Nvidia сквозное глубокое обучение для беспилотных автомобилей, описанную здесь и в этой архитектуре:

Мой код использует Tensorflow (с Keras) и работает:

  • Обрезка изображений для фокусировки только на дороге впереди (а не на небе)
  • Нормализация изображений
  • Применение четырех сверточных слоев
  • Применение четырех полносвязных слоев
  • Тренировка на ~ 40 000 изображений, собранных, когда я четыре раза вручную водил машину по трассе.
  • Применение стохастической оптимизации (оптимизатор Адама) для уменьшения среднеквадратичной ошибки угла поворота.

Он довольно эффективен - он обучает сеть всего за две итерации (называемые эпохами) по 10 секунд с использованием поддержки графического процессора (экземпляр AWS g2.2xlarge). Для желающих вот мой код.