Dale Decatur, Itai Lang, Kfir Aberman, Rana Hanocka



En este trabajo, desarrollamos 3D PaintBrush, una técnica para texturizar automáticamente las regiones semánticas locales en mallas a través de descripciones de texto. Nuestro método está diseñado para funcionar directamente en mallas, produciendo mapas de textura que se integran perfectamente en las tuberías gráficas estándar. Optamos por producir simultáneamente un mapa de localización (para especificar la región de edición) y un mapa de textura que se ajusta a él. Este enfoque sinérgico mejora la calidad de la localización y la estilización. Para mejorar los detalles y la resolución del área texturizada, aprovechamos múltiples etapas de un modelo de difusión en cascada para supervisar nuestra técnica de edición local con antecedentes generativos aprendidos de imágenes a diferentes resoluciones. Nuestra técnica, denominada destilación de puntaje en cascada (CSD), destila simultáneamente puntajes a múltiples resoluciones de manera en cascada, lo que permite el control sobre la granularidad y la comprensión global de la supervisión. Demostramos la efectividad del pincel 3D para texturas localmente una variedad de formas dentro de diferentes regiones semánticas.
Para ver una demostración de la pérdida de destilación de puntaje en cascada (CSD), consulte este cuaderno que aplica CSD a la generación de imágenes y la edición de imágenes. CSD nos permite supervisar nuestra optimización con múltiples etapas en cascada del modelo de difusión en lugar de solo la etapa base utilizada en SDS estándar. Destilamos puntajes en múltiples etapas de un modelo de difusión en cascada simultáneamente para aprovechar tanto la conciencia global de la primera etapa como el mayor nivel de detalle contenido en etapas posteriores.

Si tiene menos de 48 GB de memoria GPU, aún puede ejecutar el código, consulte la sección sobre Optimización de la memoria para obtener más detalles.
Primero cree el entorno de condena:
conda create -n "3d-paintbrush" python=3.10
y activarlo con:
conda activate 3d-paintbrush
Luego instale los paquetes requeridos ejecutando el script de instalación. Asegúrese de ejecutar este script con acceso a una GPU .
bash ./install_environment.sh
Instrucciones de Deepfloyd si:
huggingface_hub pip install huggingface_hub --upgrade
Ejecute la función de inicio de sesión en un shell de Python
from huggingface_hub import login
login()
e ingrese el token de acceso de su centro de abrazadera.
Para usar nuestros modelos previamente capacitados, descargue las carpetas trained_models e inverse_map_cache desde aquí y agréguelos en la carpeta de datos para crear la siguiente estructura del directorio:
├── data
│ ├── inverse_map_cache
│ ├── trained_models
│ ├── hand.obj
...
│ ├── spot.obj
Para ejecutar los modelos previamente capacitados, use los comandos a continuación. Los resultados se guardarán en results/[name-of-mesh]/[name-of-edit]/renders/infernce.png .
Lugar:
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






Persona:
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






Mano:
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


Para reproducir los resultados del papel desde cero, simplemente pase un archivo de configuración de demostración predefinido. Los resultados se guardarán en results/[name-of-mesh]/[name-of-edit] .
Lugar:
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
Persona:
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
LEGO MINIFIGURA:
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
Mano:
python src/main.py --config_path demo/hand/fancy_gold_watch.yaml
Para ejecutar sus propios ejemplos, puede crear sus propios archivos de configuración y pasarlos como se hacen en la sección anterior. Además, en su lugar, puede pasar valores para cualquiera de los campos en src/configs/train_config como argumentos de línea de comandos. Por ejemplo, para ejecutar el ejemplo de la mano sin pasar un archivo de configuración, puede llamar:
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 no tiene acceso a una GPU de 48 GB, puede ...
cpu_offload en True en src/configs/guidance_config.py . Esto reducirá significativamente el uso de la memoria, pero tiene un costo de velocidad.batch_size , ya sea con el argumento de la línea de comandos --optim.batch_size o en un archivo de configuración personalizado. Si bien esto reduce el uso de la memoria, puede afectar la precisión.sample_points en True y ajuste mlp_batch_size ). Si bien esto reduce el uso de la memoria, puede afectar la precisión.batched_sd en False ). Esto reducirá el uso de la memoria, pero tiene un costo de velocidad. Nuestra base de código se basa en la pintura latente/latente y nuestro código de guía CSD está estructurado en el formato de los módulos de guía de Threestudio. Agradecemos a estos autores por su increíble trabajo.
Si encuentra que este código es útil para su investigación, cite nuestro petróleo de papel 3D: estilización local de formas 3D con destilación de puntaje en cascada.
@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}
}