Глубокое обучение, Беспилотные автомобили

Семантическая сегментация и глубокое обучение для моделирования автономного вождения

Резюме (TL; DR)

Я построил модель семантической сегментации в TensorFlow, чтобы прогнозировать углы поворота, чтобы виртуальный автомобиль объезжал трассу в режиме реального времени. Это начальный прототип для изучения и понимания достоинств этого подхода и, в конечном итоге, его тестирования в реальном мире. Примечание: это не учебник по коду, и я пока не решил делиться кодом. Все в стадии разработки!

Мотивация

После окончания 9-месячной программы Udacity Self-Driving Car Nano-Degree в 2017 году мне нужно было почесать зуд и дополнительно изучить некоторые концепции, которые я узнал во время этой программы, и посмотреть, как их можно адаптировать для работы в реальный мир. Я также подумал, что было бы неплохо просмотреть более 10 проектов, над которыми мы работали в течение программы, и объединить некоторые из разрозненных проектов в более крупный, более сплоченный проект, чтобы продемонстрировать то, что я узнал.

Я вспомнил, как работал над проектом Behavior Cloning в качестве одного из моих первых исследований в области глубокого обучения, и был очарован тем, как я смог обучить нейронную сеть управлять виртуальной машиной по трассе. Я смог обучить модель с помощью тысяч образцов изображений и данных рулевого управления, собранных в ходе нескольких тестовых прогонов моего собственного вождения. Предпосылка проекта заключается в том, что, предоставляя изображение и данные о рулевом управлении, полученные от собственной вождения человека, нейронная сеть может быть обучена имитировать поведение рулевого управления человека-водителя при успешном управлении имитируемым транспортным средством по трассе. Более того, при достаточном обобщении этих обучающих данных можно обучить виртуальную машину управлять не только по основному треку, но и по нескольким путям, все с одной и той же моделью нейронной сети.

Предыстория сверточных нейронных сетей

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

Https://brohrer.github.io/how_convolutional_neural_networks_work.html

Для типичной задачи классификации формулировка состоит в том, чтобы отобразить изображение как N-мерный вектор входных пикселей на метку как вектор вероятностей классификации, причем каждая вероятность представляет вероятность того, что изображение относится к этому типу класса. Для классификации изображения с роботом идеальным результатом был бы вектор метки [1,0, 0,0], учитывая, что первый класс - «робот», а второй класс - «не робот».

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

Для последнего плотного слоя выходными данными является набор значений, называемых «логитами», которые представляют немасштабированные оценки для каждого из классов идентификации. Затем они загружаются в слой активации softmax, и нелинейная функция используется для выражения вероятностей классов как нормализованного набора вероятностей. Для данного изображения с известной классификацией на этапе обучения применяется вектор с горячей меткой для изображения, вычисляется ошибка между выходными значениями и значениями меток, а затем эта ошибка распространяется в обратном направлении как функция потерь для минимизации в течение количество итераций. В конце концов, веса сети на каждом уровне настраиваются так, чтобы «воспринимать» различные характеристики классов через эту иерархическую структуру уровней.

В исходном объеме задания Behavior Cloning я применил сквозную архитектуру ConvNet NVidia для решения проблемы логического вывода определения угла поворота по изображениям с нескольких датчиков камеры. Этот подход представляет собой интересное использование ConvNet, которое решает проблему регрессии, а не проблему классификации. Архитектура в основном такая же, как и в случае применения к задаче классификации с отсутствием слоя активации Softmax и только одним выходным значением вместо вектора вероятностей N классов. В этом случае метка теперь представляет собой угол поворота, а не вектор класса one-hot. Обучение, по сути, такое же, как и модель классификации, со сверточной иерархией, выполняющей те же интерпретации подструктур, однако с той разницей, что распознавание и местонахождение паттернов в этих подструктурах в изображении будет вносить вклад в не- линейная функция, которая является окончательным выходным значением угла поворота.

Недостатки

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

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

