Беспилотные автомобили с нуля 1

алгоритм

Lanes Finding with Computer Vision

Использование компьютерного зрения для обнаружения дорог обычно включает 6 частей: калибровка камеры, коррекция искажения изображения, пороговое значение цвета/градиента, преобразование перспективы, определение линии дороги (обнаружение линий полосы), измерение кривизны дороги (определение кривизны полосы движения)

Калибровка

Сначала измерьте степень искажения, а затем неискажайте в соответствии с результатом измерения

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

Искажение искажения изображения

Теоретически, пока это не камера-обскура, в основном будет проблема искажения изображения (изображение объектива быстрее, а камера-обскура несравнима)

Искажение изображения повлияет на обнаружение дорог (преобразование прямых линий в кривые), обнаружение транспортных средств (при использовании обнаружения CNN распознанный автомобиль больше или меньше реального)

Искажения, вызванные объективом, в основном два:

  • Радиальное искажение
    Причина в том, что отклонение, возникающее при прохождении света через края линзы, больше, чем отклонение при прохождении света через центр.

  • Тангенциальное искажение
    Причина в том, что свет не падает вертикально на плоскость изображения после прохождения через линзу.

ROI (Region of Interest)

Для обнаружения дороги сначала получите информацию о дороге с точки зрения камеры, а затем выберитеROI (область интереса), включая выбор цвета и область выбора.

Выбор цвета ближе к интуиции, а линии на дороге бывают только двух цветов, либо белые, либо желтые. Белая линия лучше

color selection

Однако если используется желтая линия, исходное изображение нельзя использовать напрямую. Сначала разделите исходное изображение на слои RGB.

yellow line

И желтая линия не видна на синем слое

RGB
(потому что это дополнительный цвет)
光的三原色

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

车头视角
区域选择

Цветовое пространство

В цветовом пространстве RGB (в RGB устанавливается трехмерное пространство) белый цвет состоит из максимального значения трех цветов: красного, зеленого и синего.

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

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

Среди них чаще всего используются HSV (оттенок, насыщенность, светлота) и HLS (оттенок, светлота, насыщенность).

HLS (hue, saturation, lightness)

Также называется HSL, а тем более HSL.

На самом деле само изображение больше всего меняется при ярком освещении, а канал HS вообще сильно не меняется. Итак, мы разделили изображение в соответствии с HSL, желтая линия очень хорошо видна под каналом S.

Canny Edge Detection

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

Рассчитав изменение яркости, исходное изображение можно преобразовать в градиентное изображение.
Затем увеличьте резкость результата, чтобы получить пиксель с наибольшим изменением значения яркости.

На самом деле, прежде чем выполнять алгоритм Кэнни, сделайтеСглаживание по Гауссу / Размытие по Гауссу, чтобы удалить шум и ложные точки градиента

(не по теме) Оператор Собеля

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

Преобразование Хафа

Преобразование Хафа — это классический алгоритм изменения изображения, который в основном используется для поиска набора признаков на изображении, грубо говоря, для обнаружения линий, окружностей и эллипсов.

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

Подвести итог:
Исходное изображение -> Изображение в градациях серого -> Обнаружение краев -> Обнаружение линий -> Отфильтровать прямые линии со слишком низким наклоном -> Наложить окончательный результат обратно на исходное изображение

原图

灰度图&边缘检测

最后结果叠加回原图

Perspective Transform

Из-за существования перспективы 2D-изображения имеют феномен почти большого и очень маленького размера.

Это приведет к тому, что первоначально параллельные полосы сойдутся.
Следовательно, необходимо преобразовать перспективу в вид сверху.
Восстановить линии улиц до параллели

Lane Curvature

Решить проблему кривизны полосы движения на самом деле сложнее. Сначала исправьте исходное изображение по очереди

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

Раздвижные окна

В процессе обнаружения дуг сначала выберите небольшой участок внизу изображения и сделайте гистограмму в вертикальном направлении

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

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

Наконец

Также есть некоторые мелкие детали, в том числе Offset, Sanity Check, Look-Ahead Filter и т. д. Лень рассказывать


Обнаружение автомобиля

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

соответствие шаблону

Для каждого цвета на изображении рассчитайте расстояние от фонового изображения.

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

Эти решения в совокупности называютсяtemplate matching

Color Histogram

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

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

HOG

Гистограмма ориентированных градиентов, функция HOG более надежна, чем предыдущие функции, и игнорирует влияние цвета.

При работе сначала зафиксируйте информацию о контуре и текстуре изображения.

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

Features Combination

Во-первых, это предварительная обработка данных, где в основном выполняется комбинация признаков.

Например, функция HOG предназначена дляинформация о градиентефункции, функции HSV предназначены дляинформация о цветеХарактеристики

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

Sliding Windows

Обнаружение транспортных средств с помощью раздвижных окон, некоторая изобретательность в этом сценарии

Прежде всего, ROI, транспортное средство будет отображаться только в нижней половине изображения.

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

Multiple Detection

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

Учреждатьheat-map, вычислить положение центра

Build Model & Tracking

Выбор модели относительно прост: SVM, дерево решений, нейронная сеть и т. д. Это распространенный выбор.
Для каждого кадра изображения определяется положение транспортного средства для непрерывного отслеживания.


Клонирование поведения

Теоретическая основа использования нейронных сетей для беспилотного вождения основана на имитационном обучении. Поведенческое клонирование — это разновидность имитационного обучения. Идея очень проста: собрать все данные о вождении человека в качестве базовых данных, а затем позволить нейронной сети подобрать эти данные. В настоящее время Tesla в основном использует клонирование поведения.

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

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