"Splatter Image: Ultra-Fast Single-View 3D Reconstruction" 공식 구현(CVPR 2024)
[2024년 4월 16일] 첫 번째 릴리스 이후 프로젝트에 대한 몇 가지 대규모 업데이트:
온라인 데모를 확인해 보세요. 로컬에서 데모를 실행하는 것이 더 빠른 경우가 많으며 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 Point cloud를 이미지에 렌더링하기 위한 라이브러리를 설치합니다. 이렇게 하려면 Gaussian Splatting 저장소를 가져오고 conda 환경이 활성화된 상태에서 pip install submodules/diff-gaussian-rasterization
실행하세요. 하드웨어 및 소프트웨어 요구 사항을 충족해야 합니다. 우리는 NVIDIA A6000 GPU에서 모든 실험을 수행했고 NVIDIA V100 GPU에서 속도 측정을 수행했습니다.
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
실행합니다. 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 클래스(자동차, 의자)에 대한 교육/평가를 위해서는 PixelNeRF 데이터 폴더에서 srn_*.zip(* = 자동차 또는 의자)을 다운로드하십시오. 데이터 파일의 압축을 풀고 datasets/srn.py
의 SHAPENET_DATASET_ROOT
압축을 푼 폴더의 상위 폴더로 변경합니다. 예를 들어, 폴더 구조가 /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
다음으로 data_preprocessing/preoprocess_co3d.py
에서 CO3D_RAW_ROOT
DOWNLOAD_FOLDER
로 설정하세요. CO3D_OUT_ROOT
전처리된 데이터를 저장할 위치로 설정합니다. 달리다
python -m data_preprocessing.preprocess_co3d
CO3D_DATASET_ROOT:=CO3D_OUT_ROOT
설정합니다.
다중 범주 ShapeNet의 경우 여기에서 다운로드할 수 있는 DVR 작성자가 호스팅하는 NMR의 ShapeNet 64x64 데이터 세트를 사용합니다. 폴더의 압축을 풀고 NMR_DATASET_ROOT
압축 해제 후 하위 범주 폴더가 있는 디렉터리로 설정합니다. 즉, NMR_DATASET_ROOT
디렉터리에는 02691156
, 02828884
, 02933112
등의 폴더가 포함되어야 합니다.
Objaverse에 대한 교육을 위해 우리는 follownig 명령을 사용하여 다운로드할 수 있는 Zero-1-to-3의 렌더링을 사용했습니다.
wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz
면책 조항: 렌더링은 Objaverse를 사용하여 생성됩니다. 렌더링은 전체적으로 ODC-By 1.0 라이센스에 따라 릴리스됩니다. 개별 개체의 렌더링에 대한 라이선스는 Objaverse와 동일한 라이선스 크리에이티브 커먼즈에 따라 공개됩니다.
또한 모델 리포지토리에서 lvis-annotations-filtered.json
다운로드하세요. LVIS 하위 집합의 개체 ID 목록을 보유하는 이 json입니다. 이러한 자산은 품질이 더 높습니다.
datasets/objaverse.py
의 OBJAVERSE_ROOT
렌더링이 포함된 압축이 풀린 폴더의 디렉터리로 설정하고, 동일한 파일의 OBJAVERSE_LVIS_ANNOTATION_PATH
다운로드한 .json
파일의 디렉터리로 설정합니다.
Objaverse 데이터 세트는 교육 및 검증용으로만 사용됩니다. 테스트 하위 집합이 없습니다.
Objaverse에서 훈련된 모델을 평가하기 위해 Google Scanned Objects 데이터 세트를 사용하여 훈련 세트와 중복되지 않도록 합니다. Free3D에서 제공하는 렌더링을 다운로드하세요. 다운로드한 폴더의 압축을 풀고 datasets/gso.py
의 GSO_ROOT
압축이 풀린 폴더의 디렉터리로 설정합니다.
Google Scanned Objects 데이터 세트는 교육용이 아닙니다. Objaverse에서 훈련된 모델을 테스트하는 데 사용됩니다.
이제 Huggingface Models를 통해 모든 데이터세트에 대해 사전 훈련된 모델을 사용할 수 있습니다. 정성적/정량적 평가만 실행하려는 경우 수동으로 다운로드할 필요가 없으며 평가 스크립트를 실행하면 자동으로 사용됩니다(아래 참조).
원하는 경우 Huggingface 모델 파일 페이지에서 다운로드 버튼을 수동으로 클릭하여 수동으로 다운로드할 수도 있습니다. 구성 파일을 다운로드하고 모델이 로드되는 방법은 eval.py
참조하세요.
관련 데이터 세트를 다운로드한 후에는 다음을 사용하여 평가를 실행할 수 있습니다.
python eval.py $dataset_name
$dataset_name
은 데이터세트의 이름입니다. 우리는 다음을 지원합니다:
gso
(구글 스캔 개체),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
파일과 config.yaml
포함된 .hydra
폴더가 있어야 합니다.
검증 분할을 평가하려면 --split val
옵션을 사용하여 호출하세요.
카메라가 루프로 움직이는 객체의 렌더링을 저장하려면 --split vis
옵션을 사용하여 호출하세요. 이 옵션을 사용하면 모든 데이터세트에서 실제 이미지를 사용할 수 없으므로 정량적 점수가 반환되지 않습니다.
--save_vis
옵션을 사용하여 렌더링을 저장할 객체 수를 설정할 수 있습니다. --out_folder
옵션을 사용하여 렌더링을 저장할 위치를 설정할 수 있습니다.
단일 뷰 모델은 두 단계로 훈련됩니다. 첫 번째는 LPIPS 없이(대부분의 훈련), 그 다음에는 LPIPS를 사용하여 미세 조정합니다.
python train_network.py +dataset=$dataset_name
opt.pretrained_ckpt
옵션의 configs/experiment/lpips_$experiment_name.yaml에 출력 디렉터리 경로를 배치합니다(기본적으로 null로 설정됨). python train_network.py +dataset=$dataset_name +experiment=$lpips_experiment_name
$lpips_experiment_name
은 데이터 세트에 따라 다릅니다. $dataset_name이 [cars,hydrants,teddybears]에 있는 경우 lpips_100k.yaml을 사용하세요. $dataset_name이 의자인 경우 lpips_200k.yaml을 사용하세요. $dataset_name이 nmr인 경우 lpips_nmr.yaml을 사용합니다. $dataset_name이 objaverse인 경우 lpips_objaverse.yaml을 사용하세요. 두 번째 단계를 시작하기 전에 첫 번째 단계의 모델 디렉터리를 적절한 .yaml 파일에 배치하는 것을 잊지 마세요.2뷰 모델 실행을 학습하려면 다음 안내를 따르세요.
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)},
}
S. Szymanowicz는 EPSRC 박사 훈련 파트너십 장학금(DTP) EP/R513295/1 및 Oxford-Ashton 장학금의 지원을 받습니다. A. Vedaldi는 ERC-CoG UNION 101001212의 지원을 받습니다. 설치 요구 사항에 대한 도움을 주신 Eldar Insafutdinov에게 감사드립니다.