Bernhard Kerbl*, Georgios Kopanas*, Thomas Leimkühler, George Drettakis (* menunjukkan kontribusi yang setara)
| Halaman web | Makalah Lengkap | Video | Publikasi GRAPHDECO Lainnya | Halaman proyek FUNGRAFH |
| T&T+DB COLMAP (650MB) | Model Terlatih (14 GB) | Penampil untuk Windows (60MB) | Gambar Evaluasi (7 GB) |
Repositori ini berisi implementasi resmi penulis yang terkait dengan makalah "3D Gaussian Splatting for Real-Time Radiance Field Rendering", yang dapat ditemukan di sini. Kami selanjutnya menyediakan gambar referensi yang digunakan untuk membuat metrik kesalahan yang dilaporkan di makalah, serta model terlatih yang baru dibuat.
Abstrak: Metode Radiance Field baru-baru ini merevolusi sintesis pemandangan baru yang diambil dengan banyak foto atau video. Namun, untuk mencapai kualitas visual yang tinggi masih memerlukan jaringan saraf yang mahal untuk dilatih dan dirender, sementara metode yang lebih cepat saat ini pasti mengorbankan kecepatan demi kualitas. Untuk adegan tak terbatas dan lengkap (bukan objek terisolasi) dan rendering resolusi 1080p, tidak ada metode saat ini yang dapat mencapai kecepatan tampilan real-time. Kami memperkenalkan tiga elemen kunci yang memungkinkan kami mencapai kualitas visual tercanggih sambil mempertahankan waktu pelatihan yang kompetitif dan yang terpenting memungkinkan sintesis tampilan novel real-time (≥ 30 fps) berkualitas tinggi pada resolusi 1080p. Pertama, mulai dari titik jarang yang dihasilkan selama kalibrasi kamera, kami merepresentasikan pemandangan dengan Gaussians 3D yang mempertahankan properti bidang pancaran volumetrik kontinu yang diinginkan untuk optimalisasi pemandangan sekaligus menghindari komputasi yang tidak perlu di ruang kosong; Kedua, kami melakukan optimasi interleaved/kontrol kepadatan Gaussians 3D, terutama mengoptimalkan kovarians anisotropik untuk mencapai representasi pemandangan yang akurat; Ketiga, kami mengembangkan algoritme rendering dengan visibilitas cepat yang mendukung percikan anisotropik dan mempercepat pelatihan serta memungkinkan rendering waktu nyata. Kami mendemonstrasikan kualitas visual tercanggih dan rendering real-time pada beberapa kumpulan data yang sudah ada.
@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/} }
Penelitian ini didanai oleh hibah ERC Advanced FUNGRAPH No 788065. Penulis berterima kasih kepada Adobe atas donasi yang murah hati, infrastruktur OPAL dari Université Côte d'Azur dan sumber daya HPC dari GENCI–IDRIS (Hibah 2022-AD011013409). Para penulis mengucapkan terima kasih kepada pengulas anonim atas umpan balik mereka yang berharga, P. Hedman dan A. Tewari yang telah mengoreksi draf sebelumnya, serta T. Müller, A. Yu dan S. Fridovich-Keil yang telah membantu dalam perbandingan.
Kami memiliki sumber daya yang terbatas untuk memelihara dan memperbarui kode. Namun, kami telah menambahkan beberapa fitur baru sejak rilis aslinya yang terinspirasi oleh beberapa karya luar biasa yang telah dilakukan banyak peneliti lain pada 3DGS. Kami akan menambahkan fitur lain sesuai kemampuan sumber daya kami.
Pembaruan Oktober 2024 : Kami mengintegrasikan akselerasi kecepatan pelatihan dan membuatnya kompatibel dengan regularisasi kedalaman, anti-aliasing, dan kompensasi eksposur. Kami telah menyempurnakan penampil waktu nyata SIBR dengan memperbaiki bug dan menambahkan fitur di Tampilan Atas yang memungkinkan visualisasi input dan kamera pengguna.
Pembaruan Musim Semi 2024 : Orange Labs dengan baik hati menambahkan dukungan OpenXR untuk tampilan VR.
Jonathan Stephens membuat tutorial langkah demi langkah yang fantastis untuk menyiapkan Gaussian Splatting di mesin Anda, bersama dengan instruksi untuk membuat kumpulan data yang dapat digunakan dari video. Jika petunjuk di bawah ini terlalu kering untuk Anda, silakan periksa di sini.
Pengguna camenduru berbaik hati menyediakan template Colab yang menggunakan sumber repo ini (status: Agustus 2023!) untuk akses cepat dan mudah ke metode ini. Silakan periksa di sini.
Repositori berisi submodul, jadi silakan periksa
# SSHgit clone [email protected]:graphdeco-inria/gaussian-splatting.git --recursive
atau
# Klon HTTPSgit https://github.com/graphdeco-inria/gaussian-splatting --recursive
Basis kode memiliki 4 komponen utama:
Pengoptimal berbasis PyTorch untuk menghasilkan model Gaussian 3D dari input SfM
Penampil jaringan yang memungkinkan untuk terhubung dan memvisualisasikan proses pengoptimalan
Penampil real-time berbasis OpenGL untuk merender model terlatih secara real-time.
Skrip untuk membantu Anda mengubah gambar Anda menjadi kumpulan data SfM yang siap dioptimalkan
Komponen-komponen tersebut memiliki persyaratan yang berbeda baik perangkat keras maupun perangkat lunak. Mereka telah diuji pada Windows 10 dan Ubuntu Linux 22.04. Petunjuk untuk menyiapkan dan menjalankan masing-masingnya dapat ditemukan di bagian di bawah.
Pengoptimal menggunakan ekstensi PyTorch dan CUDA di lingkungan Python untuk menghasilkan model terlatih.
GPU siap CUDA dengan Kemampuan Komputasi 7.0+
VRAM 24 GB (untuk melatih kualitas evaluasi kertas)
Silakan lihat FAQ untuk konfigurasi VRAM yang lebih kecil
Conda (disarankan untuk pengaturan yang mudah)
C++ Compiler untuk ekstensi PyTorch (kami menggunakan Visual Studio 2019 untuk Windows)
CUDA SDK 11 untuk ekstensi PyTorch, instal setelah Visual Studio (kami menggunakan 11.8, masalah umum dengan 11.6 )
Kompiler C++ dan CUDA SDK harus kompatibel
Metode instalasi default kami yang disediakan didasarkan pada paket Conda dan manajemen lingkungan:
SET DISTUTILS_USE_SDK=1 # Windows onlyconda env create --file environment.yml conda mengaktifkan gaussian_splatting
Harap perhatikan bahwa proses ini mengasumsikan Anda telah menginstal CUDA SDK 11 , bukan 12 . Untuk modifikasinya lihat dibawah ini.
Tip: Mengunduh paket dan membuat lingkungan baru dengan Conda memerlukan banyak ruang disk. Secara default, Conda akan menggunakan hard drive sistem utama. Anda dapat menghindari hal ini dengan menentukan lokasi pengunduhan paket yang berbeda dan lingkungan pada drive yang berbeda:
conda config --tambahkan pkgs_dirs/ conda env buat --file environment.yml --prefix / /gaussian_splatting conda aktifkan / /gaussian_splatting
Jika Anda mampu membeli ruang disk, sebaiknya gunakan file lingkungan kami untuk menyiapkan lingkungan pelatihan yang identik dengan lingkungan kami. Jika Anda ingin melakukan modifikasi, harap diperhatikan bahwa perubahan versi besar mungkin mempengaruhi hasil metode kami. Namun, eksperimen (terbatas) kami menunjukkan bahwa basis kode berfungsi dengan baik di dalam lingkungan yang lebih terkini (Python 3.8, PyTorch 2.0.0, CUDA 12). Pastikan untuk membuat lingkungan di mana PyTorch dan versi runtime CUDA-nya cocok dan CUDA SDK yang diinstal tidak memiliki perbedaan versi yang besar dengan versi CUDA PyTorch.
Beberapa pengguna mengalami masalah dalam membangun submodul di Windows ( cl.exe: File not found
atau serupa). Silakan pertimbangkan solusi untuk masalah ini dari FAQ.
Untuk menjalankan pengoptimal, cukup gunakan
python train.py -s
Jalur ke direktori sumber yang berisi kumpulan data COLMAP atau NeRF Sintetis.
Jalur tempat model yang dilatih harus disimpan ( output/
secara default).
Subdirektori alternatif untuk gambar COLMAP ( images
secara default).
Tambahkan tanda ini untuk menggunakan pemisahan pelatihan/pengujian gaya MipNeRF360 untuk evaluasi.
Menentukan resolusi gambar yang dimuat sebelum pelatihan. Jika disediakan 1, 2, 4
atau 8
, masing-masing menggunakan resolusi asli, 1/2, 1/4 atau 1/8. Untuk semua nilai lainnya, ubah skala lebar ke angka tertentu dengan tetap mempertahankan aspek gambar. Jika tidak disetel dan lebar gambar masukan melebihi 1,6K piksel, masukan secara otomatis diubah skalanya ke target ini.
Menentukan tempat untuk meletakkan data gambar sumber, cuda
secara default, disarankan untuk menggunakan cpu
jika pelatihan pada kumpulan data besar/resolusi tinggi, akan mengurangi konsumsi VRAM, tetapi sedikit memperlambat pelatihan. Terima kasih kepada HrsPythonix.
Tambahkan tanda ini untuk menggunakan latar belakang putih, bukan hitam (default), misalnya, untuk evaluasi kumpulan data Sintetis NeRF.
Urutan harmonik bola yang akan digunakan (tidak lebih besar dari 3). 3
secara default.
Tandai untuk membuat pipeline menghitung maju dan mundur SH dengan PyTorch, bukan milik kita.
Tandai untuk membuat pipeline menghitung maju dan mundur kovarians 3D dengan PyTorch, bukan milik kita.
Mengaktifkan mode debug jika Anda mengalami kesalahan. Jika rasterizer gagal, file dump
akan dibuat sehingga Anda dapat meneruskannya kepada kami jika ada masalah sehingga kami dapat memeriksanya.
Proses debug lambat . Anda dapat menentukan iterasi (mulai dari 0) setelah proses debug di atas menjadi aktif.
Jumlah total iterasi yang akan dilatih, 30_000
secara default.
IP untuk memulai server GUI, 127.0.0.1
secara default.
Port yang digunakan untuk server GUI, 6009
secara default.
Iterasi yang dipisahkan spasi saat skrip pelatihan menghitung L1 dan PSNR pada set pengujian, 7000 30000
secara default.
Iterasi yang dipisahkan spasi di mana skrip pelatihan menyimpan model Gaussian, 7000 30000
secara default.
Iterasi yang dipisahkan spasi untuk menyimpan pos pemeriksaan untuk melanjutkan nanti, disimpan dalam direktori model.
Jalur ke pos pemeriksaan tersimpan untuk melanjutkan pelatihan.
Tandai untuk menghilangkan teks apa pun yang ditulis ke pipa keluar standar.
Harmonisa bola menampilkan kecepatan pembelajaran, 0.0025
secara default.
Kecepatan pembelajaran opasitas, 0.05
secara default.
Penskalaan kecepatan pembelajaran, 0.005
secara default.
Kecepatan pembelajaran rotasi, 0.001
secara default.
Jumlah langkah (dari 0) yang mengubah posisi kecepatan pemelajaran dari initial
hingga final
. 30_000
secara default.
Kecepatan pembelajaran posisi 3D awal, 0.00016
secara default.
Kecepatan pembelajaran posisi 3D akhir, 0.0000016
secara default.
Pengganda kecepatan pemelajaran posisi (lih. Plenoxels), 0.01
secara default.
Iterasi saat densifikasi dimulai, 500
secara default.
Iterasi saat densifikasi berhenti, 15_000
secara default.
Batas yang menentukan apakah titik harus dipadatkan berdasarkan gradien posisi 2D, secara default 0.0002
.
Seberapa sering melakukan pemadatan, 100
(setiap 100 iterasi) secara default.
Seberapa sering mengatur ulang opacity, 3_000
secara default.
Pengaruh SSIM terhadap total kerugian dari 0 hingga 1, 0.2
secara default.
Persentase luas pemandangan (0--1) yang harus dilampaui suatu titik agar dapat dipadatkan secara paksa, 0.01
secara default.
Perhatikan bahwa mirip dengan MipNeRF360, kami menargetkan gambar pada resolusi dalam kisaran 1-1,6K piksel. Untuk kenyamanan, input berukuran sembarang dapat diteruskan dan akan diubah ukurannya secara otomatis jika lebarnya melebihi 1600 piksel. Kami menyarankan untuk mempertahankan perilaku ini, tetapi Anda dapat memaksa pelatihan untuk menggunakan gambar beresolusi lebih tinggi dengan mengatur -r 1
.
Adegan MipNeRF360 dihosting oleh penulis makalah di sini. Anda dapat menemukan kumpulan data SfM kami untuk Tanks&Temples dan Deep Blending di sini. Jika Anda tidak menyediakan direktori model keluaran ( -m
), model terlatih akan ditulis ke folder dengan nama unik yang diacak di dalam direktori output
. Pada titik ini, model yang dilatih dapat dilihat dengan penampil waktu nyata (lihat lebih lanjut di bawah).
Secara default, model yang dilatih menggunakan semua gambar yang tersedia dalam kumpulan data. Untuk melatih mereka sambil menahan set pengujian untuk evaluasi, gunakan tanda --eval
. Dengan cara ini, Anda dapat merender set pelatihan/pengujian dan menghasilkan metrik kesalahan sebagai berikut:
python train.py -s--eval # Latih dengan kereta/uji splitpython render.py -m # Hasilkan renderingspython metrics.py -m # Hitung metrik kesalahan pada rendering
Jika Anda ingin mengevaluasi model terlatih kami, Anda harus mengunduh kumpulan data sumber yang sesuai dan menunjukkan lokasinya ke render.py
dengan tanda --source_path/-s
tambahan. Catatan: Model terlatih dibuat dengan basis kode rilis. Basis kode ini telah dibersihkan dan menyertakan perbaikan bug, sehingga metrik yang Anda peroleh dari evaluasinya akan berbeda dari yang ada di makalah.
python render.py -m-s python metrics.py -m
Jalur ke direktori model terlatih yang ingin Anda buatkan renderingnya.
Tandai untuk melewati rendering set pelatihan.
Tandai untuk melewati rendering set pengujian.
Tandai untuk menghilangkan teks apa pun yang ditulis ke pipa keluar standar.
Parameter di bawah ini akan dibaca secara otomatis dari jalur model, berdasarkan apa yang digunakan untuk pelatihan. Namun, Anda dapat menggantinya dengan menyediakannya secara eksplisit di baris perintah.
Jalur ke direktori sumber yang berisi kumpulan data COLMAP atau NeRF Sintetis.
Subdirektori alternatif untuk gambar COLMAP ( images
secara default).
Tambahkan tanda ini untuk menggunakan pemisahan pelatihan/pengujian gaya MipNeRF360 untuk evaluasi.
Mengubah resolusi gambar yang dimuat sebelum pelatihan. Jika disediakan 1, 2, 4
atau 8
, masing-masing menggunakan resolusi asli, 1/2, 1/4 atau 1/8. Untuk semua nilai lainnya, ubah skala lebar ke angka tertentu dengan tetap mempertahankan aspek gambar. 1
secara default.
Tambahkan tanda ini untuk menggunakan latar belakang putih, bukan hitam (default), misalnya, untuk evaluasi kumpulan data Sintetis NeRF.
Tandai untuk membuat pipeline dirender dengan SH yang dihitung dari PyTorch, bukan milik kami.
Tandai untuk membuat pipeline dirender dengan kovarians 3D yang dihitung dari PyTorch, bukan milik kami.
Daftar jalur model yang dipisahkan spasi yang metriknya harus dihitung.
Kami selanjutnya menyediakan skrip full_eval.py
. Skrip ini menentukan rutinitas yang digunakan dalam evaluasi kami dan menunjukkan penggunaan beberapa parameter tambahan, misalnya, --images (-i)
untuk menentukan direktori gambar alternatif dalam kumpulan data COLMAP. Jika Anda sudah mendownload dan mengekstrak semua data pelatihan, Anda dapat menjalankannya seperti ini:
python full_eval.py -m360-tat -db
Pada versi saat ini, proses ini memakan waktu sekitar 7 jam pada mesin referensi kami yang berisi A6000. Jika Anda ingin melakukan evaluasi penuh pada model terlatih kami, Anda dapat menentukan lokasi pengunduhannya dan melewati pelatihan.
python full_eval.py -o--skip_training -m360 -tat -db
Jika Anda ingin menghitung metrik pada gambar evaluasi makalah kami, Anda juga dapat melewati rendering. Dalam hal ini, tidak perlu menyediakan kumpulan data sumber. Anda dapat menghitung metrik untuk beberapa kumpulan gambar sekaligus.
python full_eval.py -m/garden ... --skip_training --skip_rendering
Kami menyediakan dua pemirsa interaktif untuk metode kami: jarak jauh dan waktu nyata. Solusi tampilan kami didasarkan pada kerangka SIBR, yang dikembangkan oleh grup GRAPHDECO untuk beberapa proyek sintesis tampilan baru.
GPU dan driver yang mendukung OpenGL 4.5 (atau perangkat lunak MESA terbaru)
Direkomendasikan VRAM 4 GB
GPU siap CUDA dengan Kemampuan Komputasi 7.0+ (hanya untuk Penampil Waktu Nyata)
Visual Studio atau g++, bukan Clang (kami menggunakan Visual Studio 2019 untuk Windows)
CUDA SDK 11, instal setelah Visual Studio (kami menggunakan 11.8)
CMake (versi terbaru, kami menggunakan 3.24)
7zip (hanya di Windows)
Kami menyediakan biner bawaan untuk Windows di sini. Kami merekomendasikan penggunaannya di Windows untuk pengaturan yang efisien, karena pembuatan SIBR melibatkan beberapa dependensi eksternal yang harus diunduh dan dikompilasi saat itu juga.
Jika Anda mengkloning dengan submodul (misalnya, menggunakan --recursive
), kode sumber untuk pemirsa ditemukan di SIBR_viewers
. Penampil jaringan berjalan dalam kerangka SIBR untuk aplikasi Rendering berbasis Gambar.
CMake harus menangani dependensi Anda.
cd SIBR_viewers cmake -Bbuild .cmake --build build --target install --config RelWithDebInfo
Anda dapat menentukan konfigurasi yang berbeda, misalnya Debug
jika Anda memerlukan kontrol lebih besar selama pengembangan.
Anda perlu menginstal beberapa dependensi sebelum menjalankan penyiapan proyek.
# Dependensisudo 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# Pengaturan proyekcd SIBR_viewers cmake -Bbuild . -DCMAKE_BUILD_TYPE=Lepaskan # tambahkan -G Ninja untuk membangun lebih cepatcmake --build build -j24 --target install
Kompatibilitas mundur dengan Focal Fossa belum sepenuhnya diuji, tetapi membangun SIBR dengan CMake tetap dapat berfungsi setelah pemanggilan
git checkout fossa_compatibility
Antarmuka SIBR menyediakan beberapa metode untuk menavigasi lokasi. Secara default, Anda akan memulai dengan navigator FPS, yang dapat Anda kontrol dengan W, A, S, D, Q, E
untuk terjemahan kamera dan I, K, J, L, U, O
untuk rotasi. Alternatifnya, Anda mungkin ingin menggunakan navigator bergaya Trackball (pilih dari menu mengambang). Anda juga dapat mengambil kamera dari kumpulan data dengan tombol Snap to
atau temukan kamera terdekat dengan Snap to closest
. Menu mengambang juga memungkinkan Anda mengubah kecepatan navigasi. Anda dapat menggunakan Scaling Modifier
untuk mengontrol ukuran Gaussians yang ditampilkan, atau menampilkan titik cloud awal.
Setelah mengekstraksi atau menginstal viewer, Anda dapat menjalankan aplikasi SIBR_remoteGaussian_app[_config]
yang telah dikompilasi di
, misalnya:
.//bin/SIBR_remoteGaussian_app
Penampil jaringan memungkinkan Anda terhubung ke proses pelatihan yang sedang berjalan di mesin yang sama atau berbeda. Jika Anda berlatih pada mesin dan OS yang sama, tidak ada parameter baris perintah yang diperlukan: pengoptimal mengkomunikasikan lokasi data pelatihan ke penampil jaringan. Secara default, pengoptimal dan penampil jaringan akan mencoba membuat koneksi di localhost pada port 6009 . Anda dapat mengubah perilaku ini dengan memberikan parameter --ip
dan --port
yang cocok untuk pengoptimal dan penampil jaringan. Jika karena alasan tertentu jalur yang digunakan oleh pengoptimal untuk menemukan data pelatihan tidak dapat dijangkau oleh penampil jaringan (misalnya, karena data tersebut berjalan pada mesin (virtual) yang berbeda), Anda dapat menentukan lokasi penggantian ke penampil dengan menggunakan -s
.
Argumen untuk mengganti jalur model ke kumpulan data sumber.
IP yang akan digunakan untuk koneksi ke skrip pelatihan yang sedang berjalan.
Port yang digunakan untuk koneksi ke skrip pelatihan yang sedang berjalan.
Membutuhkan dua angka yang dipisahkan spasi untuk menentukan resolusi terjadinya rendering jaringan, lebar 1200
secara default. Perhatikan bahwa untuk menerapkan aspek yang berbeda dari gambar masukan, Anda memerlukan --force-aspect-ratio
juga.
Tandai untuk memuat gambar kumpulan data sumber untuk ditampilkan di tampilan atas untuk setiap kamera.
Setelah mengekstrak atau menginstal viewer, Anda dapat menjalankan aplikasi SIBR_gaussianViewer_app[_config]
yang telah dikompilasi di
, misalnya:
.//bin/SIBR_gaussianViewer_app -m
Menyediakan parameter -m
saja sudah cukup untuk menunjuk ke direktori model terlatih. Alternatifnya, Anda dapat menentukan lokasi penggantian untuk data masukan pelatihan menggunakan -s
. Untuk menggunakan resolusi tertentu selain resolusi yang dipilih secara otomatis, tentukan --rendering-size
. Gabungkan dengan --force-aspect-ratio
jika Anda menginginkan resolusi yang tepat dan tidak keberatan dengan distorsi gambar.
Untuk membuka kunci kecepatan bingkai penuh, harap nonaktifkan V-Sync di mesin Anda dan juga di aplikasi (Menu → Tampilan). Dalam sistem multi-GPU (misalnya, laptop), OpenGL/Display GPU Anda harus sama dengan GPU CUDA Anda (misalnya, dengan mengatur preferensi GPU aplikasi di Windows, lihat di bawah) untuk performa maksimal. Selain titik awal cloud dan splats, Anda juga mempunyai opsi untuk memvisualisasikan Gaussian dengan merendernya sebagai ellipsoid dari menu mengambang. SIBR memiliki banyak fungsi lainnya, silakan lihat dokumentasi untuk detail lebih lanjut tentang penampil, opsi navigasi, dll. Ada juga Tampilan Atas (tersedia dari menu) yang menunjukkan penempatan kamera input dan point cloud SfM asli; harap dicatat bahwa Tampilan Atas memperlambat rendering saat diaktifkan. Penampil waktu nyata juga menggunakan pemusnahan yang sedikit lebih agresif dan cepat, yang dapat diubah di menu mengambang. Jika Anda pernah mengalami masalah yang dapat diselesaikan dengan menonaktifkan pemusnahan cepat, harap beri tahu kami.
Pemuat COLMAP kami mengharapkan struktur kumpulan data berikut di lokasi jalur sumber:
|---images | |--- | |--- | |---... |---sparse |---0 |---cameras.bin |---images.bin |---points3D.bin
Untuk rasterisasi, model kamera harus berupa kamera SIMPLE_PINHOLE atau PINHOLE. Kami menyediakan skrip konverter convert.py
, untuk mengekstrak gambar tidak terdistorsi dan informasi SfM dari gambar masukan. Secara opsional, Anda dapat menggunakan ImageMagick untuk mengubah ukuran gambar yang tidak terdistorsi. Penskalaan ulang ini mirip dengan MipNeRF360, yaitu membuat gambar dengan 1/2, 1/4 dan 1/8 resolusi asli di folder terkait. Untuk menggunakannya, pertama-tama instal COLMAP versi terbaru (idealnya didukung CUDA) dan ImageMagick. Letakkan gambar yang ingin Anda gunakan dalam direktori
.
|---input |--- |--- |---...
Jika Anda memiliki COLMAP dan ImageMagick di jalur sistem Anda, Anda cukup menjalankannya
python convert.py -s[--resize] #Jika tidak mengubah ukuran, ImageMagick tidak diperlukan
Alternatifnya, Anda dapat menggunakan parameter opsional --colmap_executable
dan --magick_executable
untuk menunjuk ke jalur masing-masing. Harap dicatat bahwa di Windows, file yang dapat dieksekusi harus mengarah ke file COLMAP .bat
yang menangani pengaturan lingkungan eksekusi. Setelah selesai,
akan berisi struktur kumpulan data COLMAP yang diharapkan dengan gambar masukan yang tidak terdistorsi dan diubah ukurannya, selain gambar asli Anda dan beberapa data sementara (terdistorsi) di direktori distorted
.
Jika Anda memiliki kumpulan data COLMAP sendiri tanpa distorsi (misalnya, menggunakan kamera OPENCV
), Anda dapat mencoba menjalankan bagian terakhir skrip: Masukkan gambar ke dalam input
dan info COLMAP dalam subdirektori distorted
:
|---input | |--- | |--- | |---... |---distorted |---database.db |---sparse |---0 |---...
Lalu lari
python convert.py -s--skip_matching [--resize] #Jika tidak mengubah ukuran, ImageMagick tidak diperlukan
Tandai untuk menghindari penggunaan GPU di COLMAP.
Tandai untuk menunjukkan bahwa info COLMAP tersedia untuk gambar.
Lokasi masukan.
Model kamera mana yang digunakan untuk langkah pencocokan awal, OPENCV
secara default.
Tandai untuk membuat versi gambar masukan yang diubah ukurannya.
Jalur ke COLMAP yang dapat dieksekusi ( .bat
di Windows).
Jalur ke ImageMagick yang dapat dieksekusi.
Kami mengintegrasikan pengganti drop-in dari Taming-3dgs 1 dengan ssim yang menyatu ke dalam basis kode asli untuk mempercepat waktu pelatihan. Setelah diinstal, rasterizer yang dipercepat mengirimkan a --optimizer_type default
dan a --optimizer_type sparse_adam
.
Untuk mendapatkan waktu pelatihan yang lebih cepat, Anda harus menginstal rasterizer yang dipercepat ke lingkungan Anda terlebih dahulu:
pip uninstall diff-gaussian-rasterization -ycd submodules/diff-gaussian-rasterization rm -r membangun git checkout 3dgs_accel pemasangan pip.
Kemudian Anda dapat menambahkan parameter berikut untuk menggunakan pengoptimal adam sparse saat menjalankan train.py
:
--optimizer_type sparse_adam
Perhatikan bahwa rasterizer khusus ini memiliki perilaku yang berbeda dari versi aslinya, untuk detail lebih lanjut tentang waktu pelatihan, silakan lihat statistik waktu pelatihan .
1. Mallick dan Goel, dkk. "Menjinakkan 3DGS: Bidang Cahaya Berkualitas Tinggi dengan Sumber Daya Terbatas". Makalah Konferensi SIGGRAPH Asia 2024, 2024, https://doi.org/10.1145/3680528.3687694, github
Untuk mendapatkan rekonstruksi pemandangan yang lebih baik, kami menggunakan peta kedalaman sebagai prioritas selama pengoptimalan dengan setiap gambar masukan. Ini bekerja paling baik pada bagian yang tidak bertekstur, misalnya jalan raya dan dapat menghilangkan floaters. Beberapa makalah telah menggunakan ide serupa untuk meningkatkan berbagai aspek 3DGS; (misalnya DepthRegularizedGS, SparseGS, DNGaussian). Regularisasi kedalaman yang kami integrasikan adalah yang digunakan dalam makalah 3DGS Hierarki kami, tetapi diterapkan pada 3DGS asli; untuk beberapa adegan (misalnya adegan DeepBlending) ini meningkatkan kualitas secara signifikan; bagi orang lain, hal ini hanya membuat perbedaan kecil atau bahkan lebih buruk. Misalnya hasil yang menunjukkan potensi manfaat dan statistik kualitas, silakan lihat di sini: Statistik untuk regularisasi kedalaman.
Saat melatih kumpulan data sintetis, peta kedalaman dapat dihasilkan dan tidak memerlukan pemrosesan lebih lanjut untuk digunakan dalam metode kami.
Untuk kumpulan data dunia nyata, peta kedalaman harus dibuat untuk setiap gambar masukan, untuk membuatnya, lakukan hal berikut:
Kedalaman Klon Apa Pun v2:
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
Unduh bobot dari Depth-Anything-V2-Large dan letakkan di bawah Depth-Anything-V2/checkpoints/
Hasilkan peta kedalaman:
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale --img-path--outdir
Hasilkan file depth_params.json
menggunakan:
python utils/make_depth_scale.py --base_dir--depths_dir
Parameter baru harus ditetapkan saat pelatihan jika Anda ingin menggunakan regularisasi kedalaman -d
.
Untuk mengkompensasi perubahan eksposur pada gambar masukan yang berbeda, kami mengoptimalkan transformasi affine untuk setiap gambar seperti dalam Hierarchical 3dgs.
Hal ini dapat sangat meningkatkan hasil rekonstruksi untuk pengambilan gambar "di alam liar", misalnya, dengan ponsel cerdas ketika pengaturan eksposur kamera tidak tetap. Misalnya hasil yang menunjukkan potensi manfaat dan statistik kualitas, silakan lihat di sini: Statistik kompensasi eksposur.
Tambahkan parameter berikut untuk mengaktifkannya:
--exposure_lr_init 0.001 --exposure_lr_final 0.0001 --exposure_lr_delay_steps 5000 --exposure_lr_delay_mult 0.001 --train_test_exp
Sekali lagi, makalah bagus lainnya telah menggunakan ide serupa misalnya NeRF-W, URF.
Kami menambahkan Filter EWA dari Mip Splatting di basis kode kami untuk menghapus aliasing. Ini dinonaktifkan secara default tetapi Anda dapat mengaktifkannya dengan menambahkan --antialiasing
saat melatih adegan menggunakan train.py
atau rendering menggunakan render.py
. Antialiasing dapat diaktifkan di penampil SIBR, ini dinonaktifkan secara default tetapi Anda harus mengaktifkannya saat melihat adegan yang dilatih menggunakan --antialiasing
. adegan ini dilatih menggunakan --antialiasing
.
Views > Top view
Top view
merender titik awan SfM dalam tampilan lain dengan kamera input yang sesuai dan kamera pengguna Point view
. Hal ini memungkinkan visualisasi seberapa jauh jarak pemirsa dari kamera masukan, misalnya.
Ini adalah tampilan 3D sehingga pengguna dapat menavigasinya seperti pada Point view
(mode tersedia: FPS, trackball, orbit).
Opsi tersedia untuk menyesuaikan tampilan ini, jerat dapat dinonaktifkan/diaktifkan dan skalanya dapat dimodifikasi.
Fungsionalitas tambahan yang berguna adalah berpindah ke posisi gambar masukan, dan secara bertahap memudar ke tampilan titik SfM di posisi tersebut (misalnya, untuk memverifikasi keselarasan kamera). Tampilan dari kamera input dapat ditampilkan di Top view
( perhatikan bahwa --images-path
harus diatur di baris perintah ). Seseorang dapat mengambil kamera Top view
ke kamera masukan terdekat dari kamera pengguna dalam Point view
dengan mengklik Top view settings > Cameras > Snap to closest
OpenXR didukung di cabang gaussian_code_release_openxr
Di dalam cabang tersebut, Anda dapat menemukan dokumentasi untuk dukungan VR di sini.
Di mana saya mendapatkan kumpulan data, misalnya yang direferensikan di full_eval.py
? Kumpulan data MipNeRF360 disediakan oleh penulis makalah asli di lokasi proyek. Perhatikan bahwa dua kumpulan data tidak dapat dibagikan secara terbuka dan mengharuskan Anda berkonsultasi langsung dengan penulisnya. Untuk Tanks&Temples dan Deep Blending, silakan gunakan link download yang disediakan di bagian atas halaman. Alternatifnya, Anda dapat mengakses data kloning (status: Agustus 2023!) dari HuggingFace
Bagaimana cara menggunakan ini untuk kumpulan data yang jauh lebih besar, seperti distrik kota? Metode saat ini tidak dirancang untuk ini, namun dengan memori yang cukup, metode ini akan berhasil. Namun, pendekatan ini dapat mengalami kesulitan dalam adegan detail multi-skala (close-up ekstrem, dicampur dengan bidikan jauh). Hal ini biasanya terjadi, misalnya, saat mengemudikan kumpulan data (mobil jarak dekat, gedung jauh). Untuk adegan seperti itu, Anda dapat menurunkan --position_lr_init
, --position_lr_final
dan --scaling_lr
(x0.3, x0.1, ...). Semakin luas pemandangannya, seharusnya semakin rendah nilainya. Di bawah ini, kami menggunakan kecepatan pembelajaran default (kiri) dan --position_lr_init 0.000016 --scaling_lr 0.001"
(kanan).
Saya menggunakan Windows dan saya tidak dapat membuat submodul, apa yang harus saya lakukan? Pertimbangkan untuk mengikuti langkah-langkah dalam video tutorial luar biasa di sini, semoga dapat membantu. Urutan langkah-langkah yang dilakukan itu penting! Alternatifnya, pertimbangkan untuk menggunakan template Colab yang tertaut.
Itu masih tidak berhasil. Ia mengatakan sesuatu tentang cl.exe
. Apa yang harus saya lakukan? Pengguna Henry Pearce menemukan solusinya. Anda dapat mencoba menambahkan jalur visual studio ke variabel lingkungan Anda (nomor versi Anda mungkin berbeda); C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64
Kemudian pastikan Anda memulai conda Prompt baru dan cd ke lokasi repo Anda dan coba ini;
conda activate gaussian_splatting cd/gaussian-splatting pip install submodulesdiff-gaussian-rasterization pip install submodulessimple-knn
Saya menggunakan macOS/Puppy Linux/Greenhat dan saya tidak dapat membangunnya, apa yang harus saya lakukan? Maaf, kami tidak dapat memberikan dukungan untuk platform di luar yang kami cantumkan di README ini. Pertimbangkan untuk menggunakan template Colab yang tertaut.
Saya tidak memiliki VRAM 24 GB untuk pelatihan, apa yang harus saya lakukan? Konsumsi VRAM ditentukan oleh jumlah titik yang dioptimalkan, yang meningkat seiring waktu. Jika Anda hanya ingin melatih hingga 7k iterasi, Anda memerlukan lebih sedikit. Untuk melakukan rutinitas latihan penuh dan menghindari kehabisan memori, Anda dapat meningkatkan --densify_grad_threshold
, --densification_interval
atau mengurangi nilai --densify_until_iter
. Namun perlu diingat bahwa hal ini akan mempengaruhi kualitas hasilnya. Coba juga atur --test_iterations
ke -1
untuk menghindari lonjakan memori selama pengujian. Jika --densify_grad_threshold
sangat tinggi, pemadatan tidak akan terjadi dan pelatihan akan selesai jika adegan itu sendiri berhasil dimuat.
VRAM 24 GB untuk referensi kualitas pelatihan masih banyak! Tidak bisakah kita melakukannya dengan lebih sedikit? Ya, kemungkinan besar. Oleh ca