Хотя для любой контролируемой формы машинного обучения следует ожидать сбора правильно размеченных и разнообразных данных, основная проблема в этой области поведенческого клонирования - научить сеть `` самокорректироваться '', учитывая, что она неизбежно сбивается с курса. какой-то возможный момент. Это предполагает, что человек-тренер собирает примеры обучения тому, как направить автомобиль обратно к центру дороги в различных ситуациях. При обучении человека вождению автомобиля не обязательно быть настолько явным, это не интуитивно понятно, так как тренеру придется гадать, насколько разнообразными должны быть эти примеры коррекции и сколько из них нужно собрать, чтобы улучшить обучение. Чтобы усложнить задачу сбора данных, при сборе примеров коррекции тренеру, несомненно, придется увести машину подальше от центра дороги, чтобы настроить сценарии коррекции. Эти примеры должны быть полностью исключены из обучающей выборки, поскольку они противоречат цели удержания автомобиля на дороге. Как следствие, при таком подходе требуется некоторая строгая и сложная фильтрация данных для достижения высокой точности в правильном моделируемом поведении.

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

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

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

Если вам интересно, отличный ресурс о том, почему нейронные сети являются «черными ящиками», можно найти в видео ниже.

На пути к семантической сегментации

ConvNet, использованная в исходном проекте Behavioral Cloning, предназначена для непосредственной генерации углов поворота из пикселей камеры. Однако после изучения других сетевых архитектур привлекательным стал потенциал использования сети семантической сегментации, или сокращенно FCN, для решения этой проблемы другим способом.

FCN - это сеть, которая классифицирует каждый пиксель исходного изображения. Сеть обучается путем предоставления входного изображения и изображения метки. Изображение метки имеет те же размеры, что и входное изображение, при этом каждый пиксель идентифицирует класс объекта, который представляет соответствующий пиксель во входном изображении. После обучения сети выходные данные сети представляют вероятности того, что каждый пиксель является частью данного класса объектов. Например, если FCN обучен определять между пикселями бездорожья и дороги для заданного набора из N входных пикселей, то выходом FCN будет вектор размерности 2 * N с вероятностями каждого пикселя, представляющего часть дороги или бездорожье. Это может быть расширено до многих классов, поэтому различные объекты могут быть идентифицированы на изображении за один проход через FCN.

Кроме того, FCN состоят из двух основных этапов: этапа кодирования, который будет представлен типичной ConvNet, и этапа декодирования, который будет представлен обратными операциями этой ConvNet. Обычно это достигается с помощью комбинации сверток 1x1 и транспонированных сверток, которые мультиплексируют и повышают дискретизацию выходных данных ConvNet до исходного размера входного изображения. Из-за этой понижающей выборки, за которой следует структура повышающей выборки, они называются полностью сверточными сетями ( сокращенно FCN ).

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

Использование FCN имеет некоторые недостатки. Они более сложные, имеют гораздо больше сетевых параметров, чем классификатор / регрессия ConvNet, и поэтому требуют больше времени для обучения и вывода. Они также требуют дополнительных затрат на обучение, поскольку FCN используют более сложные помеченные данные, которые включают попиксельную классификацию, а не одно значение для каждого изображения в традиционном случае классификации. Маркировка сегментированных изображений может быть трудоемкой задачей, поскольку для точной маркировки может потребоваться ручной процесс, выполняемый человеком.

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

Создание нового решения с семантической сегментацией

Учитывая преимущества использования FCN, я быстро захотел создать новый прототип, чтобы проверить, насколько хорошо сеть будет работать по сравнению с исходным решением. Я предвидел, что окончательное решение потенциально может работать двумя способами:

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

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

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

Создание и обучение FCN

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

После некоторого исследования с различными статьями я обнаружил архитектуру ENet, которая является одной из самых быстрых FCN, которые я мог найти с работающим репозиторием GitHub от первоначальных авторов и нескольких других. Сеть была предварительно обучена на CityScapes, наборе данных из 5000 семантически сегментированных изображений видеорегистратора и меток городского движения. Сеть предлагает 15+ FPS на платформе NVIDIA TX1, а также хорошую точность (81 mIOU) на CityScapes. Эта сеть по существу проверяет все блоки требований и будет очень полезна при реализации на первом этапе.

