Официальная реализация «Splatter Image: сверхбыстрая трехмерная реконструкция в одном представлении» (CVPR 2024)
[16 апреля 2024 г.] Несколько крупных обновлений проекта с момента первого релиза:
Посмотрите онлайн-демо. Локальный запуск демо-версии часто будет еще быстрее, и вы сможете увидеть циклы, визуализированные с помощью Gaussian Splatting (в отличие от извлеченного объекта .ply, который может отображать артефакты). Чтобы запустить демо-версию локально, просто следуйте приведенным ниже инструкциям по установке, а затем вызовите:
python gradio_app.py
conda create --name splatter-image
conda activate splatter-image
Установите Pytorch, следуя официальным инструкциям. Комбинация Pytorch / Python / Pytorch3D, работа которой была проверена:
Установите другие требования:
pip install -r requirements.txt
Установите рендерер Gaussian Splatting, то есть библиотеку для рендеринга облака гауссовских точек на изображение. Для этого извлеките репозиторий Gaussian Splatting и, активировав среду conda, запустите pip install submodules/diff-gaussian-rasterization
. Вам необходимо будет удовлетворить требования к аппаратному и программному обеспечению. Все эксперименты мы проводили на графическом процессоре NVIDIA A6000, а измерения скорости — на графическом процессоре NVIDIA V100.
Если вы хотите тренироваться на данных CO3D, вам потребуется установить Pytorch3D 0.7.2. Инструкции смотрите здесь. Рекомендуется устанавливать с помощью pip из предварительно созданного двоичного файла. Найдите здесь совместимый двоичный файл и установите его с помощью pip
. Например, в Python 3.8, Pytorch 1.13.0, CUDA 11.6 запустите pip install --no-index --no-cache-dir pytorch3d -f https://anaconda.org/pytorch3d/pytorch3d/0.7.2/download/linux-64/pytorch3d-0.7.2-py38_cu116_pyt1130.tar.bz2
.
Для обучения/оценки классов ShapeNet-SRN (автомобили, стулья) загрузите файл srn_*.zip (* = автомобили или стулья) из папки данных PixelNeRF. Разархивируйте файл данных и измените SHAPENET_DATASET_ROOT
в datasets/srn.py
на родительскую папку разархивированной папки. Например, если ваша структура папок: /home/user/SRN/srn_cars/cars_train
, в datasets/srn.py
установите SHAPENET_DATASET_ROOT="/home/user/SRN"
. Никакой дополнительной предварительной обработки не требуется.
Для обучения/оценки CO3D загрузите классы гидрантов и плюшевых мишек из версии CO3D. Для этого выполните следующие команды:
git clone https://github.com/facebookresearch/co3d.git
cd co3d
mkdir DOWNLOAD_FOLDER
python ./co3d/download_dataset.py --download_folder DOWNLOAD_FOLDER --download_categories hydrant,teddybear
Затем установите CO3D_RAW_ROOT
в свою DOWNLOAD_FOLDER
в data_preprocessing/preoprocess_co3d.py
. Установите CO3D_OUT_ROOT
туда, где вы хотите хранить предварительно обработанные данные. Бегать
python -m data_preprocessing.preprocess_co3d
и установите CO3D_DATASET_ROOT:=CO3D_OUT_ROOT
.
Для многокатегорийной сети ShapeNet мы используем набор данных ShapeNet 64x64, полученный методом ЯМР, размещенный авторами DVR, который можно скачать здесь. Разархивируйте папку и установите NMR_DATASET_ROOT
в каталог, в котором после распаковки хранятся папки подкатегорий. Другими словами, каталог NMR_DATASET_ROOT
должен содержать папки 02691156
, 02828884
, 02933112
и т. д.
Для обучения на Objaverse мы использовали рендеры от Zero-1-to-3, которые можно скачать следующей командой:
wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz
Отказ от ответственности: обратите внимание, что визуализация создается с помощью Objaverse. Рендеринги в целом выпускаются под лицензией ODC-By 1.0. Лицензии на визуализацию отдельных объектов выпускаются под той же лицензией Creative Commons, что и в Objaverse.
Кроме того, загрузите lvis-annotations-filtered.json
из репозитория модели. Этот json содержит список идентификаторов объектов из подмножества LVIS. Эти активы более высокого качества.
Установите OBJAVERSE_ROOT
в datasets/objaverse.py
в каталог разархивированной папки с визуализациями и установите OBJAVERSE_LVIS_ANNOTATION_PATH
в том же файле в каталог загруженного файла .json
.
Обратите внимание, что набор данных Objaverse предназначен только для обучения и проверки. У него нет тестового подмножества.
Для оценки модели, обученной на Objaverse, мы используем набор данных Google Scanned Objects, чтобы гарантировать отсутствие дублирования с обучающим набором. Загрузите визуализации, предоставленные Free3D. Разархивируйте загруженную папку и установите GSO_ROOT
в datasets/gso.py
в каталог разархивированной папки.
Обратите внимание, что набор данных Google Scanned Objects не предназначен для обучения. Он используется для тестирования модели, обученной на Objaverse.
Предварительно обученные модели для всех наборов данных теперь доступны через Huggingface Models. Если вы просто хотите провести качественную/количественную оценку, не нужно загружать их вручную, они будут использоваться автоматически, если вы запустите сценарий оценки (см. ниже).
Вы также можете загрузить их вручную, если хотите, вручную нажав кнопку загрузки на странице файлов модели Huggingface. Загрузите с ним файл конфигурации и посмотрите eval.py
, как загружается модель.
После загрузки соответствующего набора данных оценку можно запустить с помощью
python eval.py $dataset_name
$dataset_name
— имя набора данных. Мы поддерживаем:
gso
(отсканированные объекты Google),objaverse
(Objaverse-LVIS),nmr
(многокатегорийная ShapeNet),hydrants
(гидранты CO3D),teddybears
(плюшевые мишки CO3D),cars
(автомобили ShapeNet),chairs
(стулья ShapeNet). Код автоматически загрузит соответствующую модель для запрошенного набора данных.Вы также можете обучать свои собственные модели и оценивать их с помощью
python eval.py $dataset_name --experiment_path $experiment_path
$experiment_path
должен содержать файл model_latest.pth
и папку .hydra
с config.yaml
внутри нее.
Чтобы оценить разделение проверки, вызовите опцию --split val
.
Чтобы сохранить рендеры объектов с камерой, движущейся по циклу, вызовите с опцией --split vis
. При использовании этой опции количественные оценки не возвращаются, поскольку достоверные изображения доступны не во всех наборах данных.
Вы можете установить, сколько объектов нужно сохранять при рендеринге, с помощью опции --save_vis
. Вы можете указать, где сохранять рендеры, с помощью опции --out_folder
.
Модели с одним представлением обучаются в два этапа: сначала без LPIPS (большая часть обучения), затем следует точная настройка с помощью LPIPS.
python train_network.py +dataset=$dataset_name
opt.pretrained_ckpt
(по умолчанию установлено значение null). python train_network.py +dataset=$dataset_name +experiment=$lpips_experiment_name
$lpips_experiment_name
использовать, зависит от набора данных. Если $dataset_name находится в [cars,gilrants,teddybears], используйте lpips_100k.yaml. Если $dataset_name — это стулья, используйте lpips_200k.yaml. Если $dataset_name — это NMR, используйте lpips_nmr.yaml. Если $dataset_name имеет значение objaverse, используйте lpips_objaverse.yaml. Не забудьте поместить каталог модели из первого этапа в соответствующий файл .yaml перед запуском второго этапа.Чтобы обучить модель с двумя представлениями, выполните:
python train_network.py +dataset=cars cam_embd=pose_pos data.input_images=2 opt.imgs_per_obj=5
Цикл обучения реализован в train_network.py
, а код оценки — в eval.py
Наборы данных реализованы в datasets/srn.py
и datasets/co3d.py
. Модель реализована в scene/gaussian_predictor.py
. Вызов рендерера можно найти в gaussian_renderer/__init__.py
.
Гауссов растеризатор предполагает порядок строк матриц преобразования твердого тела, т.е. что векторы положения являются векторами-строками. Также требуется, чтобы камеры соответствовали соглашению COLMAP/OpenCV, т. е. чтобы x указывал вправо, y вниз и z от камеры (вперед).
@inproceedings{szymanowicz24splatter,
title={Splatter Image: Ultra-Fast Single-View 3D Reconstruction},
author={Stanislaw Szymanowicz and Christian Rupprecht and Andrea Vedaldi},
year={2024},
booktitle={The IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}
С. Шиманович поддерживается стипендией партнерства по подготовке докторантов EPSRC (DTP) EP/R513295/1 и стипендией Оксфорда-Эштона. А. Ведальди поддерживается ERC-CoG UNION 101001212. Благодарим Эльдара Инсафутдинова за помощь с требованиями по установке.