Implementasi resmi "Gambar Percikan: Rekonstruksi 3D Tampilan Tunggal Sangat Cepat" (CVPR 2024)
[16 Apr 2024] Beberapa pembaruan besar pada proyek ini sejak rilis pertama:
Lihat demo onlinenya. Menjalankan demo secara lokal seringkali lebih cepat dan Anda akan dapat melihat loop yang dirender dengan Gaussian Splatting (dibandingkan dengan objek .ply yang diekstraksi yang dapat menampilkan artefak). Untuk menjalankan demo secara lokal, cukup ikuti petunjuk instalasi di bawah ini, lalu hubungi:
python gradio_app.py
conda create --name splatter-image
conda activate splatter-image
Instal Pytorch dengan mengikuti instruksi resmi. Kombinasi Pytorch / Python / Pytorch3D yang diverifikasi berfungsi adalah:
Instal persyaratan lain:
pip install -r requirements.txt
Instal penyaji Gaussian Splatting, yaitu perpustakaan untuk merender awan Gaussian Point ke suatu gambar. Untuk melakukannya, tarik repositori Gaussian Splatting dan, dengan lingkungan conda Anda diaktifkan, jalankan pip install submodules/diff-gaussian-rasterization
. Anda harus memenuhi persyaratan perangkat keras dan perangkat lunak. Kami melakukan semua eksperimen pada GPU NVIDIA A6000 dan pengukuran kecepatan pada GPU NVIDIA V100.
Jika Anda ingin melatih data CO3D, Anda perlu menginstal Pytorch3D 0.7.2. Lihat instruksi di sini. Disarankan untuk menginstal dengan pip dari biner yang sudah dibuat sebelumnya. Temukan biner yang kompatibel di sini dan instal dengan pip
. Misalnya, dengan Python 3.8, Pytorch 1.13.0, CUDA 11.6 jalankan 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
.
Untuk pelatihan/evaluasi kelas ShapeNet-SRN (mobil, kursi) silakan unduh srn_*.zip (* = mobil atau kursi) dari folder data PixelNeRF. Buka zip file data dan ubah SHAPENET_DATASET_ROOT
di datasets/srn.py
ke folder induk dari folder yang tidak di-zip. Misalnya, jika struktur folder Anda adalah: /home/user/SRN/srn_cars/cars_train
, di datasets/srn.py
set SHAPENET_DATASET_ROOT="/home/user/SRN"
. Tidak diperlukan pra-pemrosesan tambahan.
Untuk pelatihan/evaluasi CO3D, unduh kelas hidran dan teddybear dari rilis CO3D. Untuk melakukannya, jalankan perintah berikut:
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
Selanjutnya, setel CO3D_RAW_ROOT
ke DOWNLOAD_FOLDER
Anda di data_preprocessing/preoprocess_co3d.py
. Setel CO3D_OUT_ROOT
ke tempat Anda ingin menyimpan data yang telah diproses sebelumnya. Berlari
python -m data_preprocessing.preprocess_co3d
dan atur CO3D_DATASET_ROOT:=CO3D_OUT_ROOT
.
Untuk ShapeNet multi-kategori kami menggunakan kumpulan data ShapeNet 64x64 oleh NMR yang dihosting oleh penulis DVR yang dapat diunduh di sini. Buka zip folder dan setel NMR_DATASET_ROOT
ke direktori yang menampung folder subkategori setelah membuka ritsleting. Dengan kata lain, direktori NMR_DATASET_ROOT
harus berisi folder 02691156
, 02828884
, 02933112
dll.
Untuk pelatihan Objaverse kami menggunakan rendering dari Zero-1-to-3 yang dapat diunduh dengan perintah follownig:
wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz
Penafian: perhatikan bahwa rendering dibuat dengan Objaverse. Rendering secara keseluruhan dirilis di bawah lisensi ODC-By 1.0. Lisensi untuk rendering objek individual dirilis di bawah lisensi creative commons yang sama dengan yang ada di Objaverse.
Selain itu, silakan unduh lvis-annotations-filtered.json
dari repositori model. Json ini yang menyimpan daftar ID objek dari subset LVIS. Aset-aset ini memiliki kualitas yang lebih tinggi.
Setel OBJAVERSE_ROOT
di datasets/objaverse.py
ke direktori folder yang belum di-zip dengan rendering, dan setel OBJAVERSE_LVIS_ANNOTATION_PATH
dalam file yang sama ke direktori file .json
yang diunduh.
Perhatikan bahwa kumpulan data Objaverse dimaksudkan untuk pelatihan dan validasi saja. Itu tidak memiliki subset pengujian.
Untuk mengevaluasi model yang dilatih di Objaverse, kami menggunakan kumpulan data Google Scanned Objects untuk memastikan tidak ada tumpang tindih dengan kumpulan pelatihan. Unduh rendering disediakan oleh Free3D. Buka zip folder yang diunduh dan setel GSO_ROOT
di datasets/gso.py
ke direktori folder yang tidak di-zip.
Perhatikan bahwa kumpulan data Objek yang Dipindai Google tidak dimaksudkan untuk pelatihan. Ini digunakan untuk menguji model yang dilatih di Objaverse.
Model terlatih untuk semua kumpulan data kini tersedia melalui Model Huggingface. Jika Anda hanya ingin menjalankan evaluasi kualitatif/kuantitatif, tidak perlu mendownloadnya secara manual, mereka akan digunakan secara otomatis jika Anda menjalankan script evaluasi (lihat di bawah).
Anda juga dapat mendownloadnya secara manual jika Anda ingin melakukannya, dengan mengklik tombol download secara manual di halaman file model Huggingface. Unduh file konfigurasi dengannya dan lihat eval.py
untuk mengetahui cara model dimuat.
Setelah Anda mengunduh kumpulan data yang relevan, evaluasi dapat dijalankan
python eval.py $dataset_name
$dataset_name
adalah nama kumpulan data. Kami mendukung:
gso
(Objek yang Dipindai Google),objaverse
(Objaverse-LVIS),nmr
(ShapeNet multi-kategori),hydrants
(hidran CO3D),teddybears
(boneka beruang CO3D),cars
(mobil ShapeNet),chairs
(kursi ShapeNet). Kode akan secara otomatis mendownload model yang relevan untuk kumpulan data yang diminta.Anda juga dapat melatih model Anda sendiri dan mengevaluasinya
python eval.py $dataset_name --experiment_path $experiment_path
$experiment_path
harus menyimpan file model_latest.pth
dan folder .hydra
dengan config.yaml
di dalamnya.
Untuk mengevaluasi pemisahan validasi, panggil dengan opsi --split val
.
Untuk menyimpan render objek dengan kamera bergerak dalam satu lingkaran, panggil dengan opsi --split vis
. Dengan opsi ini, skor kuantitatif tidak dikembalikan karena gambar kebenaran dasar tidak tersedia di semua kumpulan data.
Anda dapat mengatur berapa banyak objek yang akan disimpan rendernya dengan opsi --save_vis
. Anda dapat mengatur tempat menyimpan render dengan opsi --out_folder
.
Model tampilan tunggal dilatih dalam dua tahap, pertama tanpa LPIPS (sebagian besar pelatihan), diikuti dengan penyesuaian dengan LPIPS.
python train_network.py +dataset=$dataset_name
opt.pretrained_ckpt
(secara default disetel ke null). python train_network.py +dataset=$dataset_name +experiment=$lpips_experiment_name
$lpips_experiment_name
mana yang akan digunakan bergantung pada kumpulan data. Jika $dataset_name ada di [cars,hydrants,teddybears], gunakan lpips_100k.yaml. Jika $dataset_name adalah kursi, gunakan lpips_200k.yaml. Jika $dataset_name adalah nmr, gunakan lpips_nmr.yaml. Jika $dataset_name adalah objaverse, gunakan lpips_objaverse.yaml. Ingatlah untuk menempatkan direktori model dari tahap pertama di file .yaml yang sesuai sebelum meluncurkan tahap kedua.Untuk melatih menjalankan model 2 tampilan:
python train_network.py +dataset=cars cam_embd=pose_pos data.input_images=2 opt.imgs_per_obj=5
Loop pelatihan diimplementasikan di train_network.py
dan kode evaluasi ada di eval.py
. Kumpulan data diimplementasikan di datasets/srn.py
dan datasets/co3d.py
. Model diimplementasikan di scene/gaussian_predictor.py
. Panggilan ke penyaji dapat ditemukan di gaussian_renderer/__init__.py
.
Rasterizer Gaussian mengasumsikan orde baris-mayor dari matriks transformasi benda tegar, yaitu bahwa vektor posisi adalah vektor baris. Hal ini juga memerlukan kamera dalam konvensi COLMAP / OpenCV, yaitu x menunjuk ke kanan, y ke bawah, dan z menjauhi kamera (maju).
@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 didukung oleh Beasiswa Kemitraan Pelatihan Doktor EPSRC (DTP) EP/R513295/1 dan Beasiswa Oxford-Ashton. A. Vedaldi didukung oleh ERC-CoG UNION 101001212. Kami berterima kasih kepada Eldar Insafutdinov atas bantuannya dalam persyaratan instalasi.