После оценки этого на некоторых изображениях симулятора камеры, хотя и не ужасно, точность сети оказалась недостаточно высокой для использования без точной настройки. Самый важный класс объекта, дорога, работал в определенной степени, но многие обнаружения были достаточно некорректными, чтобы повлиять на определение формы дороги. Цель состоит в том, чтобы произвести семантически маркированный результат, который обычно повторяет контур дороги. Причина этой потери точности связана с двумя факторами. ENet предварительно обучен на реальных изображениях видеорегистратора из набора данных CityScapes, а не на смоделированных изображениях с виртуальной гоночной трассы. Таким образом, особенности, которые он обучен обнаруживать, не включают в себя некоторые особенности на смоделированных изображениях, такие как красно-белые полосы на плечах и мосты из булыжника. Кроме того, разрешение изображения CityScapes (1024x512) также намного выше, чем разрешение камеры симулятора (320x160), что приведет к большим различиям в обнаружении объектов из-за того, что слои ConvNet не масштабно инвариантны.

После посредственных результатов первоначальной оценки следующим шагом была доработка сети. Тонкая настройка включала дальнейшее обучение сети с использованием изображений и меток симулятора, а также уменьшение количества обнаруженных классов объектов. Набор данных CityScapes включает 19 классов объектов и 1 «другой» класс, однако для этого прототипа было необходимо только 2 класса: дорога и другие. Таким образом, тонкая настройка включала уменьшение размера декодера, а также создание семантически сегментированных меток для новых обучающих данных. Сеть была настроена для 100 эпох с использованием TensorFlow с 800 изображениями симулятора в качестве обучающего набора и 100 изображений в качестве набора для проверки. Никакого существенного увеличения данных не использовалось (только зеркальное отображение изображения). Время обучения на NVidia 1050ti заняло примерно 20 минут.

Выше показаны некоторые качественные результаты изображения до и после точной настройки. Верхнее изображение является исходным образцом, среднее изображение показывает результаты исходной обученной модели ENet CityScapes, нижнее изображение показывает результаты после точной настройки. Среднее изображение правильно определяет большинство пикселей дороги, выделенных пурпурным цветом, однако неправильно интерпретирует красно-белую обочину как часть дороги. Точно настроенная модель дает более точный результат, покрывая почти все участки движения, при этом отфильтровывая обочину дороги. Не-пурпурные метки в исходной модели ENet являются предсказаниями типов классов, не относящихся к дорогам. Доработанная модель ориентирована только на 2 класса: дорожный (пурпурный) и внедорожный.

Автоматическое создание этикеток

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

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

Хотя подход был нетривиальным, мне удалось сгенерировать алгоритм, который будет выбирать пиксели на основе пороговых значений адаптивного цветового пространства. По сути, алгоритм работает путем преобразования изображения в несколько различных цветовых пространств, а затем динамической корректировки набора нижних и верхних пороговых значений для значений пикселей, которые попадают в эти границы. После этой начальной фильтрации я применил фильтры топологии, чтобы найти смежные области пикселей, а затем построил линии регрессии на границах области, чтобы определить «края» дороги на изображении. Для этого я сделал предположение, что все соответствующие изображения с камеры потребуют, чтобы эго-транспортное средство двигалось по поверхности дороги, а не за ее пределами. Я чувствовал, что это безопасное предположение для тренировочных целей, поскольку цель этого агента - вести машину, пока она находится на известной дороге, а не на бездорожье.

Теперь вам может быть интересно, могу ли я автоматически создавать метки изображений, обнаруживая пиксели дороги, тогда зачем вообще создавать нейронную сеть для определения пикселей дороги? Есть несколько причин. Во-первых, генератор этикеток не всегда был на 100% правильным - есть много крайних случаев, которые нужно было бы маркировать вручную, хотя автоматизированное решение значительно сократило человеческие усилия. Во-вторых, нейронная сеть будет гораздо более оптимизирована и лучше обнаруживает нюансы многих типов дорог, чем полагаться на подход компьютерного зрения. Поскольку при обучении была важна точность, производительность фильтрации генератора этикеток была намного медленнее, чем требуемая производительность в реальном времени. В-третьих, нейронная сеть может быть переобучена для обнаружения не только дорог, если в конечном итоге к меткам будет добавлено больше классов, тогда как для обнаружения нескольких классов объектов потребуется реализовать ансамбль фильтров компьютерного зрения. Это, несомненно, будет работать медленнее, поскольку поддерживаются дополнительные типы классов.

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

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

Архитектура этой части сети была очень простой; это будет сеть с прямой связью, состоящая из двух плотных слоев, первый из которых использует вероятности softmax пикселей из выхода FCN в качестве новых входов, а второй заканчивается одним выходным нейроном, представляющим угол поворота. Между двумя уровнями в модель была введена функция активации PreLU как нелинейность. Кроме того, к слоям была добавлена ​​регуляризация L2, чтобы предотвратить чрезмерную подгонку весов модели.

