CV-задачи над 3D-данными
Введение
В статье мы рассмотрим классические задачи CV в домене работы с 3D-данными — классификацию, детекцию, сегментацию. Обсудим отличие этих подходов от методов решения под 2D, а также познакомимся с ключевыми алгоритмами — бейзлайнами для каждой из задач. Давайте начинать 🙂
Источники 3D-данных
Одна из основных задач 3D CV — получение и анализ трёхмерных данных. Для них существуют различные источники, каждый из которых имеет свои особенности и применение. Давайте рассмотрим некоторые из них.
- Лазерный сканер (Lidar)
Lidar использует лазерные лучи для создания облака точек, описывающего реальную сцену в пространстве. Это устройство позволяет получать высокоточные данные — иногда точность может быть миллиметровой. Поэтому такое устройство применяется в качестве не только источника данных, но и надёжного измерительного прибора.
- TOF-камеры
TOF-камеры были придуманы как альтернатива дорогостоящим сенсорам лазерного сканирования. В основе их работы лежит использование двух элементов — источника света (лазер) и считывающей матрицы. Свет, излучённый источником, отражается от поверхностей перед камерой и проецируется на её матрицу. За счёт анализа времени отражения внутренний процессор камеры позволяет рассчитать, как далеко расположен каждый пиксель финального изображения.
- Стереопары
Стереопара камер основана на стереозрении — бинокулярном восприятии глубины человеком. Этот подход использует две камеры, установленные рядом друг с другом для имитации работы наших глаз. Каждая камера снимает свою версию сцены, но с разных ракурсов.
📌База стереопары — различие в угловом положении между камерами. Зная это расстояние, а также пары точек объектов перед нами (с левой и правой камеры), мы можем вычислить расстояние до объектов, видимых с обеих камер.
При помощи алгоритма вычисления карты диспарантности мы можем получить глубину для каждого пикселя и трансформировать её в облако точек.
- Рендеринг и симуляция
C помощью разных методов работы с компьютерной графикой возможно получить сцены, представленные в виде облаков точек. Кроме того, из них мы можем получить также данные в формате 3D-меша посредством триангуляции. Их используют в качестве источника данных в задачах 3D CV.
- Фотограмметрия
Фотограмметрические методы используют набор фотографий для реконструкции трёхмерного пространства. С помощью сопоставления визуальных дескрипторов на изображениях и техники Sructure from motion или multi view stereo можно получить облако точек за счёт решения задачи реконструкции по набору изображений сцены, полученных с разных положений камеры.
Представление 3D-данных
Итак, мы разобрались с основными подходами, которые позволяют получить облако точек в 3D-формате. Давайте теперь рассмотрим, что мы получим из каждого подобного сенсора перед началом обработки. Облака точек будут представлены в следующем виде:
\( x,y,z — \text{координаты точки в пространстве} \\ i — \text{интенсивность отраженного сигнала (в случае с Lidar)} \\ r,g,b — \text{цвет пикселя (в случае с фотограмметрией или рендерингом)} \)
В отличие от 2D-данных, здесь у нас есть набор неупорядоченных данных, нерегулярно распределённых в пространстве перед сенсором. Это усложняет их представление на входе в алгоритм компьютерного зрения для обеспечения эффективной обработки на современных вычислителях (в том числе и на GPU). В случае с нейронными сетями, как правило, все вычисления производятся в матричном виде, что приводит к необходимости представления 3D-данных в подобном формате. Давайте познакомимся с ними 🙂
Есть три группы представления лидарных данных для алгоритмов:
- Набор точек Алгоритм получает на вход матрицу размером
\( n×m \) , где \( n \) — количество входных точек, а \( m \) — число значений, описывающих каждую точку облака. Такой способ подразумевает использование подходов, которые задействуют информацию о совместном расположении точек в пространстве, используя координаты \( x,y,z \) каждой точки для нахождения и агрегирования её соседей. Это делается для выделения пространственных признаков, последующего прореживания набора входных данных и, следовательно, сокращения времени обработки. Подробнее об этом можно почитать в нашей статье (абзац «Bag-of-Points») 🙂 - Проекция
Метод помогает сократить количество степеней свободы в данных с помощью их проекции на одну из плоскостей. Например, на вид сверху (Bird’s eye view projection), где данные разбиваются через заранее заданную координатную сетку, определяемую на пространстве \( x,y \). Для каждого индекса вычисляется набор \( N \) статистик — он описывает точки, попавшие в ячейку. В результате получается \( N \)-канальное изображение. Также можно сделать проекцию точек на плоскость камеры (Range view projection) и получить представление данных, максимально напоминающее изображение. Такой вид проекции достигается за счёт сопоставления набора сферических координат каждой точки облака и размеров матрицы, на которую мы хотим их спроецировать. Детальнее об этом мы рассказывали в той же нашей статье (абзацы «Range view» и «Bird’s eye view») 🙂
- Воксельная сетка
Представление 3D-данных с помощью воксельной сетки обеспечивает сохранение всех степеней свободы в данных, но при этом ограничивает диапазон координат, в зависимости от размера сетки.При этом оно преобразует их в вид тензора для эффективной обработки данных на GPU. Однако следует отметить, что это влечет за собой создание множества пустых ячеек — «вокселей». Но мы потратим вычислительные ресурсы впустую, если не будем использовать специализированные алгоритмы обработки, заточенные под разреженные матрицы. Об этом мы подробнее рассказывали в нашем посте 🙂
Классификация
В задаче 3D-классификации нам необходимо определить класс объекта по облаку точек (или по 3D-мешу). Здесь есть следующие особенности:
- объект, представленный облаком точек, имеет разные варианты поворота и сдвига в пространстве за счёт большего количества степеней свободы в сравнении с изображением — алгоритм классификации должен быть робастным к таким изменениям;
- результаты сканирования (или другого варианта получения данных) могут иметь шумы, что, в свою очередь, создаёт отсутствующие (или лишние) точки внутри облака — алгоритм для обработки данных должен быть робастным к пропускам.
Для решения задачи классификации используется ряд популярных методов — давайте рассмотрим их подробнее.
Pointnet и Pointnet++
PointNet и PointNet++ (его усовершенствованная версия) — основные подходы к решению подобных задач. Здесь в сеть, состоящую из слоёв на базе MLP и слоёв для предсказания матрицы вращения (необходимых для обеспечения устойчивости к повороту), подаётся набор исходных точек облака.
Чтобы снизить затраты на обработку данных, а также агрегировать информацию о соседних точках на стадиях между блоками обработки, мы используем алгоритм Furthest point sampling. Он позволяет семплировать только удалённые друг от друга точки и избежать сохранения дублирующих или близко лежащих точек.
Преимущества:
- модель реализована во многих фреймворках, часть операций (например, семплирование) имеет эффективную CUDA-реализацию;
- модель является компактной и может быть применена к любым облакам точек без специфического препроцессинга.
Недостатки:
- при большом количестве точек качество классификации снижается;
- время на семплирование с использованием алгоритма Futhest point sampling значительно дольше при большом количестве точек, оно также будет доминирующим относительно других частей алгоритма.
KPConv
KPConv адаптирует использование алгоритма свёртки к неупорядоченным наборам точек. Для этого реализуются стадии предобработки, с их помощью мы определяем наборы точек, над которыми выполнится операция свёртки. Процесс включает следующие шаги:
- для каждой точки вычисляются её ближайшие соседи с помощью анализа попадания точек в сферу, центр которой находится в текущей точке;
- для каждой из точек, попавших в локальное «облако», динамически определяются веса фильтра на основе вычисления функции расстояния между этой точкой и заранее заданными точками фильтра (аналогично алгоритму линейной интерполяции).
Затем с помощью матрицы весов для каждой из текущих точек локального облака мы вычисляем свёртки с использованием нормализованных координат.
Описанный подход был развит авторами — его начали применять к предсказанию позиций весов фильтра, аналогичного deformable convolution. Их координаты теперь динамически смещаются на основе входных данных, что позволяет улучшать точность относительно фиксированного подхода.
Преимущества:
- используемый механизм обработки учитывает как пространственную структуру облака, так и влияние окрестности каждой точки на результат выделения признаков;
- подход не является чувствительным к количеству точек и применяется к облакам с различной плотностью;
- фильтрация точек специфичными алгоритмами заменяется на пулинг.
Недостатки:
- основной слой обработки не является классическим примитивом — для эффективного использования нужна реализация на CUDA, что также ограничивает деплой на отличных от Nvidia платформах;
- помимо классических гиперпараметров необходимо настроить значения количества точек фильтра, радиус сферы для поиска соседей.
Point Transformer
В то время, как во многих задачах CV лидирующие позиции по метрикам занимают модели на базе трансформеров, в рамках 3D CV подобный ресёрч остаётся актуальным. Один из примеров адаптации трансформеров для работы с облаками точек — алгоритм Point Transformer. Идейно он схож с Pointnet++ и оперирует поверх массива сырых точек. но здесь появляются некоторые изменения:
- поиск локальных соседей для расчёта внимания с помощью KNN;
- позиционное кодирование на базе относительного расположения точек облака;
- вычисление attention между текущей точкой и каждым локальным соседом с последующей агрегацией.
Преимущества:
- добавление блоков внимания и позиционного кодирования, учитывающего положение точек относительно друг друга, значительно улучшает качество.
Недостатки:
- архитектура всё ещё содержит блоки семплирования;
- за счёт использования attention с ростом количества точек время исполнения увеличивается экспоненциально.
Изменения следующих версий алгоритма, Point Transformer v2 и v3, позволили решить ряд описанных проблем и значительно ускорить модель на больших облаках точек.
💡Если хотите научиться решать задачи 3D CV уже сейчас, то приходите к нам на курс! Вы научитесь работать с лидарными данными, создавать цифровые аватары людей, 3D-модели по 2D-фото и поймёте математику, стоящую за алгоритмами.
Последний поток в формате онлайн-лекций в Zoom стартует 8 октября.
Запишитесь в лист ожидания 25 сентября, чтобы получить самую большую скидку!
Детекция
Задача 3D-детекции с использованием одного из вариантов представления данных требует получения координат bounding box, описывающих объекты в 3D. Отметим особенности такой задачи:
- помимо регрессии по двум углам прямоугольника (или центру, ширине и высоте), как в 2D, здесь необходимо оценить глубину и угол поворота объекта (без поворота при разметке объектов в 3D могут захватиться лишние точки, не относящиеся к объекту);
- параметры представления данных оказывают значительное влияние на качество обнаружения объектов. Например:
- при методах проекции за счёт сокращения степеней свободы и упаковки данных в регулярную сетку теряется информация, что снижает возможность обнаружения мелких объектов (в случае Bird Eye View) или объектов на расстоянии (при Range Projection), а также затрудняет определение высоты или глубины bounding box;
- обработка на основе сырых точек требует разработки специфических алгоритмов для выбора точек, по которым будут предсказаны координаты объектов и их классов;
- при воксельных сетках выбор их параметров значительно влияет на результат, поскольку необходимо найти баланс между затратами на обработку и максимальным размером вокселя, не влияющим на ухудшение качества;
- выбор архитектуры для вычислительной платформы является важным аспектом: многие алгоритмы 3D-детекции используют специфические слои или оптимизации, которые доступны только на определённых платформах и часто не имеют эффективные открытые реализации.
Для решения детекции объектов по 3D-данным используется несколько ключевых архитектур.
3DSSD
📌3DSSD — алгоритм обработки на основе сырых 3D-данных.
Здесь используется подход, похожий на PointNet++: сырые точки сначала проходят через MLP-слои, затем небольшое количество точек выбирается с помощью алгоритма FPS.
Кроме того, в 3DSSD учитывается сходство латентных представлений точек, что проявляется в использовании параллельной ветки Feature-FPS для семплирования. Для реализации детекции авторы использовали anchor-free подход, аналогичный FSOC. Точки в окрестностях координат целевых объектов считаются положительными с учётом близости к центру ограничивающего 3D-прямоугольника. Следовательно, мы вычисляем как ошибку классификации, так и ошибку регрессии.
Преимущества:
- многие слои архитектуры являются стандартными, что облегчает развёртывание на различных платформах;
- имеется высокая скорость исполнения;
- качество детекции соотносится с более медленными подходами.
Недостатки:
- как и в случае с PointNet, наличие семплирования является «узким» местом алгоритма;
- качество детекции сильно зависит от результатов правильного семплирования финального набора точек, для которых предсказывается bouning box. При удалённых объектах на сцене, где изначально находится мало точек (10-15), это может быть критично — в результате семплинга алгоритм способен пропустить точку для предсказания координат подобного объекта.
PointPillars
📌PointPillars — метод, основанный на применении проекции на плоскость (BEV) облака точек. Плоскость получена путём усреднения латентных векторов точек каждой клетки, сформированных обучаемым слоем.
Такой подход позволяет отказаться от использования вручную заданных статистик для каждой из клеток, сохраняя при этом 3D-тензор вместо 4D при воксельной сетке. Это, в свою очередь, обеспечивает возможность real-time инференса даже на некоторых одноплатных компьютерах.
Если абстрагироваться от детального описания трансформаций входных данных, то PointPillar — классический одностадийный anchor-based детектор, где помимо координат x и y алгоритму необходимо предсказать угол поворота и высоту bounding box над плоскостью земли.
Преимущества:
- бейзлайн с наибольшим количеством имплементаций в открытом доступе, реализованеый во многих библиотеках (есть готовая оптимизированная версия для фреймворка TensorRT);
- наилучшая скорость на KITTI при довольно хорошем качестве.
Недостатки:
- изначальная архитектура лишена современных подходов, улучшающих качество, что сказывается на возможности получения высоких значений метрик на сложных задачах;
- BEV-представление не способно качественно находить объекты с малым количеством точек, что не позволяет полноценно использовать архитектуру при обнаружении людей на дальних расстояниях.
CenterPoint
📌CenterPoint — метод, не уступающий по популярности PointPillars, где вместо проекции на плоскость (BEV) используется представление в виде воксельной сетки. Это расширяет возможности алгоритма и повышает качество при сложных задачах.
Основная идея алгоритма — совмещение энкодера Voxelnet с использованием Sparse Convolution, что позволяет эффективно обрабатывать разреженные тензоры. Стоит отметить: этот модуль реализован в таких библиотеках, как Spconv и TorchSparse++.
Финальная часть алгоритма основана на одном из родоначальников anchor-free детекции — CenterNet. В качестве окрестности для выбора позитивных точек используется радиус гауссианы с центром объекта из разметки.
Кроме того, подобный вариант предсказания удобно как применять для целевой задачи, так и переиспользовать для трекинга.
Преимущества:
- как и при PointPillars, большое количество имплементаций (в том числе и TensorRT), Spconv также включается в реализацию;
- хорошие метрики даже в сложных задачах;
- возможность решения не только детекции, но и трекинга.
Недостатки:
- для обучения и инференса необходимо использовать дополнительные библиотеки с эффективной реализацией SparceConvolution;
- значительно растёт количество памяти в случае уменьшения размера вокселя и / или увеличения дальности детекции (границ воксельной сетки).
Сегментация
Итак, нам осталось рассмотреть семантическую сегментацию 3D-данных. Традиционно начнём с особенностей этой задачи:
- разметка семантической сегментации — ресурсоёмкая задача (если мы не учитываем применение SAM и различных современных методов ускорения данного процесса), а в случае разметки облаков точек такая задача может занимать до х10 раз больше времени. Это делает подготовку данных бутылочным горлышком. Сейчас развиваются SAM-подходы, возможно, нас ожидает ускорение такого процесса в будущем 🙂;
- в отличие от изображений, все объекты со сложной геометрией представляются в 3D, что, в свою очередь, требует значительных усилий для получения качественной 3D-сегментации;
- при 3D-данных, полученных с помощью лидара, у нас отсутствует информация о цветности точек, что значительно усложняет задачу точной сегментации границ, если объект пересекается с другим объектом;
- в 2D-сегментации для постобработки возможен классический CV для обработки полученных масок, в 3D-сегментации нет готового тулкита для подобной задачи, поэтому важна тонкая настройка алгоритмов из литературы или разработка собственных.
Для решения задачи семантической сегментации по 3D-данным, как и в случае с детекцией, используется ряд популярных методов.
PointNet++ , KPConv, PointTransformer
Для всех архитектур производятся идентичные изменения — к энкодеру добавляется набор блоков с апсемплингом и скип коннекшен по типу unet. Поскольку вместо пикселей у нас имеются точки, процесс апсемплинга происходит таким образом: пусть есть два набора точек. В одном из них точек в k раз меньше. Следовательно, чтобы совместить (например, конкатенировать) эти наборы, мы должны восстановить данные для недостающих координат. Поступаем следующим образом:
- для каждой недостающей позиции находим набор ближайших соседей среди набора, меньшего в k раз;
- до каждого соседа вычисляем расстояние;
- по набору латентных представлений и соответствующим им весам (зависимым от расстояния) производим интерполяцию.
Преимущества:
- адаптация исходной архитектуры к сегментации за счёт переиспользования блоков энкодера;
- простой механизм апсемплинга без использования сложных операций.
Недостатки:
- все перечисленные для классификационных вариантов недостатки 🙂. Кроме того, на входе уже не просто объект, а большое облако точек, поэтому применение ряда методов не всегда оправдано из-за слишком медленной обработки.
Заключение
Итак, в этой статье мы рассмотрели:
- Какие бывают источники 3D-данных и как они устроены;
- Какие есть представления 3D-данных для их эффективной обработки алгоритмами глубокого обучения;
- Чем 3D-классификация, детекция и сегментация отличаются от аналогичных 2D-задач;
- Какие алгоритмы можно применять для решения соответствующих задач.
В статье мы привели лишь небольшой обзор того, что сейчас есть в области обработки 3D-данных. Для полного погружения в эту тему полезно будет поближе познакомиться с каждым из источников данных и алгоритмов 😊
💡Научитесь решать задачи 3D CV на нашем курсе!
Программа объясняет теорию подходов и решений из области 3D CV и позволяет закрепить знания на практике.
Запишитесь в лист ожидания, чтобы получить самую большую скидку!