Il s'agit de la mise en œuvre officielle d'Instruct-nerf2nerf.

Instruct-nerf2nerf se construit sur Nerfstudio et a donc les mêmes exigences de dépendance. Pytorch et Tinycudann spécialement sont nécessaires.
Suivez les instructions de ce lien pour créer l'environnement et installer les dépendances. Suivez uniquement les commandes à Tinycudann. Une fois les dépendances installées, revenez ici.
Une fois que vous avez terminé l'installation de dépendances, vous pouvez installer instruct-nerf2nerf en utilisant la commande suivante:
pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerfFacultatif : si vous souhaitez travailler directement avec le code, clone, installez le dépôt:
git clone https://github.com/ayaanzhaque/instruct-nerf2nerf.git
cd instruct-nerf2nerf
pip install --upgrade pip setuptools
pip install -e . La commande suivante doit inclure in2n comme l'une des options:
ns-train -h
Pour modifier un nerf, vous devez d'abord former une scène nerfacto ordinaire en utilisant vos données. Pour traiter vos données personnalisées, veuillez vous référer à cette documentation.
Une fois que vous avez vos données personnalisées, vous pouvez former votre nerf initial avec la commande suivante:
ns-train nerfacto --data {PROCESSED_DATA_DIR}Pour plus de détails sur la formation d'un nerf, voir la documentation Nerfstudio.
Une fois que vous avez entièrement formé votre scène, les points de contrôle seront enregistrés dans le répertoire outputs . Copiez le chemin dans le dossier nerfstudio_models .
Pour commencer la formation pour l'édition du nerf, exécutez la commande suivante:
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 Le {PROCESSED_DATA_DIR} doit être le même chemin utilisé pour la formation du nerf d'origine. À l'aide des commandes CLI, vous pouvez choisir l'invite et les échelles de guidage utilisées pour instructPix2Pix.
Une fois le nerf formé, vous pouvez rendre le NERF à l'aide du flux de travail NerfStudio standard, trouvé ici.
Important Veuillez noter que la formation du NERF sur les images avec une résolution supérieure à 512 entraînera probablement InstructPix2Pix à lancer des erreurs OOM. De plus, il semble que InstructPix2Pix fonctionne beaucoup plus mal sur les images à une résolution plus élevée. Nous suggérons une formation avec une résolution vers 512 (dimension maximale), alors ajoutez la balise suivante à la fin de votre commande de formation nerfacto et in2n : nerfstudio-data --downscale-factor {2,4,6,8} à la fin de vos commandes ns-train . Alternativement, vous pouvez réduire votre ensemble de données vous-même et mettre à jour votre fichier transforms.json (échelle W, H, FL_X, FL_Y, CX, CY), ou vous pouvez utiliser une échelle d'image plus petite fournie par Nerfstudio.
Nous vous recommandons de capturer des données à l'aide d'images de Polycam, car des ensembles de données plus petits fonctionnent mieux et plus rapidement avec notre méthode.
Si vous avez plusieurs GPU, la formation peut être accélérée en plaçant InstructPix2Pix sur un GPU séparé. Pour ce faire, ajoutez --pipeline.ip2p-device cuda:{device-number} à votre commande de formation.
Notre méthode utilise des rayons ~ 16K et des LPIP, mais tous les GPU n'ont pas suffisamment de mémoire pour exécuter cette configuration. En conséquence, nous avons fourni deux configurations alternatives qui utilisent moins de mémoire, mais sachez que ces configurations entraînent une diminution des performances. Les différences sont la précision utilisée pour Intrutpix2Pix et si LPIPS est utilisé (ce qui nécessite 4x plus de rayons). Les détails de chaque configuration sont fournis dans le tableau ci-dessous.
| Méthode | Description | Mémoire | Qualité |
|---|---|---|---|
in2n | Modèle complet, utilisé dans le papier | ~ 15 Go | Meilleur |
in2n-small | Modèle de demi-précision | ~ 12 Go | Bien |
in2n-tiny | Demi-précision sans LPIP | ~ 10 Go | D'accord |
Actuellement, nous définissons le nombre maximum d'itérations pour la formation in2n à 15k itératios. Le plus souvent, l'édition aura l'air bien après ~ 10k itérations. Si vous souhaitez vous entraîner plus longtemps, rechargez simplement votre dernier point de contrôle in2n et continuez à s'entraîner ou à changer --max-num-iterations 30000 .
Si votre édition ne fonctionne pas comme vous le souhaitez, c'est probablement parce que InstructPix2Pix se débat avec vos images et votre invite. Nous vous recommandons de prendre l'une de vos opinions de formation et d'essayer de la modifier en 2D d'abord avec InstructPix2Pix, ce qui peut être fait dans cet espace HuggingFace. Plus de conseils pour obtenir une bonne modification peuvent être trouvés ici.
Nous avons construit une extension d'Instruct-nerf2nerf pour des éclaboussures gaussiennes appelées instruct-gs2gs. Leur référentiel peut être utilisé comme exemple de la façon de créer de futurs projets en fonction de l'instruct-nerf2nerf.
Veuillez ouvrir les problèmes de GitHub pour tous les problèmes d'installation / d'utilisation que vous rencontrez. Nous avons essayé de soutenir une gamme de GPU aussi large que possible, mais il peut être nécessaire de fournir des versions encore plus à empreinte à faible pied. Veuillez contribuer à toute modification pour améliorer l'utilisation de la mémoire!
Pour créer Instruct-Serf2nerf, nous fournissons des explications des composants de code de base.
in2n_datamanager.py : Ce fichier est presque identique à la base_datamanager.py dans nerfStudio. La principale différence est que l'ensemble du tenseur de l'ensemble de données est pré-rémunéré dans la méthode setup_train plutôt que d'être échantillonné dans la méthode next_train à chaque fois.
in2n_pipeline.py : Ce fichier construit sur le module de pipeline dans NerfStudio. La méthode get_train_loss_dict échantillonne les images et place les images éditées dans l'ensemble de données.
ip2p.py : Ce fichier abrite le modèle InstructPix2Pix (en utilisant l'implémentation diffusers ). La méthode edit_image est où une image est débrouillante à l'aide du modèle de diffusion, et une variété de méthodes d'assistance sont également contenues dans ce fichier.
in2n.py : nous écrasons la méthode get_loss_dict pour utiliser la perte LPIPS et L1Loss.
Vous pouvez trouver notre article sur Arxiv.
Si vous trouvez ce code ou trouvez le document utile pour vos recherches, veuillez envisager de citer:
@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},
}