Обучение для этой части сети будет включать только эти два последних слоя, поэтому веса слоев FCN были «заморожены», то есть были сделаны доступными только для чтения, поэтому обратное распространение функции потерь проходило только через эти два слоя, а не на всю модель. . Я расскажу больше о преимуществах этой изоляции в приведенной ниже оценке. Метка для этой части сети - это целевые углы поворота, поэтому сеть узнает лучший угол поворота для заданных входных пикселей дороги.

Чтобы определить метки угла поворота, я решил использовать простую эвристику вместо предоставления собранных выборок данных об угле поворота, управляемой человеком. Эта простая эвристика состоит в том, чтобы взять дорожные метки, используемые для обучения FCN, определить левый и правый край области дороги, а затем вычислить набор средних точек между двумя линиями по всем горизонтальным рядам на изображении с камеры. С некоторыми предположениями об ориентации камеры это даст приблизительную центральную линию дороги. Достаточно удаленная точка на этой линии от камеры будет обозначать точку, в которую должен двигаться автомобиль, чтобы продолжить движение по дороге. Используя эту точку выборки и некоторую простую тригонометрию, угол поворота рулевого колеса с точки зрения водителя может быть приблизительно определен.

Если задуматься о том, как человек будет интуитивно водить машину, это примерно подобная модель для рулевого управления. Глаза водителя будут сосредоточены на точке, находящейся относительно далеко впереди транспортного средства по пути дороги. При повороте к этой точке автомобиль будет оставаться в пределах полосы движения и у него будет достаточно времени, чтобы среагировать и применить минимальную коррекцию ошибок. Однако, если водитель постоянно выбирает точку недалеко от транспортного средства, он может позволить себе меньше времени на реакцию, чтобы компенсировать перебег или недолёт на предполагаемой траектории. В этом случае оценка с использованием достаточно удаленной точки важна для минимизации ошибки путем вычисления дельта угла поворота на большем расстоянии. Для эвристики, используемой в алгоритме, я выбрал подходящую точку заголовка, которая была на фиксированное количество пикселей перед обнаруженной линией горизонта в районе дороги. Для крутых поворотов, когда виден только один край дороги, точкой направления станет точка, в которой видимый край дороги пересекает край изображения с камеры.

Имея средства для расчета угла поворота по форме дороги, я смог обучить модель с помощью TensorFlow. Модель обучалась в течение 10–15 эпох, прежде чем сойтись к минимальному среднеквадратичному среднему значению углов поворота для проверочного набора. Однако необходимо обсудить важную концепцию, касающуюся несбалансированности этикеток. Чтобы правильно построить модель для поворота под любым подходящим углом, модель должна равномерно тренироваться во всем диапазоне допустимых углов поворота. Для этого набора данных существуют гораздо более вероятные углы поворота, чем другие, что вызывает дисбаланс в распределении углов поворота. Например, на тренировочном треке было несколько поворотов и несколько прямых участков, что приводило к большему количеству случаев поворота под меньшими углами, чем под большими углами. Другая проблема заключается в том, что вывод - это регрессия, существует непрерывный диапазон значений для вывода, но только конечное количество выборок, с которыми можно тренироваться.

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

w (x) = median_frequency (X) / frequency (x),
где median_frequency (X) - это медианная частота всего распределения выборки, частота (x) - частота конкретной ячейки выборки x, w ( x) - вес бункера для пробы x

Оценка

Для количественной оценки точности сети потребуется набор углов поворота рулевого колеса для наземной проверки для расчета потерь на основе значений, полученных в результате логического вывода. В качестве справедливого сравнения набор тестов был создан с использованием того же метода автоматической маркировки, который использовался для создания данных обучения и проверки. В случаях, когда автоматическая маркировка не удалась, использовалось приближение, помеченное человеком. На приведенном ниже графике точность разбита по углу поворота для учета неравенства распределения. Среднеквадратичное значение для выходных данных теста довольно высокое (ошибка более 1 градуса; ошибка более 3 градусов для более высоких углов поворота), в то время как валидация была намного ниже. В настоящее время я тренировался только с ограниченными данными и оценивал по одному треку, поэтому эта модель переоценивает данные и есть возможности для улучшений.

