Простые нейронные сети могут захватывать сложные 3D-геометрии

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

  1. хранение эффективных с памятью представлений известных форм
  2. создание новых форм
  3. исправление/восстановление фигур на основе ограниченных или зашумленных данных

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

В этом посте мы изучим один из таких методов, называемый DeepSDF [1], который использует простую нейронную сеть с прямой связью для изучения представлений функций расстояния со знаком (SDF) для различных трехмерных форм. Основная идея проста: вместо прямого кодирования геометрии (например, через сетку) мы обучаем генеративную нейронную сеть выводить эту геометрию. Затем мы можем выполнить вывод, чтобы (i) получить прямое кодирование (потенциально новой) трехмерной формы или (ii) исправить/реконструировать трехмерную форму из зашумленных данных.

Фон

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

Представление трехмерных фигур

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

Облако точек. Облака точек довольно просты для понимания. Как можно догадаться из названия, они просто хранят группу точек с [x, y, z] координатами в пространстве, и эти точки используются для представления базовой геометрии. Облака точек полезны, потому что они точно соответствуют типу данных, которые мы получаем от таких датчиков, как LiDAR или камер с датчиками глубины. Но облака точек не обеспечивают водонепроницаемую поверхность (т. е. форму с одной замкнутой поверхностью).

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

Представление на основе вокселей. Воксели — это просто пиксели с объемом. Вместо пикселя в 2D-изображении у нас есть воксель (то есть куб) в 3D-пространстве. Чтобы представить трехмерную форму с помощью вокселей, мы можем:

  1. Разделите секцию 3D-пространства на дискретные воксели
  2. Определите, заполнен ли каждый воксель или нет

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

Функции расстояния со знаком

Непосредственное сохранение 3D-формы с использованием облака точек, сетки или вокселей требует много памяти. Вместо этого мы обычно хотим сохранить более эффективное косвенное представление формы. Одним из подходов к этому было бы использование функции расстояния со знаком (SDF).

Учитывая пространственную точку [x, y, z] в качестве входных данных, SDF выводит расстояние от этой точки до ближайшей поверхности нижележащего представляемого объекта. Знак выхода SDF указывает, находится ли эта пространственная точка внутри (отрицательно) или снаружи (положительно) поверхности объекта. См. приведенное ниже уравнение.

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

Почему это полезно? На высоком уровне SDF позволяют нам хранить функцию вместо прямого представления трехмерной формы. Эта функция, вероятно, более эффективна для хранения, и мы все равно можем использовать is для восстановления представления сетки!

Нейронные сети с прямой связью

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

  1. Линейное преобразование
  2. Нелинейная функция активации

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

Код. В сетях прямой связи нет особой сложности. Мы можем легко реализовать их в PyTorch, как показано ниже.

DeepSDF: изучение непрерывных функций расстояния со знаком для представления формы [1]

Предыдущие исследования в области компьютерной графики и трехмерного компьютерного зрения предложили множество классических подходов к представлению трехмерных форм и геометрий. В [1] авторы предлагают подход, основанный на глубоком обучении, называемый DeepSDF, который использует нейронную сеть для изучения непрерывного SDF для широкого класса фигур. Проще говоря, это означает, что мы можем кодировать основанное на SDF представление нескольких различных типов 3D-форм, используя единую нейронную сеть с прямой связью, позволяя представлять, интерполировать или даже дополнять такие формы из частичных данных; см. выше.

Идея DeepSDF проста: мы хотим использовать нейронную сеть для выполнения регрессии непосредственно на значениях SDF. Для этого мы обучаем эту модель на выборках точек из SDF (т. е. отдельных [x, y, z] точек с соответствующим значением SDF). Если мы обучаем сеть таким образом, то мы можем легко предсказывать значения SDF позиций запроса, а также восстанавливать поверхность фигуры, находя точки, в которых SDF равен нулю.

Как мы представляем фигуру? Точнее, рассмотрим одну фигуру, из которой мы сэмплируем фиксированное количество 3D-точечных выборок со значениями SDF. Здесь следует отметить, что взятие большего количества точечных выборок позволило бы представить форму с более высокой точностью, но это происходит за счет увеличения вычислительных затрат.

В приведенном выше уравнении x — это вектор, содержащий [x, y, z] координаты, а s — это значение SDF, связанное с этими координатами для данной формы.

Обучение нейронной сети. Отсюда мы можем напрямую обучить нейронную сеть с прямой связью для получения значения SDF s, заданного x в качестве входных данных, путем обучения этих пар образцов с использованием потери регрессии L1. Затем результирующая модель может выводить точные значения SDF для представления базовой формы; см. левый подрисунок ниже.

