Dies ist die offizielle Implementierung von Unterrichtsnf2nerf.

Die Anweisung-nerf2nerf ist auf Nerfstudio aufgebaut und weist daher die gleichen Abhängigkeiten auf. Spezifisch Pytorch und Tinycudann sind erforderlich.
Befolgen Sie die Anweisungen auf diesem Link, um die Umgebung zu erstellen und Abhängigkeiten zu installieren. Folgen Sie nur den Befehlen bis zu Tinycudann. Nachdem die Abhängigkeiten installiert wurden, kehren Sie hierher zurück.
Sobald Sie die Installation von Abhängigkeiten fertiggestellt haben, können Sie unter Verwendung des folgenden Befehls das Installieren von Anweising-nerf2nerf installieren:
pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerfOptional : Wenn Sie direkt mit dem Code arbeiten möchten, klonen Sie dann das Repo:
git clone https://github.com/ayaanzhaque/instruct-nerf2nerf.git
cd instruct-nerf2nerf
pip install --upgrade pip setuptools
pip install -e . Der folgende Befehl sollte in2n als eine der Optionen enthalten:
ns-train -h
Um einen Nerf zu bearbeiten, müssen Sie zuerst eine reguläre nerfacto -Szene mit Ihren Daten trainieren. Um Ihre benutzerdefinierten Daten zu verarbeiten, finden Sie in dieser Dokumentation.
Sobald Sie Ihre benutzerdefinierten Daten haben, können Sie Ihren ersten NERF mit dem folgenden Befehl trainieren:
ns-train nerfacto --data {PROCESSED_DATA_DIR}Weitere Informationen zum Training eines NERF finden Sie in NerfStudio -Dokumentation.
Sobald Sie Ihre Szene voll ausgebildet haben, werden die Kontrollpunkte im Verzeichnis outputs gespeichert. Kopieren Sie den Pfad in den Ordner nerfstudio_models .
Führen Sie den folgenden Befehl aus, um mit dem Training für die Bearbeitung des NERF zu beginnen:
ns-train in2n --data {PROCESSED_DATA_DIR} --load-dir {outputs/.../nerfstudio_models} --pipeline.prompt { " prompt " } --pipeline.guidance-scale 7.5 --pipeline.image-guidance-scale 1.5 Der {PROCESSED_DATA_DIR} muss der gleiche Weg sein wie bei der Ausbildung des ursprünglichen Nerf. Mit den CLI -Befehlen können Sie die Eingabeaufforderung und die Leitlinien auswählen, die für InstructPix2Pix verwendet werden.
Nach dem Training des Nerf können Sie den Nerf mit dem hier gefundenen Standard -NerfStudio -Workflow, der hier zu finden ist, rendern.
Wichtig bitte beachten Sie, dass das Training des NERF auf Bildern mit Auflösung von mehr als 512 wahrscheinlich dazu führt, dass Anweisungenpix2Pix OOM -Fehler werfen. Darüber hinaus scheint es, dass InstructPix2Pix bei Bildern bei höherer Auflösung deutlich schlechter ist. Wir empfehlen das Training mit einer Auflösung, die etwa 512 (maximale Dimension) liegt. Fügen Sie also das folgende Tag zum Ende Ihres nerfacto und in2n -Trainingsbefehls hinzu: nerfstudio-data --downscale-factor {2,4,6,8} bis zum Ende Ihrer ns-train Befehle. Alternativ können Sie Ihren Datensatz selbst beeinträchtigen und Ihre transforms.json -Datei (skalieren Sie W, H, FL_X, FL_Y, CX, CY) oder eine kleinere Bildskala, die von Nerfstudio bereitgestellt wird, aktualisieren.
Wir empfehlen, Daten mithilfe von Bildern von Polycam zu erfassen, da kleinere Datensätze mit unserer Methode besser und schneller funktionieren.
Wenn Sie mehrere GPUs haben, kann das Training durch Platzierung von InstructPix2Pix auf einer separaten GPU beschleunigt werden. Dazu add --pipeline.ip2p-device cuda:{device-number} zu Ihrem Trainingsbefehl.
Unsere Methode verwendet ~ 16K -Strahlen und LPIPs, aber nicht alle GPUs verfügen über genügend Speicher, um diese Konfiguration auszuführen. Infolgedessen haben wir zwei alternative Konfigurationen bereitgestellt, die weniger Speicher verwenden, sind sich jedoch bewusst, dass diese Konfigurationen zu einer verringerten Leistung führen. Die Unterschiede sind die Genauigkeit, die für IntructPix2Pix verwendet wird und ob LPIPs verwendet werden (was 4x mehr Strahlen benötigt). Die Details jeder Konfiguration finden Sie in der folgenden Tabelle.
| Verfahren | Beschreibung | Erinnerung | Qualität |
|---|---|---|---|
in2n | Volles Modell, das in Papier verwendet wird | ~ 15 GB | Am besten |
in2n-small | Halbpräzisionsmodell | ~ 12 GB | Gut |
in2n-tiny | Halbe Präzision ohne LPIPs | ~ 10 GB | OK |
Derzeit setzen wir die maximale Anzahl von Iterationen für in2n -Training auf 15.000 Iteratios. Meistens sieht die Bearbeitung nach ~ 10.000 Iterationen gut aus. Wenn Sie länger trainieren möchten, laden Sie einfach Ihren letzten in2n Kontrollpunkt neu und setzen Sie weiter aus oder wechseln Sie --max-num-iterations 30000 .
Wenn Ihre Bearbeitung nicht so funktioniert, wie Sie möchten, liegt dies wahrscheinlich daran, dass InstructPix2Pix mit Ihren Bildern und Eingabeaufforderung zu kämpfen hat. Wir empfehlen, eine Ihrer Trainingsansichten zu nutzen und zu versuchen, sie zuerst mit InstructPix2Pix in 2D zu bearbeiten, was an diesem Umarmungsfeld -Bereich durchgeführt werden kann. Weitere Tipps zum Erhalten einer guten Bearbeitung finden Sie hier.
Wir haben eine Erweiterung von Unterrichts-nunf2nerf für Gaußsche Splatting genannt, die als Instruct-GS2GS bezeichnet werden. Ihr Repository kann als Beispiel dafür verwendet werden, wie zukünftige Projekte auf der Grundlage von Unterrichts-nunf2nerf erstellt werden.
Bitte öffnen Sie GitHub -Probleme für alle Installations-/Nutzungsprobleme, auf die Sie begegnen. Wir haben versucht, eine so breite Palette von GPUs wie möglich zu unterstützen, aber es ist möglicherweise notwendig, noch mehr Versionen mit niedrigem Fußabdruck bereitzustellen. Bitte tragen Sie bei Änderungen bei, um die Speicherverwendung zu verbessern!
Um das Erstellen von Unterrichts-nunf2nerf aufzubauen, geben wir Erklärungen der Kerncodekomponenten an.
in2n_datamanager.py : Diese Datei ist fast identisch mit der base_datamanager.py in Nerfstudio. Der Hauptunterschied besteht darin, dass der gesamte Datensatzzensor in der Methode setup_train vorbereitet wird, anstatt jedes Mal in der nächsten Methode der next_train abgetastet zu werden.
in2n_pipeline.py : Diese Datei erstellt im Pipeline -Modul in Nerfstudio. Die Methode get_train_loss_dict probiert Bilder und platziert bearbeitete Bilder zurück in den Datensatz.
ip2p.py : Diese Datei beherbergt das Modell für das InstructPix2Pix (unter Verwendung der Implementierung diffusers ). In der edit_image -Methode wird ein Bild unter Verwendung des Diffusionsmodells beenkt, und in dieser Datei sind auch eine Vielzahl von Helfermethoden enthalten.
in2n.py : Wir überschreiben die Methode get_loss_dict , um LPIPS -Verlust und L1Loss zu verwenden.
Sie finden unser Papier auf Arxiv.
Wenn Sie diesen Code finden oder das Papier für Ihre Recherche nützlich finden, sollten Sie sich angeben:
@inproceedings{instructnerf2023,
author = {Haque, Ayaan and Tancik, Matthew and Efros, Alexei and Holynski, Aleksander and Kanazawa, Angjoo},
title = {Instruct-NeRF2NeRF: Editing 3D Scenes with Instructions},
booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision},
year = {2023},
}