Рубрики
Без рубрики

Сквозной Самоуправляемый Автомобиль С Использованием Поведенческого Клонирования

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

Автор оригинала: David Clark.

Проект № 3 в программе самодвижущегося автомобиля Udacity

Проект № 3 в программе Audacity предполагает использование поведенческого клонирования и глубоких нейронных сетей для обучения автомобиля вождению в симуляторе.

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

Если вы пропустили мое первое обновление проекта, вы можете найти его | здесь . Второе обновление проекта находится здесь .

Почему симулятор

Хотя вождение автомобиля в симуляторе, конечно, не то же самое, что вождение автомобиля в реальном мире, есть много общего. Учитывая современное состояние игровой графики, изображения, снятые в моделируемой среде (дорога, маркеры, ландшафт), являются хорошим приближением изображений, которые могут быть сняты в реальном мире.

Конечно, тренажер также обеспечивает безопасность и простоту использования. Сбор данных намного проще, и отказавшая модель не представляет угрозы для жизни. Симулятор-это отличная платформа для изучения и оттачивания различных архитектур моделей. Успешная модель впоследствии может быть реализована в реальном автомобиле с реальными камерами.

Обучающие данные и поведенческое клонирование

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

Это действительно важная работа, но также и видеоигры….

Да, именно так. Игра в видеоигры может помочь вам построить самодвижущийся автомобиль! Симулятор построен в Unity, игровом движке, и внутриигровые камеры захватывают изображения, когда автомобиль проезжает по трассе. Изображения, которые были сняты во время вождения (надеюсь, хорошо), позже были введены в нейронную сеть, чтобы научить модель правильно управлять автомобилем. Вот пример изображения, сделанного с передней части автомобиля:

Трек 1 в симуляторе

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

Я собрал данные для нескольких различных сценариев. Во-первых, я проехал трассу в обоих направлениях пару раз, пытаясь сохранить идеальную среднюю полосу движения. Этот сценарий представлял основную часть данных, поскольку это идеальное поведение. Во-вторых, я собрал некоторые “корректирующие” данные, двигаясь от края дороги обратно к центру в различных ситуациях. Цель “корректирующих” данных-научить машину, как вернуться в центр, если она выйдет из строя. В — третьих, я собрал больше данных специально для поворотов и проблемных мест-там, где у машины было больше всего проблем с удержанием на трассе. В-четвертых, и, наконец, я собрал данные о втором доступном треке в симуляторе. Эта вторая трасса совсем другая (и дорога, и ландшафт) и гораздо сложнее. Он демонстрирует крутые склоны и гораздо более резкие, более частые повороты. Цель сбора данных на этом совершенно другом треке состояла в том, чтобы помочь модели обобщить концепцию “пребывания на дороге”.”

Вот изображение со второго, более сложного трека:

Трек 2 в симуляторе

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

Архитектура модели, которую я выбрал, почти идентична сети NVIDIA для сквозного обучения для самоуправляемых автомобилей (paper here ). Модель имеет пять сверточных слоев и четыре полностью связанных слоя, выглядящих примерно так:

Источник: https://arxiv.org/pdf/1604.07316v1.pdf (NVIDIA paper)

Каждый сверточный слой и полностью подключенный слой имеют активацию ELU, а отсевной слой с 30%-ной скоростью отсева реализуется после каждого сверточного слоя, чтобы помочь предотвратить переобучение в этой большой сети.

Сверточные слои захватывают абстрагированные объекты из изображений. Эти абстрактные объекты подаются в полностью соединенные слои, которые служат в качестве рулевого контроллера. Подробнее о дизайне модели можно прочитать в статье NVIDIA здесь .

Обучение модели

Keras использовался для построения и обучения модели, что обеспечивало быструю и простую реализацию. Был использован оптимизатор Adam, и среднеквадратичная ошибка была сведена к минимуму. Модель обучалась в случайно выбранных партиях из 128 изображений в течение семи эпох, и 20% данных было зарезервировано для проверки. В общей сложности модель была обучена с использованием около 25 000 изображений.

Результаты

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

Моя машина едет по трассе 1 в симуляторе.

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