Расслабление до неточных/неизвестных поз камеры в Neural Radiance Fields
Сегодня мы представляем Bundle Adjusting Neural Radiance Fields (BARF). Эта работа была представлена на ICCV примерно в октябре 2021 года, то есть примерно год назад с момента написания этой статьи. Мы рассмотрим представленные идеи, проведем небольшие эксперименты с кодом и изучим соответствующую математику, стоящую за некоторыми формулировками.
Пост предполагает некоторое знакомство с исходным NeRF и базовым CV. Все кредиты принадлежат авторам, поэтому обязательно посетите их страницу проекта и презентацию на YouTube для получения дополнительных изображений и пояснений.
Ванильный НеРФ
Начнем с краткого обзора обычного NeRF. Нас интересует реконструкция представления сцены в 3D по набору обучающих изображений сцены под разными углами. Одна из важных целей этого — позволить нам визуализировать сцену в новых и невидимых видах.
Для каждого тренировочного изображения у нас есть исходная точка камеры и поза (направление обзора). Другими словами, расположение и направление центра камеры и направления лучей характеризуются известной внешней матрицей для каждого обучающего примера.
Затем мы запускаем луч из центра камеры через каждый пиксель в каждом тренировочном изображении. Для изображения 400x400, как показано ниже, это будут лучи 400x400, исходящие из центра камеры. Фокусные расстояния камеры происхождения также характеризуются известной собственной матрицей.
Тогда для каждого луча одного пикселя значение u = [x, y]. Точки в трехмерном пространстве выбираются вдоль этого луча, и в каждой из этих трехмерных точек вдоль луча запрашивается MLP для получения оценок цвета и плотности RGB в каждом месте. Предположим, что луч отбирается в 64 точках по оси z, тогда эта операция берет [64x3] луч, и сеть выдает [64x4] (64 точки глубины) x(R, G, B, сигма) на выходе в каждой точке по оси z. луч. Выходные данные вдоль луча затем комбинируются с использованием формулы объемного рендеринга, чтобы вернуть окончательную оценку RGB и плотности для пикселя u = [x, y].
Есть еще нюансы, связанные с грубыми сетями VS и стратегиями выборки для оригинальной реализации NeRF, но мы их опустим для ясности.
А вот пример позы наземной камеры для внешних параметров одного тренировочного изображения из набора данных lego. Параметры закодированы в знакомой внешней матрице 4x4.
И вот один из возможных способов определения внутренних параметров, как показано в этой реализации NeRF, но об этих параметрах позже.
NeRF и точные позы камеры
Итак, вернемся к бумаге. Как отмечают авторы, непременным условием для NeRF являются точные позы камеры для данных изображений. Что произойдет, если позы камеры будут неточными, искаженными или даже неизвестными? Мы можем представить, что лучи, проходящие через пиксели из разных тренировочных изображений, которые должны представлять одну и ту же точку объекта в трехмерном пространстве, больше не будут пересекаться друг с другом в основной истинной трехмерной точке. В этом случае будет противоречивая информация о значениях RGB и плотности для каждого пикселя. Имеет ли смысл объемный рендеринг в этом случае?
Для набора данных Blender документ BARF вводит синтетические возмущения в позы, добавляя шум для перевода и вращения поз камеры. Используя внешние/внутренние матрицы из предыдущего, мы можем сами применить возмущения к позам наземной камеры для сцены лего и визуализировать результаты. Обратите внимание, что показан только луч, проходящий через центр каждого тренировочного изображения/позы камеры (то есть через пиксель [200, 200] изображения 400x400).
Затем мы можем принять наши возмущения и попробовать обучить ванильный NeRF на неточных позах камеры, чтобы увидеть эффекты.
Разумеется, ванильный NeRF сам по себе не идеален, когда позы камеры искажаются для сцены с лего.
Мотивация
Итак, в возмущенных или неизвестных позах камеры возможно ли успешно восстановить представление сцены с помощью NeRF? Как насчет исправления несовершенных поз и одновременной оценки положения камеры? Да! Чтобы процитировать статью, вот основные вклады:
- Мы устанавливаем теоретическую связь между классическим выравниванием изображений и совместной регистрацией и реконструкцией с помощью Neural Radiance Fields (NeRF)
- Мы показываем, что восприимчивость к шуму от позиционного кодирования влияет на область притяжения для регистрации, и мы представляем простую стратегию грубой и точной регистрации для представлений сцены на основе координат.
- Предложенный нами BARF может успешно восстанавливать представления сцены из несовершенных поз камеры, что позволяет использовать такие приложения, как синтез изображений и локализация видеорядов из неизвестных поз.
Регулировка связки
Продолжим настройку комплекта. Это можно определить как:
«уточнение визуальной реконструкции для получения совместной оптимальной 3D-структуры и оценок параметров просмотра (положения камеры и/или калибровки)».
- Регулировка связок — современный синтез (Triggs et al., 1999)
Корректировка связок — хорошо изученная проблема. В общем, если у нас есть набор точек в 3D и направление/местоположения камеры и проекции точек на плоскость изображения, как мы выровняем неточные камеры? Мы можем выполнять нелинейную оптимизацию параметров, которые могут управлять как 3D-точками, так и камерами, настраивать внешние и/или внутренние параметры камеры, чтобы свести к минимуму некоторую ошибку повторного проецирования. Таким образом, мы берем пучки световых лучей и пытаемся настроить их, отсюда и название.
Мы пойдем шаг за шагом, чтобы увидеть, как эта идея может быть адаптирована к Neural Radiance Fields, чтобы решить нашу проблему нейронной реконструкции сцены с неточными или неизвестными позами камеры.
Планарное выравнивание изображения
Документ начинается с более простого примера выравнивания изображения и строится на нем, чтобы понять, как та же концепция может быть применена к NeRF в 3D.
Рассмотрим участок изображения и деформацию координат x = [x, y] участка изображения с некоторыми параметрами деформации p для получения искаженных участков изображения. Мы заинтересованы в восстановлении исходного патча из деформированных патчей, а также в восстановлении параметров деформации p, то есть мы хотим найти параметры гомографии из патчей.
Мы можем сформулировать это следующим образом. I — это функция визуализации, которая выводит значения RGB при задании 2D-координат. W — это функция деформации, параметризованная параметром p, который представляет собой p-мерный вектор, содержащий параметры деформации.
Затем мы хотим найти параметры p, которые минимизируют разницу в значениях RGB для всех пикселей. Чтобы решить эту проблему оптимизации, мы используем итерационные алгоритмы, такие как метод Гаусса-Ньютона или градиентный спуск. Чтобы найти обновления для p, нам нужно будет вывести эту целевую функцию, чтобы получить это количество. Мы будем иметь это в виду, так как это будет важно позже.
Знакомство с нейронной сетью
Определив вышеизложенное, давайте теперь представим нейронную сеть. Предположим, мы хотим обучить нейронную сеть, которая изучает изображение, для создания значений 3D RGB при заданном наборе 2D-координат.
Затем, используя деформацию и параметры ранее, мы можем обновить нашу формулировку проблемы выравнивания изображения. Решив эту новую задачу ниже, мы обучим нейронную сеть, которая учится создавать значения RGB изображения с заданными 2D-координатами, а также также вычислять параметры деформации p.
Мы увидим, как эти формулировки выравнивания изображения в случае 2D могут быть расширены для достижения нашей первоначальной цели — регистрации поз камеры в 3D с помощью NeRF.
3D-кейс с нейронными полями излучения
В статье снова рассматривается объемная визуализация, но сначала мы немного изменим способ формулировки проблемы.
Что тут происходит? Если мы начнем с координат пикселя u в 2D, мы можем добавить 1 к 3-му измерению.
Затем мы можем расширить пиксель вдоль оси z в точках z_i. Эти местоположения в 3D могут быть выражены с помощью x_i.
Затем мы получаем вектор [N, 4], каждый из которых представляет [RGB, сигма], когда мы запрашиваем MLP с параметрами Theta в N трехмерных точках вдоль линии, проходящей через u.
Объемный рендеринг комбинируется с этими [N, 4] выходными данными MLP, где каждый y_i равен [1, 4], т.е. с использованием следующих
Расчетное значение RGB в пикселе определяется по этой формуле. Важно то, что эта формула создает выходные данные 3D RGB для 2D-пикселя u в качестве входных данных, принимая информацию из 4-мерных выходных данных [RGB, sigma] от MLP по глубине z.
Давайте определим новую функцию g, которая берет [N, 4] выходных данных MLP вместе и производит одно значение RGB.
Тогда то же, что и выше, можно переписать в терминах функции g:
или аналогично тому, как показано ниже, чтобы показать, как выполняется композитинг выходных данных MLP, параметризованных Theta, на каждой глубине z_i.
Теперь, если мы снова введем функцию деформации, но теперь в 3-х измерениях, то это вытекает естественным образом.
где W функция деформации в 3D параметризуется параметрами p.
Итак, что мы здесь сделали? С этой переформулировкой мы включили параметры камеры p в цель рендеринга через функцию деформации W в 3D. Эта новая формулировка дает нам возможность совместно обновлять параметры камеры p по мере обучения параметров Theta MLP в NeRF.
Это подводит нас к основной цели, изложенной в статье. Решая эту задачу, мы можем достичь нашей цели по реконструкции сцены с помощью NeRF ирегистрации поз камеры p.
Авторы также комментируют сходство с формулировкой 2, представленной выше, где обе включают оптимизацию параметров нейронной сети Theta и параметров камеры p.
Итак, мы закончили здесь? Использование градиентного спуска и обратного распространения для решения этих параметров? Не совсем так, как оказалось.
Возвращаясь к якобиану из нашего самого первого примера совмещения 2D-изображений, мы заинтересованы в этой величине для решения итеративных обновлений параметров нашей камеры.
Но чтобы найти параметры p, используя нашу новую формулировку, приведенную выше, мы приходим к следующему. Сначала мы проходим через формулу рендеринга, затем через вывод MLP, затем, наконец, через функцию деформации, чтобы получить p.
Бумага покажет, что проблема именно в этом. Сначала мне была непонятна связь между позиционным кодированием и бессвязными обновлениями градиента. Так что, надеюсь, объяснение таким образом проясняет ситуацию.
Позиционное кодирование
Важнейшим компонентом NeRF является позиционное кодирование. Входы в MLP сопоставляются с более высокими измерениями с синусоидальной и косинусной базой перед входом в сеть, определенную как таковую.
Это означает, что координаты или деформированные координаты должны пройти через функцию позиционного кодирования перед входом в нейронную сеть. Тогда производная также должна включать этот шаг при переходе к параметрам камеры в конце.
Проблема здесь в том, что мы получаем этот член из производной, которая, как показывают авторы, очень сильно влияет на вывод функции позиционного кодирования при более высоких основаниях.
При включении этого члена градиенты, которые мы получаем, будут иметь большие колебания из-за усиления более высокочастотных оснований. Это приводит к тому, что итеративные обновления p становятся нестабильными в процессе оптимизации и склонны застревать в неоптимальных решениях из-за сложности сигнала, вызванного градиентами.
Это проблема, связанная с включением параметров камеры, поскольку нас не интересуют какие-либо параметры, вложенные в функции позиционного кодирования в процессе обучения исходного NeRF. Градиенты для параметров нейронной сети можно рассчитать без обратного распространения через позиционное кодирование.
От грубого к точному дополнению к позиционному кодированию
Здесь авторы представляют грубый и тонкий подход к решению проблемы. А именно, к базисным функциям позиционного кодирования будет добавлен вес, который будет действовать как маска для постепенной активации более высокочастотных базисов.
Он полностью активирует сигнал выше порога, в то время как обнуляет сигнал ниже порога с плавным переходом.
Порог активации будет регулироваться в зависимости от хода обучения, при котором активируются только первые несколько баз, а остальные обнуляются во время более ранних итераций обучения, пока остальные базы не будут полностью активированы для более поздних итераций обучения.
На практике альфа регулируется от 20 тысяч шагов до 100 тысяч шагов в процессе обучения, где все полосы активируются на 100 тысячах шагов.
Это можно интерпретировать как возможность BARF сначала восстановить грубые положения камеры, используя только более гладкие сигналы от низкочастотных баз, прежде чем перейти к более точной регистрации с оставшимися высокочастотными базами. Таким образом, когда смещение в начале велико, а градиенты также относительно велики, градиенты от более высокочастотных баз не будут мешать и с самого начала сводить на нет фактически значимые градиенты от низкочастотных баз. По мере того, как регистрация приближается к желаемой и активируются более высокие частоты, эффект усиления градиентов от более высокочастотных баз будет уменьшаться.
Вот графики, дополнительно иллюстрирующие влияние весовой функции. Каждая пара графиков представляет собой основание синуса и косинуса на частотах от k = 1 до 4. Здесь показаны вклады каждого основания на разных частотах при альфа = 2/10. На частоте k = 1 компонент полностью активирован, и значение первого координатного измерения можно найти по синусоидальной и косинусоидальной кривым. На частоте k = 2 компонент еще не полностью активирован и лишь частично влияет на значение координаты. При частоте k = 3 и выше компоненты обнуляются и не активируются, не влияя на значение координаты.
Полученные результаты
Позы камеры, восстановленные с помощью BARF, лучше согласуются с реальными позами по сравнению с использованием только полного позиционного кодирования.
Авторы отмечают, что, хотя NeRF без позиционного кодирования может восстановить выравнивание, финальные сцены имеют более низкую точность, чем представленные BARF.
Вместо того, чтобы возмущать позы камеры для сцен, обращенных вперед, позы неизвестны и инициализируются преобразованием идентичности, где все параметры камеры установлены на 0. Оптимизация расходится с использованием полного позиционного кодирования.
Поскольку сами позы камеры оцениваются для сцен, обращенных вперед, оптимизированные позы камеры — это самое большее, насколько BARF согласуется с такими классическими методами оценки позы, с которыми он справляется довольно хорошо.
BARF достигает превосходных количественных результатов.
Будущие соображения
Несмотря на многообещающие результаты, BARF сталкивается с теми же проблемами, что и NeRF.
- Более тщательный анализ, чем эвристика, для планирования от грубого до точного
- Оптимальный C2F зависит от данных, хотя представленные результаты применяются к одному и тому же планированию C2F.
- Медленный
- Предположение об известных внутренних свойствах
Параллельная работа
Параллельно с BARF, покрывающим аналогичные задачи, есть NeRF, который можно найти на их сайте здесь. Здесь предлагается альтернативный метод оптимизации как внутренних, так и внешних параметров.
Примеры
Вот результаты запуска кода эксперимента авторов с планарным выравниванием изображений с использованием пользовательских изображений.
Вот моя попытка запустить BARF с пользовательской последовательностью изображений кубика Рубика и пресс-папье, сделанных на моем столе. Всего я сделал около 100 фотографий на телефон под разными углами вокруг объекта.
Возможно, я ошибся с ориентацией, но похоже, что BARF смог узнать о представлении сцены из последовательности изображений только с внутренней информацией о позах камеры. Разрешение уменьшили до 480х640.
Заключение
Оригинальный NeRF существует уже около 2 лет. Как и в случае любых достижений в области машинного обучения, скорость, с которой делаются улучшения и новые открытия, ошеломляет. Вот почти устаревший список на данный момент открытий и улучшений во многих темах под эгидой NeRF.
Интересно посмотреть, какое будущее ждет NeRF без позы камеры, а также эту все еще растущую тему компьютерного зрения.
Это полный плакат для презентации, обязательно посетите их веб-сайт и оригинальную статью!