Вот как я приступил к выполнению проекта по обнаружению транспортных средств (P5) в семестре 1 программы Udacity's Self Driving Car Nanodegree. Цели / шаги этого проекта следующие:
- Выполните извлечение функции гистограммы ориентированных градиентов (HOG) на помеченном обучающем наборе изображений и обучите классификатор Linear SVM classifier
- При желании вы также можете применить преобразование цвета и добавить бинированные цветовые функции, а также гистограммы цвета к вашему вектору признаков HOG.
- Примечание. Для первых двух шагов не забудьте нормализовать свои функции и рандомизировать выбор для обучения и тестирования.
- Реализуйте технику скользящего окна и используйте обученный классификатор для поиска транспортных средств на изображениях.
- Запустите свой конвейер на видеопотоке (начните с test_video.mp4, а затем реализуйте на полном project_video.mp4) и создайте тепловую карту повторяющихся обнаружений кадр за кадром, чтобы отбросить выбросы и следовать за обнаруженными транспортными средствами.
- Оцените ограничивающую рамку для обнаруженных транспортных средств.
В этой статье будут рассмотрены первые два шага.
Визуализация данных
Первый шаг всегда - увидеть, что у нас есть. А вот данные от Udacity. Некоторые примеры автомобилей и неавтомобилей, которые у нас есть
Здесь следует отметить, что каждое изображение имеет размер 64x64. И изображений каждого типа около 8к. Что, учитывая, что фоновый класс - это почти все, кроме автомобиля, я думаю, это довольно небольшой набор изображений.
Особенности изображения
Курс предлагает использовать сочетание нескольких функций изображения. И снова мы делаем это обнаружение, используя традиционные методы CV, а не современные архитектуры CNN, такие как YOLO / SSD.
Итак, у нас есть следующие функции изображения вместе со следующими параметрами для каждой функции изображения.
- Пространственное объединение (функции, извлекаемые непосредственно из пикселей изображения): цветовое пространство изображения (часто используется и для других функций); Размер изображения для объединения
- Цветная гистограмма: количество интервалов гистограммы.
- Гистограмма ориентированных градиентов (HOG): используемый канал, ориентация, количество пикселей на ячейку, количество ячеек на блок.
Выбор параметров
Что касается выбора параметров, у нас есть два основных аргумента. Один из них - скорость, мы не хотим ждать целую вечность, пока классификация состоится, и в лучшем случае мы хотим, чтобы это происходило в режиме реального времени. Другой - точность. Таким образом, выбор параметров - это компромисс между этими двумя атрибутами.
Визуализация параметров
Еще раз, ярлык - визуализировать параметры, чтобы получить интуитивное представление о том, как они работают.
Мы видим, что для цветового пространства RGB все 3 канала дают нам очень разный спектр на гистограмме. Так что это выглядит хорошо.
Здесь канал Y дает хорошую разницу, но каналы Cb и Cr выглядят почти одинаково. Так что не похоже на хороший выбор.
Здесь мы видим приличную разницу в канале S и V, но не большую разницу в канале H. Так что, возможно, с точки зрения цветовой гистограммы, RGB и канал S&V HSV выглядят хорошо.
Большой! Теперь давайте визуализируем параметры HOG.
Здесь используются следующие комбинации:
- Ориентации = 8, пикселей на ячейку = (8,8), ячеек на блок = 2
- Ориентации = 9, пикселей на ячейку = (8,8), ячеек на блок = 2
- Ориентации = 8, пикселей на ячейку = (16,16), ячеек на блок = 2
- Ориентации = 9, пикселей на ячейку = (16,16), ячеек на блок = 2
- Ориентации = 8, пикселей на ячейку = (8,8), ячеек на блок = 1
- Ориентации = 9, пикселей на ячейку = (8,8), ячеек на блок = 1
- Ориентации = 8, пикселей на ячейку = (16,16), ячеек на блок = 1
- Ориентации = 9, пикселей на ячейку = (16,16), ячеек на блок = 1
Первый вариант отлично смотрится! Хорошая четкая маркировка для изображения автомобиля и четкая разница между изображением автомобиля и неавтомобиля.
Теперь давайте посмотрим на цветовые пространства в HOG.
Мы получаем почти тот же результат, что и на цветовой гистограмме, что является отличным подтверждением данных. YCbCr дает отличную производительность только для канала Y. В то время как все 3 канала в RGB дают нам разницу. Оттенок в HSV почти аналогичен, но S и V показывают хорошую разницу.
Обучение классификатора
Перед тем, как начать обучение, мы должны убедиться, что все функции нормализованы. Мы можем использовать StandardScaler в sklearn, чтобы заставить его работать легко.
Давайте фактически обучим SVM и проверим точность SVM, чтобы убедиться, что она соответствует данным, которые мы получили. В следующем эксперименте я установил ориентацию свинца на 8, количество пикселей на ячейку - 8, а количество ячеек на блок - 2. Я также установил размер пространственного разбиения на 16x16, а интервалы цветовой гистограммы - на 16.. только вариации - это цветовое пространство.
- Y-канал YCbCr (без пространственного биннинга или цветовой графики): 93,53%
- RGB (все 3) (без пространственного биннинга или цветовой гаммы): 96,07%
- Канал SV HSV (без пространственного биннинга или цветовой истории): 95,97%
- Канал SV HSV (с пространственным биннингом или цветовой историей): 98,51%
- HSV (все 3) (с пространственным объединением или цветовой историей): 98,86%
- RGB (все 3) (с пространственным объединением или цветовой историей): 97,73%
Потрясающие. Итак, у нас есть победители. Это HSV, где H-канал является необязательным (соотношение скорости и точности). Итак, это охватывает часть извлечения функций из Обнаружения транспортных средств.
В качестве альтернативы вы также можете посмотреть на стандартный CNN как на средство для извлечения функций.