Dale Decatur, Itai Lang, Kfir Aberman, Rana Hanocka



Dans ce travail, nous développons un pinceau 3D, une technique pour la texture automatique des régions sémantiques locales sur les maillages via des descriptions de texte. Notre méthode est conçue pour fonctionner directement sur des maillages, produisant des cartes de texture qui s'intègrent parfaitement dans des pipelines graphiques standard. Nous choisissons de produire simultanément une carte de localisation (pour spécifier la région d'édition) et une carte de texture qui lui est conforme. Cette approche synergique améliore la qualité de la localisation et de la stylisation. Pour améliorer les détails et la résolution de la zone texturée, nous tirons parti de plusieurs étapes d'un modèle de diffusion en cascade pour superviser notre technique d'édition locale avec des priors génératifs tirés des images à différentes résolutions. Notre technique, appelée distillation en cascade de score (CSD), distille simultanément les scores à plusieurs résolutions de manière en cascade, permettant un contrôle à la fois sur la granularité et la compréhension globale de la supervision. Nous démontrons l'efficacité du pinceau 3D pour texturer localement une variété de formes dans différentes régions sémantiques.
Pour voir une démo de la perte de distillation en cascade (CSD), consultez ce cahier en appliquant CSD à la génération d'images et à l'édition d'images. CSD nous permet de superviser notre optimisation avec plusieurs étapes en cascade du modèle de diffusion au lieu de l'étape de base utilisée dans SDS standard. Nous distillons les scores à travers plusieurs étapes d'un modèle de diffusion en cascade simultanément afin de tirer parti à la fois la conscience globale de la première étape et le niveau de détail supérieur contenu dans les stades ultérieurs.

Si vous avez moins de 48 Go de mémoire GPU, vous pouvez toujours exécuter le code, consultez la section sur l'optimisation de la mémoire pour plus de détails.
Créez d'abord l'environnement conda:
conda create -n "3d-paintbrush" python=3.10
et activez-le avec:
conda activate 3d-paintbrush
Installez ensuite les packages requis en exécutant le script d'installation. Assurez-vous d'exécuter ce script avec l'accès à un GPU .
bash ./install_environment.sh
Instructions de Deepfloyd si:
huggingface_hub pip install huggingface_hub --upgrade
Exécutez la fonction de connexion dans un shell python
from huggingface_hub import login
login()
Et entrez votre jeton d'accès HUB HUB HUBGING.
Pour utiliser nos modèles pré-formés, téléchargez à la fois les dossiers trained_models et inverse_map_cache à partir d'ici et ajoutez-les dans le dossier de données pour créer la structure du répertoire suivant:
├── data
│ ├── inverse_map_cache
│ ├── trained_models
│ ├── hand.obj
...
│ ├── spot.obj
Pour exécuter les modèles pré-formés, utilisez les commandes ci-dessous. Les résultats seront enregistrés sur results/[name-of-mesh]/[name-of-edit]/renders/infernce.png .
Place:
python src/main.py --config_path demo/spot/gold_chain_necklace.yaml --log.inference true --log.model_path ./data/trained_models/spot/gold_chain_necklace.pth
python src/main.py --config_path demo/spot/heart-shaped_sunglasses.yaml --log.inference true --log.model_path ./data/trained_models/spot/heart-shaped_sunglasses.pth
python src/main.py --config_path demo/spot/colorful_crochet_hat.yaml --log.inference true --log.model_path ./data/trained_models/spot/colorful_crochet_hat.pth






Personne:
python src/main.py --config_path demo/person/tie-dye_apron.yaml --log.inference true --log.model_path ./data/trained_models/person/tie-dye_apron.pth
python src/main.py --config_path demo/person/colorful_polo_shirt.yaml --log.inference true --log.model_path ./data/trained_models/person/colorful_polo_shirt.pth
python src/main.py --config_path demo/person/superman_chest_emblem.yaml --log.inference true --log.model_path ./data/trained_models/person/superman_chest_emblem.pth






LEGO Minfigure:
python src/main.py --config_path demo/lego_minifig/barcelona_jersey.yaml --log.inference true --log.model_path ./data/trained_models/lego_minifig/barcelona_jersey.pth
python src/main.py --config_path demo/lego_minifig/blue_denim_overalls.yaml --log.inference true --log.model_path ./data/trained_models/lego_minifig/blue_denim_overalls.pth
python src/main.py --config_path demo/lego_minifig/red_bow_tie.yaml --log.inference true --log.model_path ./data/trained_models/lego_minifig/red_bow_tie.pth






Main:
python src/main.py --config_path demo/hand/fancy_gold_watch.yaml --log.inference true --log.model_path ./data/trained_models/hand/fancy_gold_watch.pth


Pour reproduire les résultats du papier à partir de zéro, il suffit de passer un fichier de configuration de démonstration prédéfini. Les résultats seront enregistrés sur results/[name-of-mesh]/[name-of-edit] .
Place:
python src/main.py --config_path demo/spot/gold_chain_necklace.yaml
python src/main.py --config_path demo/spot/heart-shaped_sunglasses.yaml
python src/main.py --config_path demo/spot/colorful_crochet_hat.yaml
Personne:
python src/main.py --config_path demo/person/tie-dye_apron.yaml
python src/main.py --config_path demo/person/colorful_polo.yaml
python src/main.py --config_path demo/person/superman_chest_emblem.yaml
Minifigure LEGO:
python src/main.py --config_path demo/lego_minifig/barcelona_jersey.yaml
python src/main.py --config_path demo/lego_minifig/blue_denim_overalls.yaml
python src/main.py --config_path demo/lego_minifig/red_bow_tie.yaml
Main:
python src/main.py --config_path demo/hand/fancy_gold_watch.yaml
Pour exécuter vos propres exemples, vous pouvez créer vos propres fichiers de configuration et les transmettre comme fait dans la section précédente. De plus, vous pouvez plutôt transmettre des valeurs pour l'un des champs de src/configs/train_config comme arguments de ligne de commande. Par exemple, pour exécuter l'exemple de la main sans passer un fichier de configuration, vous pouvez appeler:
python src/main.py --log.exp_dir results/hand/fancy_gold_watch --mesh.path ./data/spot.obj --guidance.object_name "hand" --guidance.style "fancy gold" --guidance.edit "watch"
Si vous n'avez pas accès à un GPU de 48 Go, vous pouvez ...
cpu_offload sur True dans src/configs/guidance_config.py . Cela réduira considérablement l'utilisation de la mémoire, mais se fait au prix de la vitesse.batch_size avec l'argument de la ligne de commande --optim.batch_size ou dans un fichier de configuration personnalisé. Bien que cela réduit l'utilisation de la mémoire, cela peut affecter la précision.sample_points sur True et ajustez mlp_batch_size ). Bien que cela réduit l'utilisation de la mémoire, cela peut affecter la précision.batched_sd sur False ). Cela réduira l'utilisation de la mémoire, mais se fait au prix de la vitesse. Notre base de code est basée sur la latente-nerf / la latent-peinture et notre code de guidage CSD est structuré dans le format des modules de guidage de Threestudio. Nous remercions ces auteurs pour leur travail incroyable.
Si vous trouvez ce code utile pour vos recherches, veuillez citer notre pinceau en papier 3D: stylisation locale de formes 3D avec distillation en cascade de score.
@article{decatur2023paintbrush,
author = {Decatur, Dale and Lang, Itai and Aberman, Kfir and Hanocka, Rana},
title = {3D Paintbrush: Local Stylization of 3D Shapes with Cascaded Score Distillation},
journal = {arXiv},
year = {2023}
}