Я обучил модель машины опорных векторов (SVM) обнаруживать движущиеся по дороге автомобили. Это пятый проект Курса инженеров-самоуправляемых автомобилей udacity.

Код этого проекта можно найти на: Github.
Эту статью также можно найти на моем сайте здесь.

Проект состоял из следующих этапов:

  1. Выполните проектирование функций в наборе данных.
  2. Обучите классификатор SVM извлеченным функциям.
  3. Реализуйте технику скользящего окна для обнаружения транспортных средств на изображении.
  4. Используйте тепловую карту, чтобы отфильтровать окна, не относящиеся к транспортным средствам, и нарисовать ограничивающую рамку вокруг транспортных средств.
  5. Создайте конвейер и сгенерируйте видео результатов.

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

Всего обучающая выборка содержала 8 793 изображения автомобилей и 8 968 изображений других транспортных средств.

Функциональная инженерия

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

Дескриптор функции HOG был популяризирован исследователями Навнитом Далалом и Биллом Триггсом в их статье «Гистограмма ориентированных градиентов для обнаружения человека». HOG вычисляет распределение ориентации градиента в локализованных частях изображения. Ниже представлена ​​визуализация функций HOG на выборке изображений для каждого из трех цветовых каналов изображения:

Подробное описание того, как рассчитывается HOG, можно найти в этой статье.

Второй используемый дескриптор признака - пространственное объединение; для вычисления этого дескриптора функции использовалась функция изменения размера OpenCV. Функция изменения размера выполняет линейно интерполированную операцию пространственного бинирования при уменьшении размера изображений.

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

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

SVM Обучение

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

В качестве алгоритма прогнозирования была выбрана линейная модель машины опорных векторов (SVM). Я поигрался с гиперпараметрами модели; значение C 0,001 и максимальное количество итераций 10 000 привели к высокой точности около 98%. Ниже приведен код, используемый для реализации модели:

Обучение модели заняло около 12 минут, что является относительно коротким периодом времени для модели машинного обучения.

Поиск в скользящем окне

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

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

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

Пороговое значение тепловой карты

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

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

Следующие изображения показывают пороговое значение тепловой карты, примененное к найденным изображениям:

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

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

Конечный трубопровод

Конечным результатом является конвейер, который для каждого изображения в фиде выглядит следующим образом:

  1. Извлечь все окна поиска из изображения.
  2. Преобразуйте каждое изображение окна в цветовое пространство YCbCr и извлеките функции.
  3. Загрузите каждую функцию в модель SVM и отфильтруйте неположительные совпадения (не транспортные средства).
  4. Примените пороговое значение тепловой карты к положительным совпадениям и нарисуйте ограничивающие рамки.

Трубопровод был запущен на видео вождения автомобиля. Ниже представлено видео, демонстрирующее конвейер в действии: