Бернхард Кербл*, Георгиос Копанас*, Томас Леймкюлер, Джордж Дреттакис (* указывает на равный вклад)
| Веб-страница | Полный доклад | Видео | Другие публикации GRAPHDECO | Страница проекта FUNGRAPH |
| T&T+DB COLMAP (650 МБ) | Предварительно обученные модели (14 ГБ) | Программы просмотра для Windows (60 МБ) | Оценочные изображения (7 ГБ) |
Этот репозиторий содержит официальную авторскую реализацию, связанную с статьей «3D Gaussian Splatting для рендеринга поля излучения в реальном времени», которую можно найти здесь. Кроме того, мы предоставляем эталонные изображения, используемые для создания показателей ошибок, представленных в статье, а также недавно созданные предварительно обученные модели.
Аннотация: Методы сияющего поля недавно произвели революцию в синтезе новых изображений сцен, снятых с помощью нескольких фотографий или видео. Однако для достижения высокого визуального качества по-прежнему требуются нейронные сети, обучение и рендеринг которых обходятся дорого, а последние более быстрые методы неизбежно приводят к компромиссу между скоростью и качеством. Для неограниченных и полных сцен (а не изолированных объектов) и рендеринга с разрешением 1080p ни один текущий метод не может обеспечить скорость отображения в реальном времени. Мы представляем три ключевых элемента, которые позволяют нам достичь современного визуального качества, сохраняя при этом конкурентоспособное время обучения и, что немаловажно, обеспечивают высококачественный синтез новых изображений в реальном времени (≥ 30 кадров в секунду) с разрешением 1080p. Во-первых, начиная с редких точек, созданных во время калибровки камеры, мы представляем сцену с помощью 3D-гауссиан, которые сохраняют желаемые свойства непрерывных объемных полей яркости для оптимизации сцены, избегая при этом ненужных вычислений в пустом пространстве; Во-вторых, мы выполняем чередующуюся оптимизацию/управление плотностью 3D-гауссианов, в частности, оптимизируя анизотропную ковариацию для достижения точного представления сцены; В-третьих, мы разрабатываем быстрый алгоритм рендеринга с учетом видимости, который поддерживает анизотропное разбрызгивание, ускоряет обучение и обеспечивает рендеринг в реальном времени. Мы демонстрируем современное визуальное качество и рендеринг в реальном времени на нескольких установленных наборах данных.
@Article{kerbl3Dgaussians, author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{"u}hler, Thomas and Drettakis, George}, title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering}, journal = {ACM Transactions on Graphics}, number = {4}, volume = {42}, month = {July}, year = {2023}, url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/} }
Это исследование финансировалось за счет гранта ERC Advanced FUNGRAPH № 788065. Авторы благодарны Adobe за щедрые пожертвования, инфраструктуру OPAL от Университета Лазурного берега и за ресурсы HPC от GENCI–IDRIS (грант 2022-AD011013409). Авторы благодарят анонимных рецензентов за ценные отзывы, П. Хедмана и А. Тевари за корректуру ранних черновиков, а также Т. Мюллера, А. Ю и С. Фридович-Кейля за помощь в сравнениях.
У нас ограниченные ресурсы для поддержки и обновления кода. Однако со времени первоначальной версии мы добавили несколько новых функций, вдохновленных превосходной работой, проделанной над 3DGS многими другими исследователями. Мы будем добавлять другие функции в рамках возможностей наших ресурсов.
Обновление от октября 2024 г .: мы интегрировали ускорение скорости обучения и сделали его совместимым с регуляризацией глубины, сглаживанием и компенсацией экспозиции. Мы усовершенствовали средство просмотра SIBR в реальном времени, исправив ошибки и добавив функции в виде сверху, которые позволяют визуализировать входные и пользовательские камеры.
Обновление весны 2024 г .: Orange Labs любезно добавила поддержку OpenXR для просмотра в виртуальной реальности.
Джонатан Стивенс написал потрясающее пошаговое руководство по настройке Gaussian Splatting на вашем компьютере, а также инструкции по созданию полезных наборов данных из видео. Если приведенные ниже инструкции слишком сухи для вас, проверьте их здесь.
Пользователь camenduru любезно предоставил шаблон Colab, который использует исходный код этого репозитория (статус: август 2023 г.!) Для быстрого и легкого доступа к методу. Пожалуйста, проверьте это здесь.
Репозиторий содержит подмодули, поэтому проверьте его с помощью
# Клон SSHgit [email protected]:graphdeco-inria/gaussian-splatting.git --recursive
или
# Клон HTTPSgit https://github.com/graphdeco-inria/gaussian-splatting --recursive
Кодовая база состоит из 4 основных компонентов:
Оптимизатор на основе PyTorch для создания трехмерной гауссовой модели на основе входных данных SfM.
Средство просмотра сети, которое позволяет подключаться и визуализировать процесс оптимизации.
Средство просмотра в реальном времени на основе OpenGL для визуализации обученных моделей в реальном времени.
Скрипт, который поможет вам превратить ваши собственные изображения в готовые к оптимизации наборы данных SfM.
К компонентам предъявляются разные требования как к аппаратному, так и к программному обеспечению. Они были протестированы на Windows 10 и Ubuntu Linux 22.04. Инструкции по настройке и запуску каждого из них находятся в разделах ниже.
Оптимизатор использует расширения PyTorch и CUDA в среде Python для создания обученных моделей.
Графический процессор с поддержкой CUDA и вычислительными возможностями 7.0+
24 ГБ видеопамяти (для обучения качеству оценки бумаги)
Пожалуйста, ознакомьтесь с часто задаваемыми вопросами для меньших конфигураций VRAM.
Conda (рекомендуется для простой настройки)
Компилятор C++ для расширений PyTorch (мы использовали Visual Studio 2019 для Windows)
CUDA SDK 11 для расширений PyTorch, устанавливается после Visual Studio (мы использовали версию 11.8, известные проблемы с версией 11.6 ).
Компилятор C++ и CUDA SDK должны быть совместимы.
Наш метод установки по умолчанию основан на управлении пакетами и средой Conda:
SET DISTUTILS_USE_SDK=1 # Только для Windowsconda env create --file Environment.yml Конда активирует gaussian_splatting
Обратите внимание, что этот процесс предполагает, что у вас установлен CUDA SDK 11 , а не 12 . Изменения см. ниже.
Совет: Загрузка пакетов и создание новой среды с помощью Conda может потребовать значительного объема дискового пространства. По умолчанию Conda будет использовать основной жесткий диск системы. Этого можно избежать, указав другое место загрузки пакета и среду на другом диске:
conda config --add pkgs_dirs/ conda env create --file Environment.yml --prefix / /gaussian_splatting conda активирует / /gaussian_splatting
Если вы можете себе позволить место на диске, мы рекомендуем использовать наши файлы среды для настройки среды обучения, идентичной нашей. Если вы хотите внести изменения, обратите внимание, что основные изменения версии могут повлиять на результаты нашего метода. Однако наши (ограниченные) эксперименты показывают, что кодовая база прекрасно работает в более современной среде (Python 3.8, PyTorch 2.0.0, CUDA 12). Обязательно создайте среду, в которой PyTorch и его версия среды выполнения CUDA совпадают, а версия установленного пакета CUDA SDK не имеет существенных отличий от версии CUDA PyTorch.
У некоторых пользователей возникают проблемы со сборкой подмодулей в Windows ( cl.exe: File not found
или подобное). Пожалуйста, рассмотрите способ решения этой проблемы из FAQ.
Чтобы запустить оптимизатор, просто используйте
python train.py -s <путь к набору синтетических данных COLMAP или NeRF>
Путь к исходному каталогу, содержащему набор данных COLMAP или Synthetic NeRF.
Путь, по которому должна храниться обученная модель (по умолчанию output/
).
Альтернативный подкаталог для изображений COLMAP ( images
по умолчанию).
Добавьте этот флаг, чтобы использовать для оценки разделение обучения и тестирования в стиле MipNeRF360.
Указывает разрешение загруженных изображений перед тренировкой. Если указано 1, 2, 4
или 8
, используется исходное разрешение, разрешение 1/2, 1/4 или 1/8 соответственно. Для всех остальных значений ширина масштабируется до заданного числа, сохраняя при этом пропорции изображения. Если этот параметр не установлен и ширина входного изображения превышает 1,6 КБ пикселей, входные данные автоматически масштабируются до этого целевого значения.
Указывает, куда поместить данные исходного изображения. По умолчанию cuda
рекомендуется использовать cpu
при обучении на наборе данных большого размера/высокого разрешения. Это уменьшит потребление видеопамяти, но немного замедлит обучение. Спасибо HrsPythonix.
Добавьте этот флаг, чтобы использовать белый фон вместо черного (по умолчанию), например, для оценки набора данных NeRF Synthetic.
Порядок используемых сферических гармоник (не более 3). 3
по умолчанию.
Флаг, чтобы конвейер выполнял вычисления вперед и назад от SH с помощью PyTorch вместо нашего.
Флаг, позволяющий конвейеру вычислять прямую и обратную 3D-ковариацию с помощью PyTorch вместо нашей.
Включает режим отладки, если возникают ошибки. Если растеризатор дает сбой, создается файл dump
, который вы можете отправить нам при возникновении проблемы, чтобы мы могли проверить.
Отладка идет медленно . Вы можете указать итерацию (начиная с 0), после которой описанная выше отладка станет активной.
Общее количество итераций для обучения, по умолчанию 30_000
.
IP-адрес для запуска сервера графического интерфейса, по умолчанию 127.0.0.1
.
Порт, используемый для сервера графического интерфейса, по умолчанию 6009
.
Итерации, разделенные пробелами, при которых сценарий обучения вычисляет L1 и PSNR по тестовому набору, 7000 30000
по умолчанию.
Итерации, разделенные пробелами, при которых сценарий обучения сохраняет гауссову модель, 7000 30000
по умолчанию.
Итерации, разделенные пробелами, для сохранения контрольной точки для дальнейшего продолжения, сохраняются в каталоге модели.
Путь к сохраненной контрольной точке, с которой можно продолжить обучение.
Флаг, позволяющий опустить любой текст, записанный в стандартный выходной канал.
Сферические гармоники имеют скорость обучения, по умолчанию 0.0025
.
Скорость обучения непрозрачности, по умолчанию 0.05
.
Масштабирование скорости обучения, по умолчанию 0.005
.
Скорость обучения ротации, по умолчанию 0.001
.
Количество шагов (от 0), на которых скорость обучения позиции меняется от initial
до final
. 30_000
по умолчанию.
Начальная скорость обучения 3D-позиции, по умолчанию 0.00016
.
Окончательная скорость обучения 3D-позиции, по умолчанию 0.0000016
.
Множитель скорости обучения позиции (см. Plenoxels), по умолчанию 0.01
.
Итерация, с которой начинается уплотнение, по умолчанию 500
.
Итерация, на которой уплотнение прекращается, по умолчанию 15_000
.
Предел, определяющий, следует ли уплотнять точки на основе 2D-градиента положения, по умолчанию 0.0002
.
Частота уплотнения: по умолчанию 100
(каждые 100 итераций).
Как часто сбрасывать непрозрачность, по умолчанию 3_000
.
Влияние SSIM на общие потери от 0 до 1, по умолчанию 0.2
.
Процент экстента сцены (0--1), который должна превышать точка для принудительного уплотнения, по умолчанию 0.01
.
Обратите внимание, что, как и в случае с MipNeRF360, мы ориентируемся на изображения с разрешением в диапазоне 1–1,6 тыс. пикселей. Для удобства можно передавать входные данные произвольного размера, размер которых будет автоматически изменен, если их ширина превышает 1600 пикселей. Мы рекомендуем сохранить это поведение, но вы можете заставить обучение использовать изображения с более высоким разрешением, установив -r 1
.
Сцены MipNeRF360 размещены авторами статьи здесь. Вы можете найти наши наборы данных SfM для Tanks&Temples и Deep Blending здесь. Если вы не указываете каталог выходной модели ( -m
), обученные модели записываются в папки со случайными уникальными именами внутри output
каталога. На этом этапе обученные модели можно просматривать с помощью средства просмотра в реальном времени (см. ниже).
По умолчанию обученные модели используют все доступные изображения в наборе данных. Чтобы обучить их, удерживая набор тестов для оценки, используйте флаг --eval
. Таким образом, вы можете визуализировать обучающие/тестовые наборы и получать метрики ошибок следующим образом:
python train.py -s <путь к набору синтетических данных COLMAP или NeRF> --eval # Обучение с помощью поезда/теста Splitpython render.py -m <путь к обученной модели> # Создать renderingspython metrics.py -m <путь к обученной модели> # Вычисление показателей ошибок при рендеринге
Если вы хотите оценить наши предварительно обученные модели, вам придется загрузить соответствующие наборы исходных данных и указать их местоположение в render.py
с помощью дополнительного флага --source_path/-s
. Примечание. Предварительно обученные модели были созданы с использованием кодовой базы выпуска. Эта база кода была очищена и включает исправления ошибок, поэтому метрики, которые вы получите в результате их оценки, будут отличаться от тех, которые приведены в статье.
python render.py -m <путь к предварительно обученной модели> -s <путь к набору данных COLMAP>python metrics.py -m <путь к предварительно обученной модели>
Путь к каталогу обученной модели, для которой вы хотите создать визуализацию.
Флаг, позволяющий пропустить отрисовку обучающего набора.
Флаг, позволяющий пропустить отрисовку набора тестов.
Флаг, позволяющий опустить любой текст, записанный в стандартный выходной канал.
Приведенные ниже параметры будут автоматически считываться из пути модели на основе того, что использовалось для обучения. Однако вы можете переопределить их, указав их явно в командной строке.
Путь к исходному каталогу, содержащему набор данных COLMAP или Synthetic NeRF.
Альтернативный подкаталог для изображений COLMAP ( images
по умолчанию).
Добавьте этот флаг, чтобы использовать для оценки разделение обучения и тестирования в стиле MipNeRF360.
Изменяет разрешение загруженных изображений перед тренировкой. Если указано 1, 2, 4
или 8
, используется исходное разрешение, разрешение 1/2, 1/4 или 1/8 соответственно. Для всех остальных значений ширина масштабируется до заданного числа, сохраняя при этом пропорции изображения. 1
по умолчанию.
Добавьте этот флаг, чтобы использовать белый фон вместо черного (по умолчанию), например, для оценки набора данных NeRF Synthetic.
Флаг, позволяющий выполнять рендеринг конвейера с использованием вычисленных SH из PyTorch вместо наших.
Флаг, позволяющий выполнять конвейерную визуализацию с вычисленной 3D-ковариацией из PyTorch вместо нашей.
Список путей модели, разделенных пробелами, для которых следует вычислять метрики.
Мы также предоставляем скрипт full_eval.py
. Этот сценарий определяет процедуру, используемую в нашей оценке, и демонстрирует использование некоторых дополнительных параметров, например --images (-i)
для определения альтернативных каталогов изображений в наборах данных COLMAP. Если вы загрузили и извлекли все данные обучения, вы можете запустить их следующим образом:
python full_eval.py -m360 <папка mipnerf360> -tat <папка танков и храмов> -db <папка глубокого смешивания>
В текущей версии этот процесс занимает около 7 часов на нашей эталонной машине с A6000. Если вы хотите провести полную оценку наших предварительно обученных моделей, вы можете указать место их загрузки и пропустить обучение.
python full_eval.py -o <каталог с предварительно обученными моделями> --skip_training -m360 <папка mipnerf360> -tat <папка танков и храмов> -db <папка глубокого смешивания>
Если вы хотите вычислить метрики оценочных изображений нашей статьи, вы также можете пропустить рендеринг. В этом случае нет необходимости предоставлять исходные наборы данных. Вы можете вычислять метрики для нескольких наборов изображений одновременно.
python full_eval.py -m <каталог с оценочными изображениями>/garden ... --skip_training --skip_rendering
Мы предоставляем два интерактивных средства просмотра для нашего метода: удаленное и в режиме реального времени. Наши решения для просмотра основаны на платформе SIBR, разработанной группой GRAPHDECO для нескольких проектов синтеза новых изображений.
Графический процессор и драйверы с поддержкой OpenGL 4.5 (или новейшее программное обеспечение MESA)
Рекомендуется 4 ГБ видеопамяти
Графический процессор с поддержкой CUDA и вычислительными возможностями 7.0+ (только для средства просмотра в реальном времени)
Visual Studio или g++, а не Clang (мы использовали Visual Studio 2019 для Windows)
CUDA SDK 11, устанавливать после Visual Studio (мы использовали 11.8)
CMake (последняя версия, мы использовали 3.24)
7zip (только в Windows)
Здесь мы предоставляем готовые двоичные файлы для Windows. Мы рекомендуем использовать их в Windows для эффективной настройки, поскольку сборка SIBR включает в себя несколько внешних зависимостей, которые необходимо загружать и компилировать на лету.
Если вы клонировали с помощью подмодулей (например, используя --recursive
), исходный код средств просмотра находится в SIBR_viewers
. Средство просмотра сети работает в рамках SIBR для приложений рендеринга на основе изображений.
CMake должен позаботиться о ваших зависимостях.
компакт-диск SIBR_viewers cmake -Bbuild .cmake --build build --target install --config RelWithDebInfo
Вы можете указать другую конфигурацию, например Debug
если вам нужен больший контроль во время разработки.
Прежде чем запускать настройку проекта, вам нужно будет установить несколько зависимостей.
# Зависимостиsudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev# Project setupcd SIBR_viewers cmake -Bbuild. -DCMAKE_BUILD_TYPE=Release # добавить -G Ninja для ускорения сборкиcmake --build build -j24 --target install
Обратная совместимость с Focal Fossa не полностью протестирована, но сборка SIBR с помощью CMake все равно должна работать после вызова.
git checkout fossa_compatibility
Интерфейс SIBR предоставляет несколько методов навигации по сцене. По умолчанию вы начнете с навигатора FPS, которым вы можете управлять с помощью W, A, S, D, Q, E
для перемещения камеры и I, K, J, L, U, O
для вращения. Альтернативно вы можете использовать навигатор в стиле трекбола (выберите из плавающего меню). Вы также можете привязаться к камере из набора данных с помощью кнопки Snap to
или найти ближайшую камеру с помощью Snap to closest
. Плавающие меню также позволяют изменять скорость навигации. Вы можете использовать Scaling Modifier
, чтобы контролировать размер отображаемых гауссианов или отображать исходное облако точек.
После извлечения или установки средств просмотра вы можете запустить скомпилированное приложение SIBR_remoteGaussian_app[_config]
в
, например:
./<каталог установки SIBR>/bin/SIBR_remoteGaussian_app
Средство просмотра сети позволяет вам подключиться к выполняющемуся тренировочному процессу на той же или другой машине. Если вы тренируетесь на той же машине и с той же ОС, параметры командной строки не требуются: оптимизатор сообщает местонахождение обучающих данных средству просмотра сети. По умолчанию оптимизатор и программа просмотра сети попытаются установить соединение на локальном хосте через порт 6009 . Вы можете изменить это поведение, предоставив соответствующие параметры --ip
и --port
как оптимизатору, так и средству просмотра сети. Если по какой-либо причине путь, используемый оптимизатором для поиска обучающих данных, недоступен для средства просмотра сети (например, из-за того, что они работают на разных (виртуальных) машинах), вы можете указать для средства просмотра место переопределения, используя -s
.
Аргумент для переопределения пути модели к исходному набору данных.
IP-адрес, который будет использоваться для подключения к работающему сценарию обучения.
Порт, который будет использоваться для подключения к работающему обучающему сценарию.
Принимает два числа, разделенных пробелами, чтобы определить разрешение, при котором происходит сетевой рендеринг, ширина по умолчанию 1200
. Обратите внимание, что для обеспечения соблюдения аспекта, который отличается от входных изображений, вам также понадобится --force-aspect-ratio
.
Флаг для загрузки изображений исходного набора данных, которые будут отображаться в виде сверху для каждой камеры.
После извлечения или установки программ просмотра вы можете запустить скомпилированное приложение SIBR_gaussianViewer_app[_config]
в
, например:
./<каталог установки SIBR>/bin/SIBR_gaussianViewer_app -m <путь к обученной модели>
Достаточно указать параметр -m
, указывающий на каталог обученной модели. Альтернативно вы можете указать местоположение переопределения для обучения входных данных с помощью -s
. Чтобы использовать конкретное разрешение, отличное от автоматически выбранного, укажите --rendering-size
. Объедините его с --force-aspect-ratio
если вам нужно точное разрешение и вы не против искажения изображения.
Чтобы разблокировать полную частоту кадров, отключите V-Sync на своем компьютере, а также в приложении (Меню → Дисплей). В системе с несколькими графическими процессорами (например, ноутбуке) ваш графический процессор OpenGL/Display должен быть таким же, как ваш графический процессор CUDA (например, путем установки предпочтений графического процессора приложения в Windows, см. ниже) для максимальной производительности. Помимо исходного облака точек и пятен, у вас также есть возможность визуализировать гауссианы, визуализируя их как эллипсоиды из плавающего меню. SIBR имеет множество других функций, более подробную информацию о средстве просмотра, параметрах навигации и т. д. см. в документации. Существует также вид сверху (доступный из меню), который показывает расположение входных камер и исходное облако точек SfM; Обратите внимание, что вид сверху замедляет рендеринг, если он включен. Средство просмотра в реальном времени также использует немного более агрессивный и быстрый отбор, который можно переключать в плавающем меню. Если вы когда-нибудь столкнетесь с проблемой, которую можно решить, отключив быструю отбраковку, сообщите нам об этом.
Наши загрузчики COLMAP ожидают следующую структуру набора данных в исходном пути:
|---images | |--- | |--- | |---... |---sparse |---0 |---cameras.bin |---images.bin |---points3D.bin
Для растеризации модели камеры должны быть камерой SIMPLE_PINHOLE или PINHOLE. Мы предоставляем скрипт конвертера convert.py
для извлечения неискаженных изображений и информации SfM из входных изображений. При желании вы можете использовать ImageMagick для изменения размера неискаженных изображений. Это масштабирование аналогично MipNeRF360, т.е. оно создает изображения с 1/2, 1/4 и 1/8 исходного разрешения в соответствующих папках. Чтобы использовать их, сначала установите последнюю версию COLMAP (в идеале на базе CUDA) и ImageMagick. Поместите изображения, которые вы хотите использовать, в каталог
.
|---input |--- |--- |---...
Если у вас есть COLMAP и ImageMagick на вашем системном пути, вы можете просто запустить
python Convert.py -s[--resize] #Если размер не изменяется, ImageMagick не требуется
Альтернативно вы можете использовать необязательные параметры --colmap_executable
и --magick_executable
чтобы указать соответствующие пути. Обратите внимание, что в Windows исполняемый файл должен указывать на файл COLMAP .bat
, который отвечает за настройку среды выполнения. После этого
будет содержать ожидаемую структуру набора данных COLMAP с неискаженными входными изображениями с измененным размером, в дополнение к вашим исходным изображениям и некоторым временным (искаженным) данным в каталоге distorted
.
Если у вас есть собственный набор данных COLMAP без искажений (например, с использованием камеры OPENCV
), вы можете попробовать просто запустить последнюю часть сценария: поместите изображения на input
, а информацию COLMAP в подкаталог « distorted
:
|---input | |--- | |--- | |---... |---distorted |---database.db |---sparse |---0 |---...
Затем запустите
python Convert.py -s--skip_matching [--resize] #Если размер не изменяется, ImageMagick не требуется
Отметьте, чтобы избежать использования графического процессора в COLMAP.
Флаг, указывающий, что информация COLMAP доступна для изображений.
Расположение входов.
Какую модель камеры использовать для ранних этапов сопоставления, по умолчанию OPENCV
.
Флаг для создания версий входных изображений с измененным размером.
Путь к исполняемому файлу COLMAP ( .bat
в Windows).
Путь к исполняемому файлу ImageMagick.
Мы интегрировали замену Taming-3dgs 1 с Fused ssim в исходную кодовую базу, чтобы ускорить время обучения. После установки ускоренный растеризатор обеспечивает --optimizer_type default
и --optimizer_type sparse_adam
.
Чтобы ускорить обучение, сначала необходимо установить ускоренный растеризатор в свою среду:
pip uninstall diff-gaussian-rasterization -ycd submodules/diff-gaussian-rasterization rm -r построить Git проверка 3dgs_accel установка пипа.
Затем вы можете добавить следующий параметр, чтобы использовать оптимизатор разреженного Адама при запуске train.py
:
--optimizer_type разреженный_адам
Обратите внимание, что этот пользовательский растеризатор ведет себя иначе, чем исходная версия. Более подробную информацию о времени обучения см. в статистике времени обучения .
1. Маллик и Гоэл и др. «Укрощение 3DGS: высококачественные сияющие поля с ограниченными ресурсами». Материалы конференции SIGGRAPH Asia 2024, 2024 г., https://doi.org/10.1145/3680528.3687694, github
Чтобы лучше реконструировать сцены, мы используем карты глубины в качестве априорных значений во время оптимизации каждого входного изображения. Лучше всего он работает на нетекстурированных частях, например, на дорогах, и может удалять поплавки. В нескольких статьях аналогичные идеи использовались для улучшения различных аспектов 3DGS; (например, DepthRegularizedGS, SparseGS, DNGaussian). Регуляризация глубины, которую мы интегрировали, аналогична той, которая использовалась в нашей статье по иерархическому 3DGS, но применялась к исходному 3DGS; для некоторых сцен (например, сцен DeepBlending) это значительно улучшает качество; для других это либо имеет небольшое значение, либо может быть даже хуже. Примеры результатов, показывающих потенциальную выгоду, и статистику качества см. здесь: Статистика для глубинной регуляризации.
При обучении на синтетическом наборе данных можно создавать карты глубины, которые не требуют дальнейшей обработки для использования в нашем методе.
Для реальных наборов данных карты глубины должны быть созданы для каждого входного изображения. Для их создания выполните следующие действия:
Клонировать глубину чего угодно v2:
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
Загрузите веса из Depth-Anything-V2-Large и поместите их в папку Depth-Anything-V2/checkpoints/
Создать карты глубины:
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale --img-path--outdir
Создайте файл depth_params.json
, используя:
python utils/make_depth_scale.py --base_dir--depths_dir
При обучении следует установить новый параметр, если вы хотите использовать регуляризацию глубины -d
.
Чтобы компенсировать изменения экспозиции в различных входных изображениях, мы оптимизируем аффинное преобразование для каждого изображения, как и в иерархическом 3dgs.
Это может значительно улучшить результаты реконструкции для снимков «в дикой природе», например, с помощью смартфона, когда настройка экспозиции камеры не фиксирована. Примеры результатов, показывающих потенциальную выгоду, и статистику качества можно найти здесь: Статистика компенсации экспозиции.
Добавьте следующие параметры, чтобы включить его:
--exposure_lr_init 0.001 --exposure_lr_final 0.0001 --exposure_lr_delay_steps 5000 --exposure_lr_delay_mult 0.001 --train_test_exp
Опять же, подобные идеи использовались и в других замечательных статьях, например, NeRF-W, URF.
Мы добавили фильтр EWA из Mip Splatting в нашу кодовую базу для удаления псевдонимов. По умолчанию он отключен, но вы можете включить его, добавив --antialiasing
при обучении сцены с использованием train.py
или рендеринге с использованием render.py
. Сглаживание можно включить в средстве просмотра SIBR, оно отключено по умолчанию, но вам следует включить его при просмотре сцены, обученной с использованием --antialiasing
. эта сцена была обучена с использованием --antialiasing
.
Views > Top view
Top view
отображает облако точек SfM в другом виде с соответствующими входными камерами и пользовательской камерой Point view
. Это позволяет, например, визуализировать, насколько далеко зритель находится от входных камер.
Это 3D-вид, поэтому пользователь может перемещаться по нему так же, как и в Point view
(доступные режимы: FPS, трекбол, орбита).
Доступны параметры для настройки этого вида, сетки можно отключать/включать, а их масштабы можно изменять.
Полезной дополнительной функцией является перемещение к положению входного изображения и постепенное исчезновение до точки обзора SfM в этом положении (например, для проверки выравнивания камеры). Виды с входных камер могут отображаться в Top view
( обратите внимание, что --images-path
должен быть установлен в командной строке ). Камеру Top view
можно привязать к ближайшей входной камере пользовательской камеры в Point view
, нажав Top view settings > Cameras > Snap to closest
поддержке .OpenXR».
OpenXR поддерживается в ветке gaussian_code_release_openxr
. В этой ветке вы можете найти документацию по поддержке VR здесь.
Где я могу получить наборы данных, например те, которые указаны в full_eval.py
? Набор данных MipNeRF360 предоставлен авторами оригинальной статьи на сайте проекта. Обратите внимание, что два набора данных не могут быть опубликованы открыто и требуют прямой консультации с авторами. Для танков и храмов и глубокого смешивания воспользуйтесь ссылками для скачивания, расположенными вверху страницы. Альтернативно вы можете получить доступ к клонированным данным (статус: август 2023 г.!) из HuggingFace.
Как я могу использовать это для гораздо большего набора данных, например, для городского района? Текущий метод не был предназначен для этого, но при наличии достаточного объема памяти он должен сработать. Однако этот подход может оказаться проблематичным в сценах с многомасштабной детализацией (очень крупные планы, смешанные с дальними планами). Обычно это происходит, например, с наборами данных о вождении (машины близко, здания далеко). Для таких сцен вы можете снизить --position_lr_init
, --position_lr_final
и --scaling_lr
(x0.3, x0.1, ...). Чем обширнее сцена, тем ниже должны быть эти значения. Ниже мы используем скорость обучения по умолчанию (слева) и --position_lr_init 0.000016 --scaling_lr 0.001"
(справа).
Я использую Windows и не могу собрать подмодули, что мне делать? Рассмотрите возможность выполнения шагов из отличного видеоурока здесь, надеюсь, они помогут. Порядок выполнения шагов важен! Альтернативно рассмотрите возможность использования связанного шаблона Colab.
Это все еще не работает. Там что-то написано о cl.exe
. Что мне делать? Пользователь Генри Пирс нашел обходной путь. Вы можете попробовать добавить путь Visual Studio к переменным среды (номер вашей версии может отличаться); C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64
Затем убедитесь, что вы запустили новое приглашение conda, перейдите в местоположение своего репозитория и попробуйте это;
conda activate gaussian_splatting cd/gaussian-splatting pip install submodulesdiff-gaussian-rasterization pip install submodulessimple-knn
Я использую macOS/Puppy Linux/Greenhat и не могу собрать сборку. Что мне делать? К сожалению, мы не можем обеспечить поддержку для платформ, кроме тех, которые перечислены в этом README. Рассмотрите возможность использования связанного шаблона Colab.
У меня нет 24 ГБ видеопамяти для обучения, что делать? Потребление VRAM определяется количеством оптимизируемых точек, которое со временем увеличивается. Если вы хотите обучиться только 7 тыс. итераций, вам понадобится значительно меньше. Чтобы выполнить полную процедуру обучения и избежать нехватки памяти, вы можете увеличить --densify_grad_threshold
, --densification_interval
или уменьшить значение --densify_until_iter
. Однако учтите, что это повлияет на качество результата. Также попробуйте установить для --test_iterations
значение -1
, чтобы избежать скачков памяти во время тестирования. Если --densify_grad_threshold
очень высок, уплотнения не должно происходить, и обучение должно завершиться, если сама сцена загрузится успешно.
24 ГБ видеопамяти для обучения эталонного качества — это все равно много! Разве мы не можем сделать это с меньшими затратами? Да, скорее всего. По нашему ок.