Bernhard Kerbl*, Georgios Kopanas*, Thomas Leimkühler, George Drettakis (* weist auf gleiche Beteiligung hin)
| Webseite | Vollständiges Papier | Video | Weitere GRAPHDECO-Veröffentlichungen | FUNGRAPH-Projektseite |
| T&T+DB COLMAP (650 MB) | Vorab trainierte Modelle (14 GB) | Viewer für Windows (60 MB) | Auswertungsbilder (7 GB) |
Dieses Repository enthält die offizielle Implementierung des Autors im Zusammenhang mit dem Artikel „3D Gaussian Splatting for Real-Time Radiance Field Rendering“, der hier zu finden ist. Darüber hinaus stellen wir die Referenzbilder zur Verfügung, die zur Erstellung der im Artikel berichteten Fehlermetriken verwendet wurden, sowie kürzlich erstellte, vorab trainierte Modelle.
Zusammenfassung: Radiance-Field-Methoden haben kürzlich die neuartige Synthese von Szenen, die mit mehreren Fotos oder Videos aufgenommen wurden, revolutioniert. Um eine hohe visuelle Qualität zu erreichen, sind jedoch immer noch neuronale Netze erforderlich, deren Training und Darstellung kostspielig ist, während neuere schnellere Methoden zwangsläufig einen Kompromiss zwischen Geschwindigkeit und Qualität eingehen. Für unbegrenzte und vollständige Szenen (anstelle isolierter Objekte) und Rendering mit einer Auflösung von 1080p kann keine aktuelle Methode Echtzeit-Anzeigeraten erreichen. Wir stellen drei Schlüsselelemente vor, die es uns ermöglichen, eine visuelle Qualität auf dem neuesten Stand zu erreichen und gleichzeitig konkurrenzfähige Trainingszeiten beizubehalten und vor allem eine qualitativ hochwertige Echtzeit-Synthese (≥ 30 fps) für Romanansichten mit einer Auflösung von 1080p zu ermöglichen. Zunächst stellen wir die Szene ausgehend von spärlichen Punkten, die während der Kamerakalibrierung erzeugt werden, mit 3D-Gaußkurven dar, die die gewünschten Eigenschaften kontinuierlicher volumetrischer Strahlungsfelder zur Szenenoptimierung beibehalten und gleichzeitig unnötige Berechnungen im leeren Raum vermeiden. Zweitens führen wir eine verschachtelte Optimierung/Dichtesteuerung der 3D-Gauß-Funktionen durch, insbesondere die Optimierung der anisotropen Kovarianz, um eine genaue Darstellung der Szene zu erreichen; Drittens entwickeln wir einen schnellen sichtbarkeitsbewussten Rendering-Algorithmus, der anisotropes Splatting unterstützt und sowohl das Training beschleunigt als auch Echtzeit-Rendering ermöglicht. Wir demonstrieren modernste visuelle Qualität und Echtzeit-Rendering anhand mehrerer etablierter Datensätze.
@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/} }
Diese Forschung wurde durch den ERC Advanced Grant FUNGRAPH Nr. 788065 finanziert. Die Autoren danken Adobe für großzügige Spenden, die OPAL-Infrastruktur der Université Côte d'Azur und für die HPC-Ressourcen von GENCI-IDRIS (Grant 2022-AD011013409). Die Autoren danken den anonymen Gutachtern für ihr wertvolles Feedback, P. Hedman und A. Tewari für das Korrekturlesen früherer Entwürfe sowie T. Müller, A. Yu und S. Fridovich-Keil für ihre Hilfe bei den Vergleichen.
Wir verfügen nur über begrenzte Ressourcen für die Pflege und Aktualisierung des Codes. Allerdings haben wir seit der ursprünglichen Veröffentlichung einige neue Funktionen hinzugefügt, die von einigen der hervorragenden Arbeiten vieler anderer Forscher zu 3DGS inspiriert sind. Wir werden im Rahmen der Möglichkeiten unserer Ressourcen weitere Funktionen hinzufügen.
Update vom Oktober 2024 : Wir haben die Trainingsgeschwindigkeitsbeschleunigung integriert und sie mit Tiefenregulierung, Anti-Aliasing und Belichtungskompensation kompatibel gemacht. Wir haben den SIBR-Echtzeit-Viewer verbessert, indem wir Fehler behoben und Funktionen in der Draufsicht hinzugefügt haben, die die Visualisierung von Eingaben und Benutzerkameras ermöglichen.
Update vom Frühjahr 2024 : Orange Labs hat freundlicherweise OpenXR-Unterstützung für die VR-Anzeige hinzugefügt.
Jonathan Stephens hat eine fantastische Schritt-für-Schritt-Anleitung zum Einrichten von Gaussian Splatting auf Ihrem Computer erstellt, zusammen mit Anweisungen zum Erstellen verwendbarer Datensätze aus Videos. Wenn Ihnen die folgenden Anweisungen zu trocken sind, schauen Sie sich sie hier an.
Benutzer camenduru war so freundlich, eine Colab-Vorlage bereitzustellen, die die Quelle dieses Repos (Stand: August 2023!) verwendet, um einen schnellen und einfachen Zugriff auf die Methode zu ermöglichen. Bitte schauen Sie es sich hier an.
Das Repository enthält Submodule. Bitte überprüfen Sie es mit
# SSHgit-Klon [email protected]:graphdeco-inria/gaussian-splatting.git --recursive
oder
# HTTPSgit-Klon https://github.com/graphdeco-inria/gaussian-splatting --recursive
Die Codebasis besteht aus 4 Hauptkomponenten:
Ein PyTorch-basierter Optimierer zur Erstellung eines 3D-Gaußschen Modells aus SfM-Eingaben
Ein Netzwerk-Viewer, der es ermöglicht, eine Verbindung zum Optimierungsprozess herzustellen und ihn zu visualisieren
Ein OpenGL-basierter Echtzeit-Viewer zum Rendern trainierter Modelle in Echtzeit.
Ein Skript, das Ihnen hilft, Ihre eigenen Bilder in optimierungsbereite SfM-Datensätze umzuwandeln
Die Komponenten stellen unterschiedliche Anforderungen an Hardware und Software. Sie wurden unter Windows 10 und Ubuntu Linux 22.04 getestet. Anweisungen zum Einrichten und Ausführen der einzelnen Funktionen finden Sie in den folgenden Abschnitten.
Der Optimierer verwendet PyTorch- und CUDA-Erweiterungen in einer Python-Umgebung, um trainierte Modelle zu erstellen.
CUDA-fähige GPU mit Rechenfähigkeit 7.0+
24 GB VRAM (zum Trainieren auf Papierauswertungsqualität)
Weitere Informationen zu kleineren VRAM-Konfigurationen finden Sie in den FAQ
Conda (empfohlen für einfache Einrichtung)
C++-Compiler für PyTorch-Erweiterungen (wir haben Visual Studio 2019 für Windows verwendet)
CUDA SDK 11 für PyTorch-Erweiterungen, Installation nach Visual Studio (wir haben 11.8 verwendet, bekannte Probleme mit 11.6 )
C++-Compiler und CUDA SDK müssen kompatibel sein
Unsere standardmäßig bereitgestellte Installationsmethode basiert auf der Conda-Paket- und Umgebungsverwaltung:
SET DISTUTILS_USE_SDK=1 # Windows onlyconda env create --file ambient.yml Conda aktiviert gaussian_splatting
Bitte beachten Sie, dass bei diesem Vorgang davon ausgegangen wird, dass Sie CUDA SDK 11 und nicht 12 installiert haben. Zu den Änderungen siehe unten.
Tipp: Das Herunterladen von Paketen und das Erstellen einer neuen Umgebung mit Conda kann viel Speicherplatz beanspruchen. Standardmäßig verwendet Conda die Hauptfestplatte des Systems. Sie können dies vermeiden, indem Sie einen anderen Paket-Download-Speicherort und eine Umgebung auf einem anderen Laufwerk angeben:
conda config --add pkgs_dirs/ conda env create --file ambient.yml --prefix / /gaussian_splatting Conda aktiviert / /gaussian_splatting
Wenn Sie sich den Speicherplatz leisten können, empfehlen wir die Verwendung unserer Umgebungsdateien zum Einrichten einer Trainingsumgebung, die mit unserer identisch ist. Wenn Sie Änderungen vornehmen möchten, beachten Sie bitte, dass größere Versionsänderungen Auswirkungen auf die Ergebnisse unserer Methode haben können. Unsere (begrenzten) Experimente legen jedoch nahe, dass die Codebasis in einer aktuelleren Umgebung (Python 3.8, PyTorch 2.0.0, CUDA 12) einwandfrei funktioniert. Stellen Sie sicher, dass Sie eine Umgebung erstellen, in der PyTorch und seine CUDA-Laufzeitversion übereinstimmen und das installierte CUDA SDK keinen großen Versionsunterschied zur CUDA-Version von PyTorch aufweist.
Einige Benutzer haben Probleme beim Erstellen der Submodule unter Windows ( cl.exe: File not found
oder ähnlich). Bitte beachten Sie die Problemumgehung für dieses Problem in den FAQ.
Um den Optimierer auszuführen, verwenden Sie einfach
python train.py -s
Pfad zum Quellverzeichnis, das einen COLMAP- oder synthetischen NeRF-Datensatz enthält.
Pfad, in dem das trainierte Modell gespeichert werden soll (standardmäßig output/
).
Alternatives Unterverzeichnis für COLMAP-Bilder (standardmäßig images
).
Fügen Sie dieses Flag hinzu, um eine Trainings-/Testaufteilung im MipNeRF360-Stil für die Auswertung zu verwenden.
Gibt die Auflösung der geladenen Bilder vor dem Training an. Wenn 1, 2, 4
oder 8
angegeben ist, wird die Originalauflösung 1/2, 1/4 bzw. 1/8 verwendet. Bei allen anderen Werten wird die Breite unter Beibehaltung des Bildaspekts auf die angegebene Zahl neu skaliert. Wenn dies nicht festgelegt ist und die Breite des Eingabebilds 1,6 KB Pixel überschreitet, werden die Eingaben automatisch auf dieses Ziel neu skaliert.
Gibt an, wo die Quellbilddaten abgelegt werden sollen, standardmäßig cuda
. Die Verwendung cpu
wird empfohlen, wenn das Training auf einem großen/hochauflösenden Datensatz den VRAM-Verbrauch reduziert, das Training jedoch etwas verlangsamt. Danke an HrsPythonix.
Fügen Sie dieses Flag hinzu, um weißen Hintergrund anstelle von schwarzem (Standard) zu verwenden, z. B. für die Auswertung des synthetischen NeRF-Datensatzes.
Ordnung der zu verwendenden sphärischen Harmonischen (nicht größer als 3). 3
standardmäßig.
Flag, damit die Pipeline SHs mit PyTorch statt mit unserem vorwärts und rückwärts berechnen kann.
Flag, damit die Pipeline die 3D-Kovarianz mit PyTorch statt mit unserem vorwärts und rückwärts berechnen kann.
Aktiviert den Debug-Modus, wenn Fehler auftreten. Wenn der Rasterizer ausfällt, wird eine dump
Datei erstellt, die Sie bei einem Problem an uns weiterleiten können, damit wir einen Blick darauf werfen können.
Das Debuggen ist langsam . Sie können eine Iteration (beginnend bei 0) angeben, nach der das obige Debugging aktiv wird.
Anzahl der insgesamt zu trainierenden Iterationen, standardmäßig 30_000
.
IP zum Starten des GUI-Servers, standardmäßig 127.0.0.1
.
Für den GUI-Server zu verwendender Port, standardmäßig 6009
.
Durch Leerzeichen getrennte Iterationen, bei denen das Trainingsskript L1 und PSNR über den Testsatz berechnet, standardmäßig 7000 30000
.
Durch Leerzeichen getrennte Iterationen, bei denen das Trainingsskript das Gaußsche Modell speichert, standardmäßig 7000 30000
.
Durch Leerzeichen getrennte Iterationen, an denen ein Prüfpunkt für die spätere Fortsetzung gespeichert werden soll, gespeichert im Modellverzeichnis.
Pfad zu einem gespeicherten Kontrollpunkt, von dem aus das Training fortgesetzt werden kann.
Flag zum Weglassen von Text, der in die Standard-Out-Pipe geschrieben wird.
Die Lernrate der sphärischen Harmonischen beträgt standardmäßig 0.0025
.
Lernrate für die Deckkraft, standardmäßig 0.05
.
Skalierungslernrate, standardmäßig 0.005
.
Rotationslernrate, standardmäßig 0.001
.
Anzahl der Schritte (von 0), in denen die Lernrate der Position vom initial
bis zum final
reicht. Standardmäßig 30_000
.
Anfängliche Lernrate der 3D-Position, standardmäßig 0.00016
.
Endgültige Lernrate der 3D-Position, standardmäßig 0.0000016
.
Multiplikator für die Positionslernrate (vgl. Plenoxels), standardmäßig 0.01
.
Iteration, bei der die Verdichtung beginnt, standardmäßig 500
.
Iteration, bei der die Verdichtung stoppt, standardmäßig 15_000
.
Grenzwert, der entscheidet, ob Punkte basierend auf dem 2D-Positionsgradienten verdichtet werden sollen, standardmäßig 0.0002
.
Wie oft verdichtet werden soll, standardmäßig 100
(alle 100 Iterationen).
Wie oft die Deckkraft zurückgesetzt werden soll, standardmäßig 3_000
.
Einfluss von SSIM auf den Gesamtverlust von 0 bis 1, standardmäßig 0.2
.
Prozentsatz der Szenenausdehnung (0–1), den ein Punkt überschreiten muss, um zwangsweise verdichtet zu werden, standardmäßig 0.01
.
Beachten Sie, dass wir, ähnlich wie bei MipNeRF360, Bilder mit Auflösungen im Bereich von 1–1,6K Pixeln anstreben. Der Einfachheit halber können Eingaben beliebiger Größe übergeben werden. Die Größe wird automatisch angepasst, wenn ihre Breite 1600 Pixel überschreitet. Wir empfehlen, dieses Verhalten beizubehalten, aber Sie können das Training erzwingen, Ihre Bilder mit höherer Auflösung zu verwenden, indem Sie -r 1
festlegen.
Die MipNeRF360-Szenen werden hier von den Papierautoren gehostet. Unsere SfM-Datensätze für Tanks&Temples und Deep Blending finden Sie hier. Wenn Sie kein Ausgabemodellverzeichnis ( -m
) angeben, werden trainierte Modelle in Ordner mit zufälligen eindeutigen Namen innerhalb des output
geschrieben. Zu diesem Zeitpunkt können die trainierten Modelle mit dem Echtzeit-Viewer betrachtet werden (siehe weiter unten).
Standardmäßig verwenden die trainierten Modelle alle verfügbaren Bilder im Datensatz. Um sie zu trainieren, während ein Testsatz zur Auswertung zurückgehalten wird, verwenden Sie das Flag --eval
. Auf diese Weise können Sie Trainings-/Testsätze rendern und Fehlermetriken wie folgt erstellen:
python train.py -s--eval # Trainieren mit train/test splitpython render.py -m # Generieren Sie Renderingspython-Metriken.py -m # Berechnen Sie Fehlermetriken für Renderings
Wenn Sie unsere vorab trainierten Modelle auswerten möchten, müssen Sie die entsprechenden Quelldatensätze herunterladen und render.py
deren Speicherort mit einem zusätzlichen Flag --source_path/-s
angeben. Hinweis: Die vorab trainierten Modelle wurden mit der Release-Codebasis erstellt. Diese Codebasis wurde bereinigt und enthält Fehlerbehebungen, daher werden die Metriken, die Sie aus der Auswertung erhalten, von denen im Dokument abweichen.
python render.py -m-s python metrics.py -m
Pfad zum Verzeichnis des trainierten Modells, für das Sie Renderings erstellen möchten.
Flag zum Überspringen des Renderns des Trainingssatzes.
Flag zum Überspringen des Renderns des Testsatzes.
Flag zum Weglassen von Text, der in die Standard-Out-Pipe geschrieben wird.
Die folgenden Parameter werden automatisch aus dem Modellpfad gelesen, basierend auf dem, was für das Training verwendet wurde. Sie können sie jedoch überschreiben, indem Sie sie explizit in der Befehlszeile angeben.
Pfad zum Quellverzeichnis, das einen COLMAP- oder synthetischen NeRF-Datensatz enthält.
Alternatives Unterverzeichnis für COLMAP-Bilder (standardmäßig images
).
Fügen Sie dieses Flag hinzu, um eine Trainings-/Testaufteilung im MipNeRF360-Stil für die Auswertung zu verwenden.
Ändert die Auflösung der geladenen Bilder vor dem Training. Wenn 1, 2, 4
oder 8
angegeben ist, wird die Originalauflösung 1/2, 1/4 bzw. 1/8 verwendet. Bei allen anderen Werten wird die Breite unter Beibehaltung des Bildaspekts auf die angegebene Zahl neu skaliert. 1
standardmäßig.
Fügen Sie dieses Flag hinzu, um weißen Hintergrund anstelle von schwarzem (Standard) zu verwenden, z. B. für die Auswertung des synthetischen NeRF-Datensatzes.
Flag, um die Pipeline mit berechneten SHs von PyTorch statt mit unseren rendern zu lassen.
Flag, um die Pipeline mit der berechneten 3D-Kovarianz von PyTorch statt mit unserer rendern zu lassen.
Durch Leerzeichen getrennte Liste von Modellpfaden, für die Metriken berechnet werden sollen.
Wir stellen außerdem das Skript full_eval.py
zur Verfügung. Dieses Skript spezifiziert die in unserer Auswertung verwendete Routine und demonstriert die Verwendung einiger zusätzlicher Parameter, z. B. --images (-i)
um alternative Bildverzeichnisse innerhalb von COLMAP-Datensätzen zu definieren. Wenn Sie alle Trainingsdaten heruntergeladen und extrahiert haben, können Sie es wie folgt ausführen:
python full_eval.py -m360-tat -db
In der aktuellen Version dauert dieser Vorgang auf unserer Referenzmaschine mit einem A6000 etwa 7h. Wenn Sie die vollständige Evaluierung unserer vorab trainierten Modelle durchführen möchten, können Sie deren Download-Speicherort angeben und das Training überspringen.
python full_eval.py -o--skip_training -m360 -tat -db
Wenn Sie die Metriken auf den Bewertungsbildern unserer Arbeit berechnen möchten, können Sie das Rendern auch überspringen. In diesem Fall ist die Bereitstellung der Quelldatensätze nicht erforderlich. Sie können Metriken für mehrere Bildsätze gleichzeitig berechnen.
python full_eval.py -m/garden ... --skip_training --skip_rendering
Wir stellen für unsere Methode zwei interaktive Viewer zur Verfügung: Remote und Echtzeit. Unsere Anzeigelösungen basieren auf dem SIBR-Framework, das von der GRAPHDECO-Gruppe für mehrere Projekte zur Synthese neuartiger Ansichten entwickelt wurde.
OpenGL 4.5-fähige GPU und Treiber (oder neueste MESA-Software)
4 GB VRAM empfohlen
CUDA-fähige GPU mit Compute Capability 7.0+ (nur für Real-Time Viewer)
Visual Studio oder g++, nicht Clang (wir haben Visual Studio 2019 für Windows verwendet)
CUDA SDK 11, Installation nach Visual Studio (wir haben 11.8 verwendet)
CMake (aktuelle Version, wir haben 3.24 verwendet)
7zip (nur unter Windows)
Wir stellen hier vorgefertigte Binärdateien für Windows bereit. Für eine effiziente Einrichtung empfehlen wir die Verwendung unter Windows, da der Aufbau von SIBR mehrere externe Abhängigkeiten beinhaltet, die im laufenden Betrieb heruntergeladen und kompiliert werden müssen.
Wenn Sie mit Submodulen geklont haben (z. B. mit --recursive
), befindet sich der Quellcode für die Viewer in SIBR_viewers
. Der Netzwerk-Viewer läuft innerhalb des SIBR-Frameworks für bildbasierte Rendering-Anwendungen.
CMake sollte sich um Ihre Abhängigkeiten kümmern.
cd SIBR_viewers cmake -Bbuild .cmake --build build --target install --config RelWithDebInfo
Sie können eine andere Konfiguration angeben, z. B. Debug
wenn Sie während der Entwicklung mehr Kontrolle benötigen.
Sie müssen einige Abhängigkeiten installieren, bevor Sie das Projekt-Setup ausführen.
# Abhängigkeitensudo 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# Projekt setupcd SIBR_viewers cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release # add -G Ninja, um schneller zu bauencmake --build build -j24 --target install
Die Abwärtskompatibilität mit Focal Fossa wurde nicht vollständig getestet, aber die Erstellung von SIBR mit CMake sollte nach dem Aufruf weiterhin funktionieren
git checkout fossa_compatibility
Die SIBR-Schnittstelle bietet verschiedene Methoden zum Navigieren in der Szene. Standardmäßig wird Ihnen ein FPS-Navigator angezeigt, den Sie mit W, A, S, D, Q, E
für die Kameraverschiebung und I, K, J, L, U, O
für die Drehung steuern können. Alternativ können Sie auch einen Navigator im Trackball-Stil verwenden (Auswahl aus dem schwebenden Menü). Sie können auch eine Kamera aus dem Datensatz auswählen, indem Sie auf die Schaltfläche Snap to
oder die nächstgelegene Kamera mit Snap to closest
suchen. Über die schwebenden Menüs können Sie auch die Navigationsgeschwindigkeit ändern. Sie können den Scaling Modifier
verwenden, um die Größe der angezeigten Gaußkurven zu steuern oder die anfängliche Punktwolke anzuzeigen.
Nach dem Extrahieren oder Installieren der Viewer können Sie die kompilierte SIBR_remoteGaussian_app[_config]
-App in
ausführen, z. B.:
.//bin/SIBR_remoteGaussian_app
Mit dem Network Viewer können Sie eine Verbindung zu einem laufenden Trainingsprozess auf demselben oder einem anderen Computer herstellen. Wenn Sie auf demselben Computer und demselben Betriebssystem trainieren, sollten keine Befehlszeilenparameter erforderlich sein: Der Optimierer teilt dem Netzwerkbetrachter den Speicherort der Trainingsdaten mit. Standardmäßig versuchen Optimierer und Netzwerk-Viewer, eine Verbindung zu localhost auf Port 6009 herzustellen. Sie können dieses Verhalten ändern, indem Sie sowohl dem Optimierer als auch dem Netzwerk-Viewer passende Parameter --ip
und --port
bereitstellen. Wenn der vom Optimierer zum Auffinden der Trainingsdaten verwendete Pfad aus irgendeinem Grund für den Netzwerk-Viewer nicht erreichbar ist (z. B. weil sie auf verschiedenen (virtuellen) Maschinen ausgeführt werden), können Sie dem Viewer mithilfe von -s
einen außer Kraft gesetzten Speicherort angeben -s
.
Argument zum Überschreiben des Modellpfads zum Quelldatensatz.
IP, die für die Verbindung zu einem laufenden Trainingsskript verwendet werden soll.
Port, der für die Verbindung zu einem laufenden Trainingsskript verwendet werden soll.
Verwendet zwei durch Leerzeichen getrennte Zahlen, um die Auflösung zu definieren, mit der das Netzwerk-Rendering erfolgt, standardmäßig 1200
Breite. Beachten Sie, dass Sie zum Erzwingen eines Aspekts, der sich von den Eingabebildern unterscheidet, auch --force-aspect-ratio
benötigen.
Flag zum Laden von Quelldatensatzbildern, die in der Draufsicht für jede Kamera angezeigt werden sollen.
Nach dem Extrahieren oder Installieren der Viewer können Sie die kompilierte SIBR_gaussianViewer_app[_config]
-App in
ausführen, z. B.:
.//bin/SIBR_gaussianViewer_app -m
Es sollte ausreichen, den Parameter -m
anzugeben, der auf ein trainiertes Modellverzeichnis verweist. Alternativ können Sie mit -s
einen Überschreibungsort für Trainingseingabedaten angeben. Um eine andere als die automatisch ausgewählte Auflösung zu verwenden, geben Sie --rendering-size
an. Kombinieren Sie es mit --force-aspect-ratio
wenn Sie die exakte Auflösung wünschen und Bildverzerrungen nichts ausmachen.
Um die volle Bildrate freizuschalten, deaktivieren Sie bitte V-Sync auf Ihrem Gerät und auch in der Anwendung (Menü → Anzeige). In einem Multi-GPU-System (z. B. Laptop) sollte Ihre OpenGL/Display-GPU mit Ihrer CUDA-GPU identisch sein (z. B. durch Festlegen der GPU-Einstellungen der Anwendung unter Windows, siehe unten), um maximale Leistung zu erzielen. Zusätzlich zur anfänglichen Punktwolke und den Klecksen haben Sie auch die Möglichkeit, die Gauß-Funktionen zu visualisieren, indem Sie sie über das schwebende Menü als Ellipsoide rendern. SIBR verfügt über viele weitere Funktionen. Weitere Informationen zum Viewer, den Navigationsoptionen usw. finden Sie in der Dokumentation. Es gibt auch eine Draufsicht (im Menü verfügbar), die die Platzierung der Eingabekameras und der ursprünglichen SfM-Punktwolke zeigt; Bitte beachten Sie, dass die Draufsicht das Rendern verlangsamt, wenn sie aktiviert ist. Der Echtzeit-Viewer verwendet außerdem ein etwas aggressiveres, schnelles Culling, das im schwebenden Menü umgeschaltet werden kann. Sollten Sie jemals auf ein Problem stoßen, das durch Deaktivieren der Schnellauswahl gelöst werden kann, teilen Sie uns dies bitte mit.
Unsere COLMAP-Loader erwarten die folgende Datensatzstruktur im Quellpfadspeicherort:
|---images | |--- | |--- | |---... |---sparse |---0 |---cameras.bin |---images.bin |---points3D.bin
Für die Rasterung müssen die Kameramodelle entweder eine SIMPLE_PINHOLE- oder eine PINHOLE-Kamera sein. Wir stellen ein Konverterskript „ convert.py
zur Verfügung, um unverzerrte Bilder und SfM-Informationen aus Eingabebildern zu extrahieren. Optional können Sie ImageMagick verwenden, um die Größe der unverzerrten Bilder zu ändern. Diese Neuskalierung ähnelt MipNeRF360, dh es werden Bilder mit 1/2, 1/4 und 1/8 der Originalauflösung in entsprechenden Ordnern erstellt. Um sie zu verwenden, installieren Sie bitte zunächst eine aktuelle Version von COLMAP (idealerweise CUDA-basiert) und ImageMagick. Legen Sie die Bilder, die Sie verwenden möchten, in einem Verzeichnis
ab.
|---input |--- |--- |---...
Wenn Sie COLMAP und ImageMagick in Ihrem Systempfad haben, können Sie es einfach ausführen
python convert.py -s[--resize] #Wenn keine Größenänderung erfolgt, ist ImageMagick nicht erforderlich
Alternativ können Sie die optionalen Parameter --colmap_executable
und --magick_executable
verwenden, um auf die entsprechenden Pfade zu verweisen. Bitte beachten Sie, dass die ausführbare Datei unter Windows auf die COLMAP- .bat
Datei verweisen sollte, die für die Einstellung der Ausführungsumgebung zuständig ist. Sobald dies erledigt ist, enthält
zusätzlich zu Ihren Originalbildern und einigen temporären (verzerrten) Daten im Verzeichnis „ distorted
die erwartete COLMAP-Datensatzstruktur mit unverzerrten, in der Größe geänderten Eingabebildern.
Wenn Sie Ihren eigenen COLMAP-Datensatz ohne Unverzerrung haben (z. B. mit OPENCV
Kamera), können Sie versuchen, einfach den letzten Teil des Skripts auszuführen: Fügen Sie die Bilder in input
und die COLMAP-Informationen in ein distorted
Unterverzeichnis ein:
|---input | |--- | |--- | |---... |---distorted |---database.db |---sparse |---0 |---...
Dann lauf
python convert.py -s--skip_matching [--resize] #Wenn die Größe nicht geändert wird, ist ImageMagick nicht erforderlich
Flag, um die Verwendung der GPU in COLMAP zu vermeiden.
Flag, das angibt, dass COLMAP-Informationen für Bilder verfügbar sind.
Ort der Eingaben.
Welches Kameramodell für die frühen Matching-Schritte verwendet werden soll, standardmäßig OPENCV
.
Flag zum Erstellen verkleinerter Versionen von Eingabebildern.
Pfad zur ausführbaren COLMAP-Datei ( .bat
unter Windows).
Pfad zur ausführbaren ImageMagick-Datei.
Wir haben die Drop-In-Ersetzungen von Taming-3dgs 1 mit Fused Ssim in die ursprüngliche Codebasis integriert, um die Trainingszeiten zu verkürzen. Nach der Installation liefert der beschleunigte Rasterizer eine --optimizer_type default
und a --optimizer_type sparse_adam
.
Um schnellere Trainingszeiten zu erzielen, müssen Sie zunächst den beschleunigten Rasterizer in Ihrer Umgebung installieren:
pip uninstall diff-gaussian-rasterization -ycd submodules/diff-gaussian-rasterization rm -r bauen git checkout 3dgs_accel pip install .
Anschließend können Sie den folgenden Parameter hinzufügen, um den Sparse-Adam-Optimierer beim Ausführen train.py
zu verwenden:
--optimizer_type sparse_adam
Beachten Sie, dass sich dieser benutzerdefinierte Rasterizer anders verhält als die Originalversion. Weitere Informationen zu Trainingszeiten finden Sie in den Statistiken zu Trainingszeiten .
1. Mallick und Goel et al. „Zähmung von 3DGS: Hochwertige Strahlungsfelder mit begrenzten Ressourcen“. SIGGRAPH Asia 2024 Conference Papers, 2024, https://doi.org/10.1145/3680528.3687694, Github
Um Szenen besser rekonstruieren zu können, verwenden wir bei der Optimierung jedes Eingabebildes Tiefenkarten als Prioritäten. Es funktioniert am besten auf unstrukturierten Teilen, z. B. Straßen, und kann Floater entfernen. In mehreren Artikeln wurden ähnliche Ideen verwendet, um verschiedene Aspekte von 3DGS zu verbessern. (z. B. DepthRegularizedGS, SparseGS, DNGaussian). Die von uns integrierte Tiefenregulierung ist diejenige, die in unserem Hierarchical 3DGS-Artikel verwendet wurde, aber auf das ursprüngliche 3DGS angewendet wurde; Bei einigen Szenen (z. B. den DeepBlending-Szenen) wird die Qualität erheblich verbessert. Für andere macht es entweder einen kleinen Unterschied oder kann sogar noch schlimmer sein. Beispielergebnisse, die den potenziellen Nutzen zeigen, und Statistiken zur Qualität finden Sie hier: Statistiken zur Tiefenregulierung.
Beim Training mit einem synthetischen Datensatz können Tiefenkarten erstellt werden, die für die Verwendung in unserer Methode keine weitere Verarbeitung erfordern.
Für reale Datensätze sollten für jedes Eingabebild Tiefenkarten erstellt werden. Um diese zu generieren, gehen Sie bitte wie folgt vor:
Klonen Sie Depth Anything v2:
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
Laden Sie Gewichte von Depth-Anything-V2-Large herunter und platzieren Sie sie unter Depth-Anything-V2/checkpoints/
Tiefenkarten erstellen:
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale --img-path--outdir
Generieren Sie eine depth_params.json
-Datei mit:
python utils/make_depth_scale.py --base_dir--depths_dir
Beim Training sollte ein neuer Parameter festgelegt werden, wenn Sie die Tiefenregulierung -d
verwenden möchten.
Um Belichtungsänderungen in den verschiedenen Eingabebildern zu kompensieren, optimieren wir eine affine Transformation für jedes Bild, genau wie in Hierarchical 3dgs.
Dies kann die Rekonstruktionsergebnisse bei „in freier Wildbahn“-Aufnahmen erheblich verbessern, z. B. mit einem Smartphone, wenn die Belichtungseinstellung der Kamera nicht fest eingestellt ist. Beispielergebnisse, die den potenziellen Nutzen zeigen, und Statistiken zur Qualität finden Sie hier: Statistiken zur Belichtungskompensation.
Fügen Sie die folgenden Parameter hinzu, um es zu aktivieren:
--exposure_lr_init 0.001 --exposure_lr_final 0.0001 --exposure_lr_delay_steps 5000 --exposure_lr_delay_mult 0.001 --train_test_exp
Auch andere hervorragende Arbeiten haben ähnliche Ideen verwendet, z. B. NeRF-W, URF.
Wir haben den EWA-Filter von Mip Splatting in unsere Codebasis eingefügt, um Aliasing zu entfernen. Es ist standardmäßig deaktiviert, aber Sie können es aktivieren, indem Sie --antialiasing
hinzufügen, wenn Sie eine Szene mit train.py
trainieren oder mit render.py
rendern. Antialiasing kann im SIBR-Viewer umgeschaltet werden. Es ist standardmäßig deaktiviert, Sie sollten es jedoch aktivieren, wenn Sie eine Szene anzeigen, die mit --antialiasing
trainiert wurde. Diese Szene wurde mit --antialiasing
trainiert .
Views > Top view
Die Top view
rendert die SfM-Punktwolke in einer anderen Ansicht mit den entsprechenden Eingabekameras und der Benutzerkamera Point view
. Dadurch kann beispielsweise visualisiert werden, wie weit der Betrachter von den Eingangskameras entfernt ist.
Es handelt sich um eine 3D-Ansicht, sodass der Benutzer genau wie in der Point view
durch sie navigieren kann (verfügbare Modi: FPS, Trackball, Orbit).
Es stehen Optionen zum Anpassen dieser Ansicht zur Verfügung, Netze können deaktiviert/aktiviert und ihre Maßstäbe geändert werden.
Eine nützliche Zusatzfunktion besteht darin, sich zur Position eines Eingabebildes zu bewegen und an dieser Position schrittweise zur SfM-Punktansicht auszublenden (z. B. um die Kameraausrichtung zu überprüfen). Ansichten von Eingangskameras können in der Top view
angezeigt werden ( beachten Sie, dass --images-path
in der Befehlszeile festgelegt werden muss ). Sie können die Top view
an der Eingabekamera ausrichten, die der Benutzerkamera in der Point view
am nächsten liegt, indem Sie Top view settings > Cameras > Snap to closest
klicken
OpenXR wird im Zweig gaussian_code_release_openxr
unterstützt. Innerhalb dieses Zweigs finden Sie hier Dokumentation zur VR-Unterstützung.
Woher bekomme ich Datensätze, z. B. die, auf die in full_eval.py
verwiesen wird? Der MipNeRF360-Datensatz wird von den Autoren des Originalpapiers auf der Projektseite bereitgestellt. Beachten Sie, dass zwei der Datensätze nicht offen geteilt werden können und Sie die Autoren direkt konsultieren müssen. Für Tanks&Temples und Deep Blending nutzen Sie bitte die Download-Links oben auf der Seite. Alternativ können Sie über HuggingFace auf die geklonten Daten (Stand: August 2023!) zugreifen
Wie kann ich dies für einen viel größeren Datensatz verwenden, beispielsweise für einen Stadtbezirk? Die aktuelle Methode wurde nicht für diese Zwecke entwickelt, sollte aber bei genügend Speicher funktionieren. Allerdings kann dieser Ansatz bei mehrskaligen Detailszenen (extreme Nahaufnahmen, gemischt mit weit entfernten Aufnahmen) schwierig sein. Dies ist beispielsweise bei Fahrdatensätzen (Autos in der Nähe, Gebäude in weiter Entfernung) normalerweise der Fall. Für solche Szenen können Sie --position_lr_init
, --position_lr_final
und --scaling_lr
(x0.3, x0.1, ...) verringern. Je umfangreicher die Szene, desto niedriger sollten diese Werte sein. Im Folgenden verwenden wir Standard-Lernraten (links) und --position_lr_init 0.000016 --scaling_lr 0.001"
(rechts).
Ich verwende Windows und schaffe es nicht, die Submodule zu erstellen. Was kann ich tun? Befolgen Sie die Schritte im hervorragenden Video-Tutorial hier, hoffentlich helfen sie Ihnen weiter. Die Reihenfolge, in der die Schritte ausgeführt werden, ist wichtig! Alternativ können Sie auch die verlinkte Colab-Vorlage verwenden.
Es funktioniert immer noch nicht. Es sagt etwas über cl.exe
aus. Was mache ich? Benutzer Henry Pearce hat einen Workaround gefunden. Sie können versuchen, den Visual Studio-Pfad zu Ihren Umgebungsvariablen hinzuzufügen (Ihre Versionsnummer kann abweichen). C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64
Stellen Sie dann sicher, dass Sie eine neue Conda-Eingabeaufforderung starten und zu Ihrem Repo-Speicherort wechseln, und versuchen Sie Folgendes:
conda activate gaussian_splatting cd/gaussian-splatting pip install submodulesdiff-gaussian-rasterization pip install submodulessimple-knn
Ich verwende macOS/Puppy Linux/Greenhat und schaffe es nicht zu erstellen. Was kann ich tun? Leider können wir keinen Support für Plattformen bieten, die nicht in dieser README-Datei aufgeführt sind. Erwägen Sie die Verwendung der verknüpften Colab-Vorlage.
Ich habe nicht 24 GB VRAM für das Training, was kann ich tun? Der VRAM-Verbrauch wird durch die Anzahl der optimierten Punkte bestimmt, die mit der Zeit zunimmt. Wenn Sie nur auf 7.000 Iterationen trainieren möchten, benötigen Sie deutlich weniger. Um die gesamte Trainingsroutine durchzuführen und zu vermeiden, dass Ihnen der Speicher ausgeht, können Sie den Wert von --densify_grad_threshold
und --densification_interval
erhöhen oder den Wert von --densify_until_iter
verringern. Beachten Sie jedoch, dass dies Auswirkungen auf die Qualität des Ergebnisses hat. Versuchen Sie auch, --test_iterations
auf -1
zu setzen, um Speicherspitzen während des Tests zu vermeiden. Wenn --densify_grad_threshold
sehr hoch ist, sollte keine Verdichtung erfolgen und das Training sollte abgeschlossen sein, wenn die Szene selbst erfolgreich geladen wird.
24 GB VRAM für ein Training in Referenzqualität sind immer noch viel! Können wir es nicht mit weniger schaffen? Ja, höchstwahrscheinlich. Durch unsere ca