Ограничение такой модели состоит в том, что она представляет только одну форму. В идеале мы хотели бы смоделировать множество форм с помощью одной нейронной сети. Для этого мы можем связать скрытый вектор (т. е. «Код» на рисунке выше) с каждой фигурой. Это низкоразмерный вектор, уникальный для каждой формы, хранящейся в нашей нейронной сети. Этот скрытый вектор может быть добавлен в качестве входных данных для нейронной сети, чтобы информировать сеть о том, что она производит выходные данные для определенной формы. Этот простой трюк позволяет нам представлять несколько фигур в одной модели (это экономит много памяти!); см. правый подрисунок выше.

Последний вопрос, который мы могли бы задать: как мы можем получить этот скрытый вектор для каждой формы? В [1] авторы делают это, предлагая архитектуру автоматического декодера, которая (i) добавляет скрытый вектор к входным данным модели и (ii) изучает лучший скрытый вектор для каждой формы с помощью градиентного спуска во время обучения; см. ниже.

Как правило, скрытые векторы изучаются с помощью архитектуры автоэнкодера, но это требует добавления дополнительного модуля кодировщика, который влечет за собой дополнительные вычислительные затраты. Авторы в [1] предлагают подход автодекодера, чтобы избежать этих дополнительных вычислений. Разница между этими подходами показана ниже.

Создание формы. Чтобы выполнить вывод с помощью DeepSDF, мы должны:

  1. Начните с разреженного/неполного набора образцов значений SDF
  2. Определите наилучший возможный скрытый вектор из этих образцов
  3. Выполните вывод с помощью нашей обученной нейронной сети по множеству различных точек в трехмерном пространстве, чтобы определить значения SDF.

Отсюда мы можем визуализировать форму, представленную DeepSDF, с помощью таких алгоритмов, как Марширующие кубы, которые дискретизируют трехмерное пространство и извлекают реальную трехмерную геометрию на основе этих значений SDF.

Данные. DeepSDF обучается и оценивается с использованием синтетического набора данных ShapeNet. В частности, его производительность измеряется по четырем задачам.

  1. Представление фигур в тренировочном наборе
  2. Реконструкция невидимых (тестовых) форм
  3. Завершение частичных форм
  4. Выборка новых форм из скрытого пространства

Для первых трех задач мы видим, что DeepSDF имеет тенденцию постоянно превосходить базовые методологии, показывая, что он может представлять сложные формы с высокой точностью и даже довольно хорошо восстанавливать формы из неполных выборок. Это весьма примечательно, учитывая, что мы храним множество трехмерных фигур в одной нейронной сети с эффективным использованием памяти; см. ниже.

Мы также можем интерполировать пространство встраивания модели DeepSDF для получения согласованных результатов. Это позволяет нам делать такие вещи, как находить среднюю форму между грузовиком и автомобилем; см. ниже.

Из этих результатов мы видим, что интерполяция между скрытыми векторами дает плавный переход между формами, показывая, что непрерывные SDF, встроенные в DeepSDF, имеют смысл! Общие черты форм, такие как кузова грузовиков или подлокотники кресел, фиксируются в представлении, используемом DeepSDF. Это весьма примечательно для такой простой сети с прямой связью.

Выводы

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

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

Исправление нарушенной геометрии. Учитывая частичное или зашумленное представление базовой формы, DeepSDF можно использовать для восстановления точной сетки; см. ниже. Для сравнения, большинство предыдущих методов не могут выполнить такую ​​задачу — им требуется доступ к полному трехмерному представлению формы, которое соответствует типу данных, используемых для обучения модели.

Интерполяция скрытого пространства. Глубокий SDF может представлять множество различных форм и встраивать их свойства в низкоразмерное скрытое пространство. Кроме того, эксперименты показывают, что это скрытое пространство имеет смысл и имеет хорошее покрытие. На практике это означает, что мы можем взять скрытые векторы (т. е. векторные представления различных объектов), линейно интерполировать между ними и получить правильную новую форму. Мы можем легко использовать это для создания новых фигур, обладающих множеством интересных свойств.

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

Заключительные замечания

Большое спасибо за чтение этой статьи. Я Кэмерон Р. Вульф, научный сотрудник Алегион и аспирант Университета Райса, изучающий эмпирические и теоретические основы глубокого обучения. Вы также можете ознакомиться с моими другими работами на Medium! Если вам понравилось, подпишитесь на меня в Твиттере или подпишитесь на мою рассылку Deep (Learning) Focus, где я пишу серию понятных обзоров по важным темам глубокого обучения.

Библиография

[1] Пак Чон Джун и др. «Deepsdf: изучение непрерывных функций расстояния со знаком для представления формы». Материалы конференции IEEE/CVF по компьютерному зрению и распознаванию образов. 2019.

[2] Милденхолл, Бен и др. «Нерф: представление сцен в виде полей нейронного излучения для синтеза представлений». Сообщения ACM 65.1 (2021): 99–106.

[3] Хоанг, Лонг и др. «Метод глубокого обучения для классификации 3D-объектов с использованием сигнатуры волнового ядра и центральной точки 3D-треугольной сетки». Электроника 8.10 (2019): 1196.