Назад
52

Виды представления лидарных данных. Часть 2

52

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

Во второй части статьи вы узнаете:

  • о методах трансформации данных в многоканальные изображения (Bird’s Eye View Projection и Spherical Projection)
  • о методе представления данных как набора векторов (Bag-of-Points)

Первые помогут использовать данные представления в современных методах real-time обработки — обработки без тяжеловесных 3D convolution слоев, а второй активно применяется в задаче классификации.

Bird’s Eye View Projection

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

Результат BEV проекции точек для лидара с поворотным механизмом

Для формирования такого вида представления точек нужно изначально определить конкретные параметры:

\( \delta — частота\ дискретизации \ пространства \ K * \\
K \ метров \ для \ формирования \ одной \ ячейки \ BEV \ представления \)

\( x \in [\min x,\max x] — границы \ значений \ для \ x \)

\( y \in [\min y,\max y] — границы \ значений \ для \ y \)

\( z \in [\min z,\max z] — границы \ значений \ для \ z \)

Границы для координат точек, как правило, необходимы по следующим причинам:

  • разреженность точек в отдаленной от лидара области: по таким точкам сложно точно классифицировать объекты.
  • рост количества вычислений при маленьком значении частоты дискретизации пространства. Приведем наглядный пример расчета итогового изображения:

\( \delta = 0.1 \ метр \)
\( x \in [0,100] \)
\( y \in [-30,30] \)
\( H = \frac{(100 — 0)}{\delta} \)
\( W = \frac{(30 — (-30))}{\delta} \)
\( Размер\ изображения — 1000\times600 \ пикселей \)

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

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

\( {\small Max\ Height — максимальное \ значение \ z \ в \ ячейке} \)
\( {\small Occupancy \in \{0,1\} \ в\ зависимости \ от \ наличия \ или \ отсутствия \ точек \ в \ ячейке} \)
\( {\small Density — общее \ количество \ точек \ в \ ячейке } \)
\( {\small Mean\ Intensity — среднее \ значение \ интенсивности \ в \ ячейке} \)

Для каждого признака используется отдельный канал. Таким образом формируется многоканальное представление входных данных.

Пример визуального представления полученных каналов

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

Spherical (Range Image) Projection

Spherical (Range Image) Projection — метод проекции точек лидарного облака в изображение путем сопоставления сферических координат координатам на плоскости (изображении).

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

Для формирования подобного представления определим следующие преобразования. Воспользуемся методом PBEA (Projection By Elevation Angle).

Преобразуем координаты точек из декартовой системы обратно в сферическую:

\( r = {\sqrt {x^2+ y^2+ z^2}} \)
\( \phi = \arctan(x/y) \)
\( \theta = \arcsin(z/r) \)

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

\( u — индекс\ стобца \)
\( v- индекс\ строки \)
\( h- заданная \ высота \)
\( w- заданная\ ширина \)
\( u = \lfloor\frac{1}{2}(1+ \phi / \pi) * w \rfloor \)
\( v = \lfloor ( \theta_{up} — \theta )(\theta_{up} -\theta_{down) \rfloor } , \)
\( где\ \theta_{up},\theta_{down} — максимальное \ и \ минимальное \ значение\ \theta \)

Для каждого пикселя полученного изображения также вычисляем различные статистики и создаем дополнительные каналы:

Пример сформированных каналов с различными статистиками

В рамках этого преобразования несколько точек могут попасть в идентичную координату. В таком случае пиксель заполняется точкой с наименьшим r.

Bag-of-Points

В рассмотренных ранее представлениях мы опирались на подход hand-crafted features (intensity, range, max_height и тд.) где мы формировали различные признаки на базе интуиции о важности тех или иных статистик для описания данных. Однако подобный подход не гарантирует правильности подобранных признаков для конкретной задачи и требует многих экспериментов. Подход Bag-of-Points предполагает рассмотрение облака как набора индивидуальных представлений точек. Для создания таких представлений мы можем использовать обучаемое нелинейное преобразование в латентное пространство. Часто с такой целью применяется подход PointNet. В частности feature extractor — композиция слоев, расположенных до MaxPool.

Архитектура PointNet

В этом случае на входе мы получаем неотсортированное множество точек лидарного облака, а на выходе — тензор размерностями количества точек * размерность скрытого представления (на схеме выше это 1024).

Важный компонент получения подобных представлений — инвариантность к углам поворота исходного облака. Для нее авторы подхода используют T-Net. Этот модуль — сверточная нейронная сеть, которая предсказывает матрицу аффинной трансформации для входного облака точек.

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

Связанная система координат (Aircraft principal axes)

\( {\small pitch — поперечный\ угол,\ при \ изменении \ поднимается \ нос \ или \ хвост \ самолета} \)
\( {\small roll — \ продольный \ угол, \ при \ изменении \ изменяется \ угол \ крыла} \)
\( {\small yaw — вертикальный \ угол, \ при \ изменении \ самолет \ поворачивается \ по \ часовой \ стрелке} \)

Примеры трансформации положения объектов при изменении углов поворота

С целью трансформации облака точек необходимо инициализировать 3 матрицы для каждого из углов поворота:

\( \theta_x — поперечный \ угол \ поворота \ в \ радианах \)
\( \theta_y — продольный \ угол \ поворота \ в \ радианах \)
\( \theta_z — вертикальный \ угол \ поворота \ в \ радианах \)
\( x(pitch) — \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos(\theta_x) & \sin(\theta_x)\\ 0 & \sin(\theta_x) & \cos(\theta_x)\\ \end{bmatrix} \)
\( y(roll)- \begin{bmatrix} \cos(\theta_y) & 0 & \sin(\theta_y) \\ 0 & 1 & 0 \\ -\sin(\theta_y) & 0 & \cos(\theta_y) \\ \end{bmatrix} \)
\( z(yaw) -\begin{bmatrix} \cos(\theta_z) & -\sin(\theta_z) & 0 \\ \sin(\theta_z) & \cos(\theta_z) & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} \)

Итак, мы определили 3 матрицы поворота (R) для каждого из углов. Теперь производим перемножение матриц и получаем финальную матрицу 3×3:

\( \underset{3\times 3}{\mathrm{R}} = R_{pitch} \times R_{roll} \times R_{yaw} \)

Алгоритм получения матрицы R выглядит следующим образом:

\( input = n*3 , где \ n — количество \ точек \)
\( pred = TNet(input) \)
\( \underset{3\times 3}{\mathrm{R}} = pred \ + {\small \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}} \)

Детальнее граф слоев TNet представлен на изображении ниже:

Архитектура TNet

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

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

  1. Voxel-based
  2. Sparce-Cylinder-based
  3. Polar Bird’s Eye View(BEV) Projection

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!