{"id":14284,"url":"\/distributions\/14284\/click?bit=1&hash=82a231c769d1e10ea56c30ae286f090fbb4a445600cfa9e05037db7a74b1dda9","title":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u043d\u0446\u044b \u0441 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438","buttonText":"","imageUuid":""}

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

Всем привет, это Святослав Корсун - CEO MEN IN DEV. Сегодня хочу поделиться статьей от нашего руководителя отдела ML-направления Савелия Батурина. Он ведет свой канал в Телеграм и пишет статьи на Habr.

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

Введение

Почему 3D? В отличие от тех же LLM или диффузионных 2D-моделей, тема, на первый взгляд, совершенно не хайповая и, наверное, для восприятия более сложная, ну вот как-то не на слуху она совсем. Однако, понимая очевидную тенденцию развития технологий в этом направлении (VR/AR/Цифровые аватары и пр.), а также, учитывая обыденное устремление человеческого познания в отношении нашего 4D мира, будет глупо отрицать, что в ближайшее время нас захлестнёт волна открытий в данной области. В связи с этим, хотел бы поучаствовать в создании плацдарма, который позволит большему числу людей ознакомиться с существующими подходами и в том числе даст мотивацию как на углубление своих знаний, так и на создание новых.

Тема обширная, обозреть нужно много чего, поэтому повествование организую следующим образом: сначала я буду обозначать весомую для всей области модель машинного обучения, объясню принципы её работы своими словами, в процессе также предоставлю источники, которые стоит почитать/посмотреть для дальнейшего погружения в тему.

В первой части цикла рассмотрим следующие модели:

  • NeRF

  • SMPLify

  • SMPL

  • GIRAFFE

  • SMPL-X

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

  • Mesh R-CNN

  • Zero123

  • Neural Fields as Learnable Kernels for 3D Reconstruction

  • LegoFormer

  • NeuralRecon

  • HSP

  • One-2-3-45

А также поразмышляем о том, что нас ждёт в недалёком будущем.

Приступим!

NeRF

Моё знакомство с классом подобных нейронок началось с замечательного видео Two Minute Papers, где автор рассказывает о NeRF (Neural Radiance Fields), по сути, модели для восстановления цвета и плотности распределения объёма объектов на заданном луче. Это, в свою очередь, позволяет по нескольким фото одной и той же сцены, снятых с разных ракурсов, получить возможность "рендерить" ту же самую сцену, но уже используя произвольное положение камеры в пространстве. Выглядит очень эффектно!

Удивительно то, что данная модель весит каких-то 5 МБ, что зачастую на несколько порядков меньше, чем суммарный размер обучающего датасета. То есть мы как бы упаковываем данные, находящиеся в фотографиях в одно непрерывное 3D-представление сцены.

Незамысловатая архитектура обычной MLP в сочетании с элегантной идеей производят довольно-таки мощный эффект:

Рассмотрим подробнее представленную схему. Здесь:

ɣ(x) - позиционное кодирование для пространственной координаты x=(x,y,z) внутри нашей сцены

ɣ(d) - позиционное кодирование для луча d=(θ,φ), в направлении которого мы наблюдаем точку x

σ - значение плотности объёма в заданной точке x (по сути прозрачность объекта в этой точке)

RGB - значение цвета точки x

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

Есть у NeRF и несколько недостатков:

  • Во-первых, в силу самой концепции NeRF мы намеренно переобучаем нейросеть на возможность представления исключительно одной сцены, т.е. для разных сцен понадобится обучить разные нейросети.
  • Во-вторых, само по себе это обучение ну уж очень долгое (как следует из оригинальной статьи 1-2 дня на NVIDIA V100).

Советую ещё прочитать соответствующую статью на Хабре и посмотреть видео, где доходчиво с примерами объясняются ключевые идеи и детали реализации данного метода.

GIRAFFE

Продолжим рассмотрение 3D-нейросетей с GIRAFFE - как идеологически, так хронологически следующей после NeRF знаковой модели, предназначенной для настраиваемой генерации объёмных сцен. До её появления большая часть подходов концентрировалась на создании наиболее реалистичных изображений с ядром в виде GAN, не беря в расчёт композициональную природу сцены, которая, очевидно, состоит из фона и, возможно, нескольких объектов, как-то расположенных в пространстве относительно друг друга.

Вследствие этого, генеративные модели оставались не способными к устойчивой генерации вариаций одной и той же сцены с теми же самыми объектами. Условно, сдвиг предмета вправо мог привести к его полной деформации, изменению текстуры, цвета или всей сцены в общем. То есть красный деревянный куб на фоне травы превратился бы в зелёный стеклянный шар на фоне забора (так себе эффект от перемещения, не правда ли?). Связано это с тем, что перемещение объекта в данном случае равносильно одновременному изменению многих скрытых параметров генерации модели - они все перепутаны между собой, один влияет на другой, и у нас нет возможности проинтерпретировать их должным образом. Схема, которая обучалась генерировать 2D-изображения без понимания 3D-природы сцены, не способна на такие финты. Авторы статьи дают нам наглядную визуализацию озвученной проблемы:

А вот какой результат получается у GIRAFFE в противовес на аналогичной задаче перемещения объектов внутри сцены:

Уже гораздо лучше! Но не идеально ¯\_(ツ)_/¯

Так как всё-таки у GIRAFFE получается осуществлять контролируемую генерацию объёмных сцен?

Дело в том, что у нас уже есть NeRF, которая переобучается на одной единственной сцене, используя кучу картинок с разных ракурсов. На выходе у NeRF мы имеем поле признаков, которое сразу же принимаем за трёхканальное RGB изображение исходной размерности. Создатели GIRAFFE пошли чуть дальше и обобщили NeRF на генерацию скрытого поля признаков конкретного класса объектов произвольной размерности. Дальше, имея на руках несколько NeRF'ов для каждого из N необходимых объектов, задаём для них все настраиваемые параметры и получаем N полей соответствующих признаков. Далее объединяем их в одно поле при помощи композиционального оператора, применяем объёмный рендеринг для объединённого поля, расширяем размерность до исходного изображения и применяем GAN для обучения модели. Весь этот процесс можно уместить на следующей схеме:

Важная ремарка: RGB-изображения, помимо последнего, на выходе модели не нужно воспринимать буквально, это всё поля признаков. Сделано это для наглядной визуализации и упрощения понимания процесса генерации.

А что по источникам?

  • Во-первых, советую замечательную книжку, которая вобрала в себя описание многих интересных моделей, хоть и имеет небольшие проблемы с переводом.
  • Во-вторых, конечно же идёт оригинальная статья по GIRAFFE
  • Далее стоит обратить внимание на предшествующую статью о GRAF и краткое объясняющее видео по GRAF.
  • Ну и напоследок, если кто-то захочет попробовать всё это запустить своими руками, то вот статья с Хабра, в которой описана плотная работа с исходным кодом.

SMPL

А сейчас начнём разбор целого класса моделей по получению трёхмерной реконструкции человеческого тела. SMPL, которая впервые была представлена аж в 2015 году, является параметрическим представлением трехмерной модели человеческого тела, которое точно отображает самые разнообразные формы тела в естественных человеческих позах.

Хоть название SMPL и является акронимом слова simple, сама по себе она, как нам показалось, к сожалению, таковой не является 😢 Ну ничего, разберёмся!

SMPL использует сетку с фиксированной топологией из 6890 вершин для представления человеческого тела. Эта сетка обеспечивает стандартную структуру, к которой можно применять различные деформации. На изображении ниже она расположена слева:

M(θ,β) - это, как можно догадаться, результат работы модели. Отлично, давайте зафиксируем первый ключик к пониманию того, зачем вообще всё это нужно: SMPL на входе получает 2 вектора θ и β, и каким-то образом они полностью описывают модель человека. На выходе SMPL даёт нам 3D-модель в виде сетки из 6980 точек в нужной нам позе с заданной формой тела.

У читателя, который в теме, может возникнуть вопрос: "ок, а что тут такого необычного? У нас уже есть модель LBS (Linear Blend Skinning), которая способна деформировать 3D модели в соответствии с заданной матрицей весов."

Дело в том, что при сильных сгибах она начинает давать неестественные результаты, вот пример сравнения LBS и SMPL:

Собственно SMPL и призвана обеспечить такие изменения базовой модели, чтобы в конечной деформированной 3D-модели не возникало подобных неестественных артефактов.

Перейдём к тому, как именно она устроена. Разберём следующую схему:

Введём для ясности определения (если понять их в совокупности, поймёте SMPL):

Шаблон позы покоя T - полигональная сетка (mesh) базовой 3D-модели человека, состоящая из N=6980 точек

Весовые коэффициенты смешивания W - матрица из LBS, определяющая насколько смещение костей влияет на смещение вершин базовой 3D модели

Блендшейп формы Вs(β) - 3D-модель идентичная исходной, но учитывающая особенности формы тела человека

Блендшейп позы Вр(θ) - 3D-модель идентичная исходной, но учитывающая деформацию тела человека в конкретной позе

Регрессионная матрица J - матрица, задающая местоположение суставов 3D-модели в зависимости от блендшейпа формы (у разных людей с разной формой тела по разному расположены суставы)

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

Параметры позы θ: Вариации поз задаются с помощью бледшейпов поз. В контексте модели SMPL, деформации, зависящие от бледшейпа позы, относятся к деформациям, которые возникают в человеческом теле из-за позирования. Эти деформации связаны не с индивидуальными различиями формы тела, а с изменениями, возникающими при движении частей тела, например, при сгибании руки или ноги. Они предназначены для корректировки артефактов и нереалистичных деформаций, возникающих при позиционировании базовой сетки с использованием стандартного LBS.

Модель SMPL обучается в два этапа:

  • Оптимизируются коэффициенты W, блендшейпы поз, базовая 3D модель и регрессор суставов, чтобы минимизировать ошибку расположения вершин модели при обучении. Обучающий набор для этого этапа состоит из 1786 3D-сканов различных людей в самых разных позах с высоким разрешением.
  • Независимо от первого этапа, линейные модели формы мужского и женского тела изучаются на основе набора данных CAESAR (приблизительно 2000 сканирований для каждого пола) с использованием анализа главных компонентов (PCA). Сначала регистрируем mesh шаблона 3D-модели для каждого сканирования и нормализуем данные, что имеет решающее значение при обучении модели формы на основе вершин. Затем полученные в результате основные компоненты становятся блендшейпами формы тела.

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

SMPLify

Недостатком SMPL было отсутствие прямого механизма оценки 3D-позы и формы человеческого тела по предоставленным 2D-изображениям. В 2016 году для решения этой проблемы был предложен метод SMPLify. Используя модель SMPL, SMPLify применяет 2D-обнаружение суставов для «проецирования» 3D-формы человека в 2D-пространство, тем самым создавая последовательное 3D-представление из одного изображения.

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

Вначале SMPLify получает 2D-точки суставов, которые могут быть определены любым методом 2D-оценки позы человека. Модель SMPL имеет параметры положения (θ) и формы (β). Цель SMPLify - найти значения этих параметров так, чтобы проекция 3D-позы модели SMPL на 2D-плоскость наилучшим образом соответствовала обнаруженным 2D-суставам. На обучении авторы метода брали входное изображение и использовали DeepCut CNN для прогнозирования местоположения 2D-суставов тела:

SMPLify определяет целевую функцию, которая измеряет разницу между 2D проекциями 3D-суставов модели SMPL (с использованием текущих значений θ и β) и обнаруженными на фото 2D суставов. Ещё целевая функция учитывает, насколько естественными получились поза и форма человеческого тела после генерации.

Стоит отметить, что при работе с предыдущими методами была следующая проблема: позу человека было невозможно адекватно построить в связи с взаимопроникновением частей тела друг относительно друга, а делать расчеты для такой сложной поверхности - очень дорогостоящая операция. В видеоиграх для эффективного расчета коллизий обычно используется аппроксимация модели простыми фигурами. Авторы использовали этот подход и аппроксимировали поверхность тела набором «капсул». Каждая капсула имеет радиус и длину оси.

Преимуществом SMPLify является то, что она может по одному изображению оценить трехмерную позу и форму человека, что позволяет использовать её тогда, когда многосторонних фото нет, и информация о глубине отсутствует. Ещё не может не радовать надежность модели: использование априорных данных о позе и форме помогает добиться более анатомически правдоподобных результатов даже в тех случаях, когда двумерное представление позы является слегка неточным.

SMPL-X

SMPL-X значительно упростил трехмерную реконструкцию человеческого тела за счет совмещения в единую связную структуру нескольких моделей: SMPL для тела, отдельные модели для лица и MANO для рук.

Эта интеграция стала возможной благодаря использованию тысяч 3D-сканов, которые значительно усовершенствовали исходную модель SMPL, включив в нее выразительное лицо и детальную жестикуляцию рук. SMPL-X предоставляет комплексную модель, которая отражает сложности всего тела, включая нюансы мимики и жестов (они также управляются унифицированным набором параметров формы). Это стало скачком в детализации и функциональности: количество вершин увеличено до 10 475 с 6 890 в SMPL, что повышает способность модели отображать более мелкие анатомические детали, особенно лиц и рук.

Заключение

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

Благодарности

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

0
Комментарии
-3 комментариев
Раскрывать всегда