Обнаружение транспортных средств и пешеходов с помощью обнаружения 3D-объектов в облаках точек LiDAR

Эта статья была изменена 10 марта 2022 г.

Что вы видите, когда закрываете глаза и представляете бульдозер?

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

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

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

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

Хотите узнать о новейших технологиях компьютерного зрения?

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

Подпишитесь на мою рассылку, чтобы получить свой БЕСПЛАТНЫЙ стартовый комплект, и вы сможете больше узнать об этих темах от меня.



Технология LiDAR работает аналогичным образом — она использует лазеры для создания трехмерного восприятия объектов, которые затем можно использовать для таких вещей, как обнаружение объектов и картографирование.

Подробнее о том, как работает LiDAR-сканер, я рассказываю здесь.



В этой статье рассматривается, как обрабатывать облако точек из LiDAR для обнаружения препятствий в 3D в контексте беспилотных автомобилей.

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

В этой статье будет рассмотрен только подход к обнаружению 3D-объектов на основе лидара.

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

В этой статье мы поговорим о неконтролируемом машинном обучении. Хотя это не так точно, как современные нейронные сети, это отличный способ понять, как работать с облаками точек.

Мы используем облака точек LiDAR из набора данных Pandaset от Hesai и Scale AI, набора данных с открытым исходным кодом для автономного вождения, зарегистрированного в районе Силиконовой долины.

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

Мы также можем визуализировать точную локализацию и проложить маршрут на карте Google.

Вы можете получить доступ к данным Pandaset здесь и связанному с pandaset-devkit здесь, который я использовал для объединения кадров LiDAR и построения маршрута на карте Google.

Далее давайте визуализируем и обрабатываем облака точек LiDAR с помощью Open3d. Open 3D — это удобная библиотека для работы с 3D-облаками точек.

Визуализация облаков точек LiDAR и субдискретизация вокселей

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

Визуализация облаков точек LiDAR

Во-первых, давайте визуализируем 3D-облака точек из кадров LiDAR.

В Pandaset данные облака точек LiDAR собираются из вращающегося LiDAR на крыше и твердотельного LiDAR, обращенного вперед.

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

Предварительная обработка облака точек LiDAR с понижением дискретизации вокселей

Затем нам нужно предварительно обработать 3D-облако точек с помощью стандартной техники, называемой понижающей дискретизацией вокселей.

Цель состоит в том, чтобы уменьшить количество точек при сохранении структуры объекта с воксельной сеткой.

Вы можете думать о вокселе как о трехмерном пикселе в форме куба. Чтобы помочь вам лучше визуализировать, на изображении ниже представлен вокселизированный Lamborghini, где каждая 3D-точка является вокселем.

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

Поскольку мы сохраняем только одну 3D-точку на куб, чем больше куб, тем больше точек удаляется.

# Voxel Hyperparameters: voxel_size = 0.20
Output:
Points before downsampling: 2738047 
Points after downsampling: 389849

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

Сегментация и кластеризация облака точек LiDAR

Далее мы будем использовать методы неконтролируемого машинного обучения для обнаружения объектов 3D LiDAR.

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

Сегментация проезжей части в 3D

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

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

Сегментация управляемой области может быть выполнена с помощью алгоритма RANSAC, что означает RANdom SAmple Consensus. Этот алгоритм обнаруживает выбросы и может выполняться в 2D или 3D, в зависимости от варианта использования.

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

В пределах определенного расстояния D между точками и бесконечной плоскостью X, Y, Z эти точки называются выбросами, а находящиеся за пределами D — выбросами.

RANSAC представляет собой трехэтапный процесс:

  1. Взять 3 очка наугад
  2. Подгонка самолета к изображению
  3. Вычислите расстояние между плоскостью и точками.

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

Правая плоскость уместит наиболее значимое количество точек.

Визуализация выше показывает алгоритм RANSAC, работающий в 2D. Аналогично работает с 3D-данными.

Следовательно, гиперпараметрами являются количество итераций и пороговое расстояние.

# RANSAC Hyperparameters
# distance_threshold = 0.3
# ransac_n = 3
# number_iterations = 200

На 3D-кадре выше дорога показана красным цветом после сегментации, а остальная часть — синим.

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

Кластеризация облака точек LiDAR с помощью DBSCAN

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

Здесь мы используем алгоритм кластеризации DBSCAN (пространственная кластеризация приложений с шумом на основе плотности) для создания кластеров 3D-объектов.

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

Гиперпараметры будут эпсилон ε, что представляет собой радиус окрестности вокруг точки, а n будет минимальным количеством точек.

Этот алгоритм следует трехэтапному процессу следующим образом:

  1. Возьмите точку
  2. Найдите соседей на расстоянии эпсилон ε
  3. Разверните, если количество точек больше n, чтобы увидеть соседей.

Алгоритм останавливается, когда расстояние становится слишком большим, и возвращает один кластер.

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

# DBSCAN Hyperparameters: eps=0.45, min_points=10
Output:
[Open3D DEBUG] Done Compute Clusters: 1132

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

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

Вы также можете прочитать о подходе глубокого обучения к 3D-классификации и сегментации с помощью PointNet здесь.



Обнаружение объектов LiDAR 3D с ограничивающими рамками

Последним шагом является добавление 3D-ограничивающих рамок, окружающих объекты LiDAR. Для этого берем метки и группируем их вместе.

Нам также необходимо установить интервал точек 3D-данных, используемых для вывода ограничивающих рамок. В этом случае я выбираю, что ограничивающие рамки будут содержать объекты от 50 до 1000 точек данных.

# Bounding boxes parameters
MIN_POINTS = 50
MAX_POINTS = 1000

Глядя на кадр выше, мы замечаем, что результат неточен и содержит большое количество ложных срабатываний. Также кластеры строятся нечетко без учета характера объекта.

Однако это быстрый подход к построению алгоритма обнаружения 3D-объектов, который можно использовать в качестве основы. Кроме того, если точность не критична, этот подход все еще может быть жизнеспособным и его стоит изучить в зависимости от варианта использования.

Этот результат можно улучшить с помощью алгоритма глубокого обучения.

Заключительные мысли о восприятии 3D с помощью машинного обучения без присмотра

Мы изучили, как обрабатывать 3D-сцену из объединенных облаков точек LiDAR и обнаружение 3D-объектов с помощью машинного обучения.

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





Один из способов улучшить вышеуказанный результат — выполнить обнаружение 3D-объектов с помощью нейронной сети. Подробнее об этом я расскажу в следующей статье.

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