Автор: Дмитрий Раков Редактура: Марк Страхов

Voxel-based

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

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

$$ \underset{size_y\times size_x\times size_z}{Voxelsize} - размеры \ сторон \ вокселя \ в \ метрах, где \newline size_y - размер\ для\ y\ (длина) \newline size_x - размер\ для\ x\ (ширина) \newline size_z - размер\ для\ z\ (высота) \newline также\ идентично\ BEV\ необходимо\ задать\ зону\ интереса: \newline x \in [\min x,\max x] - границы \ значений \ для \ x \newline y \in [\min y,\max y] - границы \ значений \ для \ y \newline z \in [\min z,\max z] - границы \ значений \ для \ z $$

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

$$ \newline i = int(\lfloor (y − ymin)/Voxlesize_y \rfloor) - индекс \ строки \newline j = int(\lfloor(x − xmin)/Voxelsize_x \rfloor ) - индекс \ стобца\newline k = int(\lfloor (z − zmin)/Voxelsize_z \rfloor) - индекс \ слоя\newline $$

           Визуальное представление воксельной сетки

       Визуальное представление воксельной сетки

Итак, мы изучили формирование воксельной сетки. Теперь давайте перейдем к использованию подобного подхода при представлении лидарных данных. Рассмотрим пример VoxelNet:

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

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

Для создания входного представления применяются следующие шаги:

  1. Формирование воксельной сетки и группировка точек согласно индексу вокселя (это мы рассмотрели выше).
  2. Случайный выбор из множества: в воксель может попасть разное количество точек, поэтому для уменьшения вычислений и приведения пространства к единой размерности мы случайно выбираем T точек среди тех вокселей, где количество точек больше T.
  3. Наборы точек в вокселях приводятся к латентному вектору. Для этого нам нужно совершить следующие преобразования.

На этапе формирования скрытого представления для вокселя мы изначально создаем дополнительные признаки для точек. Это происходит по такому алгоритму:

$$ V - текущий \ воксель \newline V = {p_i = [x_i , y_i , z_i , r_i]^ T ∈ \mathbb{R} ^4}_{i=1...T} - набор \ точек \ попавших \ в \ воксель , \newline где \ xyz - координаты\ точки , r - рефлективность \newline Вычислим \ центроид \ вокселя : centroid = (v_x, v_y, v_z) \newline Расширим\ описание \ точки :\ p_i = [x_i , y_i , z_i , r_i , x_i −v_x, y_i −v_y, z_i −v_z] \newline $$

Затем формируем скрытое представление для каждой точки и делаем агрегацию:

$$ feature_{1..t} = FCN(point_{1..t}), где \ FCN - полносвязная \ сеть \newline feature ∈ \mathbb{R}^m = MaxPool(feature_{1..t}) - финальное \ представление, \newline где\ m - размерность \ представления
$$

Итоговое представление = тензору с размерностями C, D, H, W, где C — размерность скрытого представления, D x H x W — пространственные размерности воксельной сетки.