Обзор

Ранее мы видели, как с помощью аугментации можно увеличить количество обучающих экземпляров, чтобы нейронная сеть с глубоким обучением могла научиться управлять автомобилем в симуляторе. Этот пост с подробностями об использованном методе аугментации можно найти здесь. Однокурсник Мохан Картик продемонстрировал, что наша техника аугментации в сочетании с предварительно обученной сетью VGG 16 дает нейронную сеть, которая может управлять автомобилем на гоночной трассе в симуляторе вождения. Этот пост вдохновил меня на дальнейшее исследование того, насколько хорошо уже существующие модели вождения подходят для симулятора, предоставленного Udacity. Поэтому мы проверим, насколько хорошо модель NVIDIA в сочетании с методами дополнения работает на симуляторе вождения. Мы использовали данные, предоставленные Udacity, для обучения нашей модели NVIDIA.

Дополнение

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

  1. Увеличение яркости: изменение яркости входного изображения путем масштабирования канала V от 0,75 до 1,25 в преобразованном изображении HSV.
  2. Использование изображений левой и правой камеры: для имитации эффекта ухода машины в сторону и восстановления. Мы добавили небольшой угол 0,25 к левой камере и вычли небольшой угол 0,25 от правой камеры. Основная идея заключается в том, что левая камера должна перемещаться вправо, чтобы попасть в центр, а правая камера должна перемещаться влево.
  3. Горизонтальные и вертикальные смещения: мы случайным образом смещали изображения камеры по горизонтали, чтобы имитировать эффект нахождения автомобиля в разных положениях на полосе движения, и добавили смещение, соответствующее смещению угла поворота. Мы также смещали изображения по вертикали на случайное число, чтобы имитировать эффект движения вверх или вниз по склону.
  4. Переворачивание: мы также случайным образом переворачивали изображения и меняли знак прогнозируемого угла, чтобы имитировать движение в противоположном направлении.

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

Мы обрезали верхнюю 1/5 и нижнюю 25 пикселей изображения, чтобы удалить с изображения синюю часть неба и капота автомобиля. Далее мы изменили размер изображения до 200 на 66, чтобы оно соответствовало формату изображения NVIDIA. После увеличения и предварительной обработки изображения, сгенерированные из одного изображения, изменились, как показано ниже.

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

Чтобы протестировать модель NVIDIA, мы просто заменили часть определения модели на модель NVIDIA, как показано ниже.

Модель была реализована в keras следующим образом. Мы не использовали dropout или maxpooling в нашей архитектуре, чтобы оставаться верными модели NVIDIA. Мы использовали экспоненциальные утечки (ELU) для функций активации, потому что ELU имеют более плавные производные на нуле, и, следовательно, ожидается, что они будут немного лучше для прогнозируемых непрерывных значений. Мы также протестировали модель с выпрямленными линейными блоками (ReLU) и отметили минимальную разницу в производительности между двумя сетями.

Обучение:

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

Мы выбрали размер партии 256 и обучили модель 10 эпох. В каждую эпоху было создано 20224 изображения. В первые эпохи мы отбрасывали все изображения с малыми углами, но в более поздние эпохи мы постепенно уменьшали вероятность отбрасывания изображений с малыми углами. Мы не использовали валидацию для выбора окончательной модели, а для проверки правильности реализации схемы обучения. Модель, сгенерированная через 10 эпох, была выбрана для дальнейшего тестирования. Эта модель проехала более двух кругов по трассе 1. Весь процесс обучения аугментации занял менее 10 минут на нашей машине глубокого обучения.

Результат

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

Обобщение от одного трека к другому

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

Благодарности:

Я очень благодарен Udacity за то, что меня выбрали в первую когорту, это позволило мне связаться со многими единомышленниками. Я также благодарен за грант от NVIDA на GPU. Хотя для работы, но и для Udacity использую.