Янник Кильхер о технологии NeRF: как нейросети совершили революцию в 3D-рендеринге

Yannic Kilcher 201 тыс. 33 мин 7 мин 19.04.2021
Главное

В новом видео эксперт по машинному обучению Янник Кильхер (Yannic Kilcher) подробно разбирает фундаментальную научную работу, посвященную технологии NeRF (Neural Radiance Fields). Эта технология совершила революцию в задаче синтеза новых ракурсов трехмерных сцен, предложив принципиально новый подход к использованию нейросетей. Вместо привычного обучения на огромных датасетах авторы предложили «переобучать» отдельную нейросеть под каждую конкретную сцену, кодируя её геометрию и свет непосредственно в веса модели.

🚀 Постановка задачи синтеза новых ракурсов (View Synthesis) 0:00

Представьте, что у вас есть набор фотографий какого-либо объекта или локации, сделанных с абсолютно разных ракурсов. Ваша цель — создать систему, способную сгенерировать идеальное изображение этого объекта при взгляде с любой другой, произвольной точки пространства. На первый взгляд задача кажется невероятно сложной и даже невыполнимой, особенно если речь идет о комплексных объектах. Янник Кильхер приводит в пример трехмерную модель корабля на воде: при изменении угла обзора на водной глади должны появляться уникальные блики и отражения (specularities), видимые только под определенным углом. Другой сложный пример — барабанная установка, где микрофон слева обладает очень тонкой и специфической структурой, которую легко исказить при рендеринге.

Технология NeRF создавалась не только для идеализированных синтетических объектов, она отлично показывает себя и на реальных кадрах. Одним из важнейших побочных продуктов работы алгоритма является автоматическое построение карт глубины (depth maps). Получить точную карту глубины для сложных, детализированных сцен классическими методами чрезвычайно трудно, но NeRF справляется с этим весьма успешно. Более того, на основе полученного представления сцены можно реализовывать приложения дополненной реальности (AR) и даже извлекать полноценные трехмерные полигональные сетки (meshes).

🔄 Смена парадигмы: Переобучение нейросети под одну сцену 3:59

Идейно NeRF продолжает концепцию, заложенную в архитектурах типа SIREN (о которых ведущий уже рассказывал в своих прошлых разборах). Эта технология предлагает использовать глубокое обучение принципиально иным образом, нежели это принято в классическом Machine Learning.

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

В случае с NeRF всё устроено иначе:

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

📊 Входные и выходные данные: Пятимерная функция сцены 8:17

Архитектурно NeRF представляет собой непрерывную объемную функцию сцены, аппроксимируемую с помощью стандартного многослойного перцептрона (MLP). На вход нейросети подаются пятимерные координаты.

Входной вектор состоит из двух ключевых компонентов:

  1. 3D-координаты точки пространства: вектор $x = (x, y, z)$ в заданной системе координат.
  2. Направление обзора (viewing direction): вектор $d$, описываемый двумя углами (в сферической системе координат) или трехмерным декартовым единичным вектором.

На выходе нейросеть выдает четыре значения:

Для генерации финального изображения применяется метод, похожий на трассировку лучей (ray casting). Через каждый пиксель виртуальной камеры вглубь сцены пускается луч, вдоль которого с определенным шагом опрашивается нейросеть. Модель последовательно отвечает, содержится ли что-то в текущей точке и какого оно цвета. На основе этих ответов строится график плотности. Когда луч проходит сквозь пустое пространство, плотность равна нулю. Как только луч «врезается» в объект (например, листву дерева), плотность резко возрастает, и система считывает цвет этой точки для финального рендеринга пикселя.

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

🧠 Магия дифференцируемого рендеринга и объемный рендеринг 14:37

Процесс подготовки данных начинается с определения точного положения камер для каждого базового снимка. Для этого используются классические алгоритмы из области компьютерного зрения, такие как Structure from Motion (SfM) или SLAM. Как только координаты и направления камер известны, запускается процесс обучения.

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

Чтобы модель оставалась физически корректной и многоракурсно-согласованной (multi-view consistent), авторы применили важную инженерную хитрость:

Внутри архитектуры это реализовано последовательно: сначала координаты $x$ проходят через первые слои MLP, отдавая плотность и скрытое промежуточное представление (hidden representation). Затем это скрытое представление объединяется (конкатенируется) с вектором направления луча $d$ и передается на финальные слои, которые выдают итоговый RGB-цвет.

