ИИ в 3D: Где мы сейчас и какое будущее нас ждёт? (Часть 2)

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

В предыдущей статье мы уже затрагивали задачу реконструкции 3D-объектов по их 2D-изображениям. В этой же углубимся в реконструкцию с головой! Вообще говоря, как мне кажется, сейчас мы рассмотрим гораздо более концептуально интересные методы, а именно - HSP и Mesh R-CNN. Это база, которая просто должна осесть в головах всех любителей ИИ в 3D!

HSP

Hierarchical Surface Prediction (HSP) можно попробовать перевести, как иерархическое предсказание поверхности. Это метод воксельной реконструкции 3D-объектов по их 2D-изображениям. 

Воксели

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

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

Пиксели vs Воксели
Пиксели vs Воксели

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

Какая основная проблема стоит перед нами, когда мы используем воксельную сетку? В первую очередь - это проклятие размерности, которое проявляется при увеличении детализации 3D-модели. Например, если мы будем напрямую хранить воксели в виде трёхмерного массива array[x][y][z], то для того, чтобы представить 3D-модель с детализацией хотя бы в 512 точек, нам понадобится 512^3байт, что в свою очередь равно 128 Мб. Короче, так себе история, имеем O(n^3)по памяти. 

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

Октодеревья

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

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

Вот пример того, как при помощи октодерева можно представить 3D-модель снеговика:

Ближе к границе объекта разбиение увеличивается, что позволяет сделать детализированную поверхность. А вот внутри снеговика разбиения большие: нам не нужно детализировать внутренний объём, который и так не сможем увидеть. Вот тут мы потихоньку и подобрались к сути метода HSP.

Суть метода

Для начала взглянем на схему:

Можем видеть, что HSP получает на вход RGB-изображение, преобразует его в вектор признаков C и не берётся за генерацию всей воксельной сетки разом. Вместо этого он последовательно получает пространства признаков F^i и на основании этого продолжает строить октодерево, решая, лежит вершина и соответствующий ей воксель внутри объекта, вне объекта или на его границе. Для 2D домика такая классификация выглядела бы следующим образом:

Здесь 

  • красный контур - истинный объект дома

  • белые пиксели - пиксели вне объекта

  • чёрные пиксели - пиксели на границе объекта

  • синие пиксели - пиксели внутри объекта

Если модель решает, что воксель лежит на границе объекта, производим дальнейшее построение дерева из данной ноды на 8 дочерних и получаем новое более детализированное разбиение. Для него повторяем всё снова, пока, либо не получим отсутствие предсказанных граничных вокселей, либо не пройдём все 5 уровней детализации. Почему 5? Просто авторы посчитали, что подобной детализации будет достаточно, да и по всей видимости улучшение было бы не сильно значимым в сравнении с увеличением потребляемых ресурсов. 

В конечном счёте генерируется воксельная 3D-модель с детализацией в 256^3вокселей:

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

Таким образом, HSP - это end-to-end подход, который, используя датасет ShapeNet с полигональными 3D-моделями различных классов объектов, учится по одной фотографии объекта строить его детализированную воксельную модель.

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

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

  • https://shubhtuls.github.io/papers/pami19hsp.pdf

  • https://arxiv.org/pdf/1704.00710.pdf

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

Источник: https://habr.com/ru/articles/796235/


Интересные статьи

Интересные статьи

Почему программисты не боятся искусственного интеллекта? Потому что им достаточно сказать заказчику: «Объясните компьютеру, что именно вы хотите». Так шутили еще недавно, но теперь такие шутки становя...
Всем есть к чему стремиться, и это самая правдивая истина. С программированием это также, как и с любым другим занятием в жизни. Есть много хороших, выдающихся, и ещё учащихся программистов, и все не ...
Фреймворк SwiftUI появился в прошлом году, и реализованный в нем подход «один раз выучить и применять на всех платформах» сразу же заинтересовал многих разработчиков ПО для Apple. Немного...
Привет, Хабр. Сегодня я продолжаю серию публикаций, которую написал специально к старту нового потока курса «Software Architect». Введение Выбор архитектурного стиля является о...
Одна из моих любимых частей спецификации CSS Grid — это grid-gap. Они позволяют легко создавать отступы между элементами внутри сетки. Margins и приёмы, к которым мы прибегаем, чтобы реали...