Фотореалистичная визуализация реальных сцен со свободной точкой обзора с использованием классических методов компьютерной графики является сложной задачей, поскольку требует сложного этапа получения детальных моделей внешнего вида и геометрии. Нейронный рендеринг — это новая область, в которой глубокие нейронные сети используются для неявного изучения представлений сцены, инкапсулирующих как геометрию, так и внешний вид на основе 2D-наблюдений с грубой геометрией или без нее. Однако существующие подходы в этой области часто демонстрируют размытую визуализацию или страдают от медленного процесса визуализации. Мы предлагаем Neural Sparse Voxel Fields (NSVF), новое нейронное представление сцены для быстрого и высококачественного рендеринга со свободной точкой обзора.
Вот официальный репозиторий статьи:
Мы также предоставляем нашу неофициальную реализацию для:
Этот код реализован в PyTorch с использованием инфраструктуры fairseq.
Код был протестирован в следующей системе:
Поддерживаются только обучение и рендеринг на графических процессорах.
Для установки сначала клонируйте этот репозиторий и установите все зависимости:
pip install -r requirements.txt
Затем запустите
pip install --editable ./
Или, если вы хотите установить код локально, запустите:
python setup.py build_ext --inplace
Вы можете скачать предварительно обработанные синтетические и реальные наборы данных, использованные в нашей статье. Пожалуйста, указывайте также оригинальные статьи, если вы используете какие-либо из них в своей работе.
Набор данных | Ссылка для скачивания | Примечания по разделению набора данных |
---|---|---|
Синтетик-НСВФ | скачать (.zip) | 0_* (обучение) 1_* (проверка) 2_* (тестирование) |
Синтетический-NeRF | скачать (.zip) | 0_* (обучение) 1_* (проверка) 2_* (тестирование) |
СмешанныйMVS | скачать (.zip) | 0_* (обучение) 1_* (тестирование) |
Танки и храмы | скачать (.zip) | 0_* (обучение) 1_* (тестирование) |
Чтобы подготовить новый набор данных одной сцены для обучения и тестирования, следуйте структуре данных:
< dataset_name >
| -- bbox.txt # bounding-box file
| -- intrinsics.txt # 4x4 camera intrinsics
| -- rgb
| -- 0.png # target image for each view
| -- 1.png
...
| -- pose
| -- 0.txt # camera pose for each view (4x4 matrices)
| -- 1.txt
...
[optional]
| -- test_traj.txt # camera pose for free-view rendering demonstration (4N x 4)
где файл bbox.txt
содержит строку, описывающую исходную ограничивающую рамку и размер воксела:
x_min y_min z_min x_max y_max z_max initial_voxel_size
Обратите внимание, что имена файлов целевых изображений и соответствующих файлов поз камеры не обязательно должны совпадать. Однако порядок этих двух типов файлов (отсортированных по строкам) должен совпадать. Наборы данных разделены индексами представлений. Например, « train (0..100)
, valid (100..200)
и test (200..400)
» означает первые 100 просмотров для обучения, 100–199 просмотров для проверки и 200–399 просмотров для тестирования. .
Учитывая набор данных одной сцены ( {DATASET}
), мы используем следующую команду для обучения модели NSVF синтезу новых представлений с разрешением 800x800
пикселей с размером пакета 4
изображения на графический процессор и 2048
лучей на изображение. По умолчанию код автоматически обнаружит все доступные графические процессоры.
В следующем примере мы используем предопределенную архитектуру nsvf_base
с конкретными аргументами:
--no-sampling-at-reader
, модель выбирает только пиксели в области проецируемого изображения с редкими вокселами для обучения.1/8 (0.125)
размера воксела, который обычно описывается в файле bbox.txt
.--use-octree
необязательно. Он построит разреженное октодерево вокселей, чтобы ускорить пересечение лучей и вокселей, особенно когда количество вокселей превышает 10000
.--pruning-every-steps
как 2500
, модель будет выполнять самообрезку каждые 2500
шагов.--half-voxel-size-at
и --reduce-step-size-at
как 5000,25000,75000
, размер воксела и размер шага уменьшаются вдвое до 5k
, 25k
и 75k
соответственно.Обратите внимание, что, хотя приведенные выше настройки параметров используются для большинства экспериментов в статье, можно настроить эти параметры для достижения лучшего качества. Помимо вышеуказанных параметров, другие параметры также могут использовать настройки по умолчанию.
Помимо архитектуры nsvf_base
, вы можете проверить другие архитектуры или определить свои собственные в файле fairnr/models/nsvf.py
.
python -u train.py ${DATASET}
--user-dir fairnr
--task single_object_rendering
--train-views " 0..100 " --view-resolution " 800x800 "
--max-sentences 1 --view-per-batch 4 --pixel-per-view 2048
--no-preload
--sampling-on-mask 1.0 --no-sampling-at-reader
--valid-views " 100..200 " --valid-view-resolution " 400x400 "
--valid-view-per-batch 1
--transparent-background " 1.0,1.0,1.0 " --background-stop-gradient
--arch nsvf_base
--initial-boundingbox ${DATASET} /bbox.txt
--use-octree
--raymarching-stepsize-ratio 0.125
--discrete-regularization
--color-weight 128.0 --alpha-weight 1.0
--optimizer " adam " --adam-betas " (0.9, 0.999) "
--lr 0.001 --lr-scheduler " polynomial_decay " --total-num-update 150000
--criterion " srn_loss " --clip-norm 0.0
--num-workers 0
--seed 2
--save-interval-updates 500 --max-update 150000
--virtual-epoch-steps 5000 --save-interval 1
--half-voxel-size-at " 5000,25000,75000 "
--reduce-step-size-at " 5000,25000,75000 "
--pruning-every-steps 2500
--keep-interval-updates 5 --keep-last-epochs 5
--log-format simple --log-interval 1
--save-dir ${SAVE}
--tensorboard-logdir ${SAVE} /tensorboard
| tee -a $SAVE /train.log
Контрольные точки сохраняются в {SAVE}
. Вы можете запустить тензорную доску, чтобы проверить прогресс обучения:
tensorboard --logdir= ${SAVE} /tensorboard --port=10000
Дополнительные примеры обучающих сценариев для воспроизведения результатов нашей статьи приведены в разделе «Примеры».
После обучения модели следующая команда используется для оценки качества рендеринга в тестовых представлениях с заданным {MODEL_PATH}
.
python validate.py ${DATASET}
--user-dir fairnr
--valid-views " 200..400 "
--valid-view-resolution " 800x800 "
--no-preload
--task single_object_rendering
--max-sentences 1
--valid-view-per-batch 1
--path ${MODEL_PATH}
--model-overrides ' {"chunk_size":512,"raymarching_tolerance":0.01,"tensorboard_logdir":"","eval_lpips":True} '
Обратите внимание, что мы переопределяем raymarching_tolerance
на 0.01
чтобы включить досрочное завершение для ускорения рендеринга.
Рендеринг со свободной точкой обзора может быть достигнут после обучения модели и указания траектории рендеринга. Например, следующая команда предназначена для рендеринга по круговой траектории (угловая скорость 3 градуса на кадр, 15 кадров на графический процессор). При этом выводятся изображения, обработанные для каждого просмотра, и объединяются в видео .mp4
в ${SAVE}/output
следующим образом:
По умолчанию код может обнаружить все доступные графические процессоры.
python render.py ${DATASET}
--user-dir fairnr
--task single_object_rendering
--path ${MODEL_PATH}
--model-overrides ' {"chunk_size":512,"raymarching_tolerance":0.01} '
--render-beam 1 --render-angular-speed 3 --render-num-frames 15
--render-save-fps 24
--render-resolution " 800x800 "
--render-path-style " circle "
--render-path-args " {'radius': 3, 'h': 2, 'axis': 'z', 't0': -2, 'r':-1} "
--render-output ${SAVE} /output
--render-output-types " color " " depth " " voxel " " normal " --render-combine-output
--log-format " simple "
Наш код также поддерживает рендеринг для заданных поз камеры. Например, следующая команда предназначена для рендеринга с использованием поз камеры, определенных в файлах с 200 по 399-й в папке ${DATASET}/pose
:
python render.py ${DATASET}
--user-dir fairnr
--task single_object_rendering
--path ${MODEL_PATH}
--model-overrides ' {"chunk_size":512,"raymarching_tolerance":0.01} '
--render-save-fps 24
--render-resolution " 800x800 "
--render-camera-poses ${DATASET} /pose
--render-views " 200..400 "
--render-output ${SAVE} /output
--render-output-types " color " " depth " " voxel " " normal " --render-combine-output
--log-format " simple "
Код также поддерживает рендеринг с использованием поз камеры, определенных в файле .txt
. Пожалуйста, обратитесь к этому примеру.
Мы также поддерживаем запуск марширующих кубов для извлечения изо-поверхностей в виде треугольных сеток из обученной модели NSVF и сохранения их как {SAVE}/{NAME}.ply
.
python extract.py
--user-dir fairnr
--path ${MODEL_PATH}
--output ${SAVE}
--name ${NAME}
--format ' mc_mesh '
--mc-threshold 0.5
--mc-num-samples-per-halfvoxel 5
Также возможно экспортировать изученные разреженные вокселы, установив --format 'voxel_mesh'
. Выходной файл .ply
можно открыть с помощью любой программы 3D-просмотра, например MeshLab.
NSVF имеет лицензию MIT. Лицензия также распространяется на предварительно обученные модели.
Пожалуйста, укажите как
@article { liu2020neural ,
title = { Neural Sparse Voxel Fields } ,
author = { Liu, Lingjie and Gu, Jiatao and Lin, Kyaw Zaw and Chua, Tat-Seng and Theobalt, Christian } ,
journal = { NeurIPS } ,
year = { 2020 }
}