Математический аппарат объемного рендеринга базируется на классических формулах переноса излучения (radiance fields). Функция учитывает вероятность того, что луч беспрепятственно пройдет сквозь пустое пространство до определенной точки, и взвешивает вклад цвета каждой точки на основе её локальной плотности. Если плотность на каком-то этапе становится высокой, луч «поглощается», фиксируя цвет, а последующие слои объекта (даже если они плотные) уже не вносят вклад в финальный пиксель, так как они перекрыты.

🛠️ Инженерные хитрости: Позиционное кодирование и иерархическая выборка 23:38

Одной из главных проблем ранних попыток подобного рендеринга было то, что стандартные нейросети склонны генерировать излишне «сглаженные» изображения, теряя мелкие детали. Чтобы заставить MLP эффективно улавливать высокочастотные функции (мелкие текстуры, резкие грани), авторы внедрили две критически важные модификации.

1. Позиционное кодирование (Positional Encoding)

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

Это дает сети инструмент для одновременного анализа как грубых форм, так и мельчайших деталей. Если сети нужно прорисовать мелкую текстуру, она ориентируется на высокочастотные компоненты кодирования, где минимальное изменение координаты $x$ приводит к резкому изменению признака.

2. Иерархическая выборка лучей (Hierarchical Volume Sampling)

Простой равномерный сэмплинг точек вдоль луча неэффективен: компьютер тратил бы слишком много ресурсов на опрос пустых зон или областей, скрытых глубоко внутри непрозрачных объектов. Авторы решили это созданием двух параллельно обучающихся нейросетей — «грубой» (coarse) и «точной» (fine).

Процесс выборки устроен следующим образом:

Обе сети оптимизируются одновременно через комбинированную функцию потерь, хотя финальная картинка формируется исключительно на основе результатов «точной» модели.

📈 Результаты, преимущества и ограничения технологии 30:11

Результаты работы NeRF превзошли существовавшие на тот момент альтернативы, наглядно показав превосходство в сохранении мелких структур, таких как сложные переплетения деталей у микрофона или блики на поверхностях.

Поразительным фактом оказалась компактность модели: вся трехмерная сцена со всеми текстурами и геометрией упаковывается в нейросеть объемом всего около 5 МБ. По словам Янника Кильхера, классические подходы на базе воксельных сеток требовали для аналогичного качества более 15 ГБ памяти. Получается, что обученная NeRF-модель занимает меньше места на диске, чем исходный пакет несжатых фотографий, использованных для её обучения. По мнению ведущего, в будущем это может изменить индустрию видеоигр и дистрибуции контента: разработчикам будет выгоднее обучать NeRF-сцены на серверах и отправлять клиентам легкие файлы весов нейросети (по 5 МБ каждый), которые пользовательские устройства смогут рендерить «на лету».

Главным и наиболее весомым недостатком оригинальной технологии NeRF остается колоссальное время обучения. Оптимизация одной единственной сцены требует от 100 до 300 тысяч итераций, что занимает примерно 1–2 дня непрерывных вычислений на одной видеокарте корпоративного уровня NVIDIA V100.

Исследования по исключению отдельных компонентов (ablation studies) доказали, что без позиционного кодирования картинка полностью теряет четкость, а без учета направления обзора ($d$) система теряет способность воспроизводить игру света и блики, превращая поверхности в матовые и плоские. Исходный код проекта полностью открыт авторами и доступен для академического и практического использования.

💬 Цитаты

«Вся сцена целиком будет находиться в весах этой нейросети. То есть веса нейросети теперь представляют сцену.»

Янник Кильхер 07:39

«Это даже меньше памяти, чем занимают сами входные изображения для одной сцены из любого нашего датасета.»

Янник Кильхер 31:04
👥 Спикер
📖 Термины
NeRF (Neural Radiance Fields)
Технология представления трехмерных сцен с помощью непрерывных функций плотности и цвета, аппроксимируемых нейросетью.
MLP (Многослойный перцептрон)
Классическая полносвязная нейросеть прямого распространения.
Воксель
Элемент объемного изображения, аналог трехмерного пикселя в 3D-пространстве.
Дифференцируемый рендеринг
Метод генерации изображений из 3D-моделей, математический аппарат которого позволяет вычислять градиенты для обучения нейросетей.
Позиционное кодирование
Математическое преобразование, переводящее низкоразмерные координаты в высокоразмерное пространство для лучшего улавливания мелких деталей нейросетью.
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект NeRF Neural Radiance Fields Янник Кильхер 3D-моделирование Машинное обучение