Я также записал видео модели в действии на трассе для качественной оценки. В правой части видео показан вид датчика камеры, выходной сигнал FCN и направление поворота на основе выходного значения угла поворота из последнего слоя сети (белая линия). Вы заметите, что результаты семантической сегментации неточны; на дороге много пробелов, и часто есть неправильно спрогнозированные участки дороги ближе к горизонту. Однако по этим зашумленным данным можно вывести грубый контур дороги (см. Наложение зеленого цвета). Это представление о том, что вторая половина сети настроена "воспринимать" из этого вывода FCN. На основании этого будет произведена оценка окончательного угла поворота.

Вы заметите, что машина раскачивается из стороны в сторону, и это очень заметно ближе к концу видео. Это связано с ошибками как в прогнозировании пикселей дороги, так и в оценках угла поворота. Что касается прогнозов дороги, в конце видео показаны доказательства того, что модель генерирует шумные прогнозы во время движения по мосту из булыжника. Переход от моста к асфальту дороги, по-видимому, имеет ошибки прогнозирования, которые, скорее всего, приводят к тому, что автомобиль неправильно определяет направление дороги. Чтобы решить эту проблему, необходимо больше данных об этом переходе или дальнейшем увеличении данных для улучшения набора обучающих данных. Что касается незначительных колебаний, основная причина заключается в том, что симулятор вносит задержку в обновление угла поворота рулевого колеса около 0,25 секунды, как небольшую попытку смоделировать время, необходимое для поворота рулевого колеса. Модель не обучена оценивать и компенсировать это, что приводит к задержкам обновления рулевого управления после прогнозирования и возможному превышению заданной траектории. Для уменьшения этого эффекта используется ПИД-регулятор, однако необходима дальнейшая настройка.

Если смотреть не только на производительность, то эта сеть была гораздо более сговорчивой и податливой в обучении и моем понимании того, что настраивать. Например, был случай, когда в прогнозах присутствовал значительный шум, что приводило к большим отклонениям в прогнозируемых углах. Анализируя выходные данные FCN, я смог убедиться, что в пикселях были довольно плохие и нестабильные прогнозы, основной причиной которых была ошибка настройки гиперпараметров при пакетной нормализации. После исправления прогнозов FCN следующей задачей было настроить углы поворота так, чтобы было меньше колебаний. Настройка эвристики для тренировки угла поворота и повторное обучение второй половины сети помогли улучшить результаты.

Таким образом, этот подход выгоден по нескольким причинам. Во-первых, изоляция между этапом обучения семантической сегментации и обучением угла поворота позволяет упростить настройку и отладку случаев сбоя. Путем независимой настройки слоев сети обучающий имеет больший уровень контроля над моделированием правильного вывода логического вывода. Во-вторых, эвристический подход к моделированию угла поворота позволяет избежать ошибок при сборе вводимых пользователем данных для обучения и предлагает еще один гиперпараметр для настройки для большего контроля. В-третьих, эта сетевая архитектура представляет собой гораздо более дальновидный подход к расширению ее возможностей для обнаружения новых типов объектов и их местоположений, таких как другие транспортные средства. Что касается недостатков, эта структура сети не так оптимизирована, как исходная сеть, и требует ускорения графического процессора для работы в реальном времени. Кроме того, необходима дополнительная предварительная обработка для маркировки обучающих данных, тогда как в исходном решении обучающие данные не обрабатывались.

Дальнейшие действия

После того, как я достиг своей цели по созданию прототипа этой новой сети семантической сегментации, мои следующие цели заключаются в следующем:

  1. Выясните, будет ли алгоритмический подход к определению кривизны дороги более точным, чем нейронная сеть. Это потребует замены второй половины сети после FCN алгоритмом компьютерного зрения для оценки кривизны дороги с течением времени. Это может привести к созданию дополнительных гиперпараметров для дальнейшего настраиваемого управления управляющим агентом.
  2. Изучите влияние увеличения данных на FCN. Добавление большей сложности к предварительной обработке обучающих изображений с помощью геометрических аффинных преобразований, отсечения, искажений цвета и контраста может помочь обобщить модель семантической сегментации и обеспечить более плавные и точные прогнозы.
  3. Протестируйте этот метод на новых наборах данных и треках. Я хотел бы потенциально протестировать модель рулевого управления на других треках симулятора, а также на реальных наборах данных о вождении!