Dale Decatur, Itai Lang, Kfir Aberman, Rana Hanocka



Neste trabalho, desenvolvemos o 3D Paintbrush, uma técnica para textura automaticamente regiões semânticas locais em malhas por meio de descrições de texto. Nosso método foi projetado para operar diretamente em malhas, produzindo mapas de textura que se integram perfeitamente aos pipelines de gráficos padrão. Optamos por produzir simultaneamente um mapa de localização (para especificar a região de edição) e um mapa de textura que está em conformidade com ele. Essa abordagem sinérgica melhora a qualidade da localização e da estilização. Para aprimorar os detalhes e a resolução da área texturizada, aproveitamos vários estágios de um modelo de difusão em cascata para supervisionar nossa técnica de edição local com os anteriores generativos aprendidos com imagens em diferentes resoluções. Nossa técnica, conhecida como destilação em cascata (CSD), simultaneamente destila as pontuações em várias resoluções de maneira cascata, permitindo o controle sobre a granularidade e a compreensão global da supervisão. Demonstramos a eficácia do pincel 3D para texturar localmente uma variedade de formas em diferentes regiões semânticas.
Para ver uma demonstração da perda de destilação de pontuação em cascata (CSD), confira este notebook aplicando CSD à geração de imagens e edição de imagens. O CSD nos permite supervisionar nossa otimização com vários estágios em cascata do modelo de difusão, em vez de apenas o estágio base usado no SDS padrão. Nós destilamos os escores em vários estágios de um modelo de difusão em cascata simultaneamente, a fim de alavancar a consciência global do primeiro estágio e o nível mais alto de detalhes contidos nos estágios posteriores.

Se você tiver menos de 48 GB de memória da GPU, ainda poderá executar o código, consulte a seção na otimização da memória para obter mais detalhes.
Primeiro, crie o ambiente do conda:
conda create -n "3d-paintbrush" python=3.10
e ativá -lo com:
conda activate 3d-paintbrush
Em seguida, instale os pacotes necessários executando o script de instalação. Certifique -se de executar este script com acesso a uma GPU .
bash ./install_environment.sh
Instruções de Deepfloyd se:
huggingface_hub pip install huggingface_hub --upgrade
Execute a função de login em um shell python
from huggingface_hub import login
login()
e digite seu token de acesso ao hub de rosto abraçado.
Para usar nossos modelos pré-treinados, faça o download das pastas trained_models e inverse_map_cache daqui e adicione-as na pasta de dados para criar a seguinte estrutura de diretório:
├── data
│ ├── inverse_map_cache
│ ├── trained_models
│ ├── hand.obj
...
│ ├── spot.obj
Para executar os modelos pré-treinados, use os comandos abaixo. Os resultados serão salvos em results/[name-of-mesh]/[name-of-edit]/renders/infernce.png .
Ver:
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






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






Mão:
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


To reproduce results from the paper from scratch, just pass a predefined demo config file. Os resultados serão salvos em results/[name-of-mesh]/[name-of-edit] .
Ver:
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
Pessoa:
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
Minifiguração 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
Mão:
python src/main.py --config_path demo/hand/fancy_gold_watch.yaml
Para executar seus próprios exemplos, você pode criar seus próprios arquivos de configuração e passá -los como feito na seção anterior. Além disso, você pode passar valores para qualquer um dos campos nos argumentos da linha de comando src/configs/train_config . Por exemplo, para executar o exemplo da mão sem passar um arquivo de configuração, você pode ligar:
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"
Se você não tiver acesso a uma GPU de 48 GB, você pode ...
cpu_offload como True em src/configs/guidance_config.py . Isso reduzirá significativamente o uso da memória, mas custará a velocidade.batch_size com o argumento da linha de comando --optim.batch_size ou em um arquivo de configuração personalizado. Embora isso reduz o uso da memória, isso pode afetar a precisão.sample_points como True e ajuste mlp_batch_size ). Embora isso reduz o uso da memória, isso pode afetar a precisão.batched_sd como False ). Isso reduzirá o uso da memória, mas custa a velocidade. Nossa base de código é baseada no Latent-Enerf/Latent-Paint e nosso código de orientação CSD é estruturado no formato dos módulos de orientação do Threestudio. Agradecemos a esses autores por seu trabalho incrível.
Se você achar esse código útil para sua pesquisa, cite nosso pincel 3D em papel: estilização local de formas 3D com destilação em cascata.
@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}
}