Giuseppe Vecchio, Renato Sortino, Simone Palazzo e Concetto Spampinato

A implementação oficial do Pytorch para o artigo "Matfuse: geração controlável de material com modelos de difusão" .
O Matfuse é uma abordagem nova que simplifica a criação de mapas SVBRDF (função de distribuição de refletância bidirecional espacialmente variável).
Ele aproveita o poder generativo dos modelos de difusão (DM) para otimizar o processo de síntese do material. Ao integrar várias fontes de condicionamento, incluindo paletas de cores, esboços, texto e figuras, ele fornece controle e flexibilidade de granulação fina na geração de materiais.
Além disso, o Matfuse ativou a edição ou o refinamento dos materiais sintetizados após a geração inicial. Ele suporta uma edição no nível do mapa, mascarando áreas específicas de mapas específicos ou todo o material.

Criar materiais de alta qualidade em computadores gráficos é uma tarefa desafiadora e demorada, que requer grande experiência. Para simplesmente esse processo, introduzimos o Matfuse , uma abordagem unificada que aproveita o poder generativo dos modelos de difusão para simplificar a criação de mapas SVBRDF. Nosso oleoduto integra várias fontes de condicionamento, incluindo paletas de cores, esboços, texto e imagens, para um controle e flexibilidade de granulação fina na síntese de materiais. Esse design permite a combinação de diversas fontes de informação (por exemplo, esboço + texto), aprimorando as possibilidades criativas de acordo com o princípio da composicionalidade. Além disso, propomos um modelo de compactação com vários codificadores com um propósito duplo: melhora o desempenho da reconstrução, aprendendo uma representação latente separada para cada mapa e permite um recurso de edição de materiais no nível do mapa. Demonstramos a eficácia do Matfuse em várias configurações de condicionamento e exploramos o potencial da edição de materiais. Também avaliamos quantitativamente a qualidade dos materiais gerados em termos de pontuações CLIP-IQA e FID.

Este repo conta com a implementação original de difusão latente (https://github.com/compvis/stable-diffusion), que foi modificada para incluir os recursos descritos no papel Matfuse . Se você estiver familiarizado com a base de código de difusão estável original, não terá problemas para executar este.
As mudanças mais relevantes são:
Matfuse é treinado em uma combinação do conjunto de dados de Deschaintre et al. (2018) e materiais da Biblioteca Polyheaven. Não planejamos liberar esse conjunto de dados, pois pode ser facilmente coletado. De qualquer forma, se você planeja treinar seu próprio Matfuse, recomendamos fortemente usando o conjunto de dados lançado recentemente Matsynth , que contém uma variedade maior de materiais e anotações de alta resolução.
git clone https://github.com/giuvecchio/matfuse-sd.git
cd matfuse-sd Isso supõe que você tenha navegado na raiz matfuse-sd após a clonagem.
Nota: Isso é testado em python3.10 . Para outras versões do Python, você pode encontrar conflitos de versão.
Pytorch 1.13.1
# create environment (can use venv instead of conda)
conda create -n matfuse python==3.10.13
conda activate matfuse
# install required packages
pip install -r requirements.txtO treinamento do Matfuse requer duas etapas:
Ambos são acessados através do script main.py na pasta src e depende do uso de arquivos de configuração para configurar os modelos, conjuntos de dados e perdas.
Os arquivos de configuração estão localizados em src/configs/ , e são divididos em subpastas autoencoder e diffusion .
Use o arquivo de configuração certo, dependendo da parte do modelo que você deseja treinar.
O comando geral para iniciar um treinamento é:
python src/main.py --base src/configs/ < model > / < config.yaml > --train --gpus < indices, > Fornecemos uma classe de conjunto de dados para o treinamento do Matfuse. Este conjunto de dados espera que a pasta de dados seja estruturada, como mostrado abaixo.
./data/MatFuse/{split}/
├── bricks_045
│ ├── metadata.json
│ ├── diffuse.png
│ ├── normal.png
│ ├── roughness.png
│ ├── specular.png
│ ├── sketch.png
│ ├── renders
│ ├── render_00.png
│ ├── render_01.png
│ ├── ...
├── ...
Os dados devem ser divididos entre os conjuntos de train e test . Cada pasta de material contém os mapas SVBRDF necessários (difuso, normal, rugosidade, especular), o esboço e um arquivo de metadata.json com a legenda do texto e a paleta de cores.
data_root no arquivo de configuração para apontar para a pasta onde você possui seu conjunto de dados.
Fornecemos um script para extrair a paleta de cores das renderizações na pasta src/scripts/data . Para executá -lo, execute:
python src/scripts/data/extract_palette.py --data < path/to/dataset > As configurações para o treinamento de um AutoEncoder são fornecidas no src/configs/autoencoder .
O Matfuse usa um modelo regulado por VQ. Para mais informações, consulte o repositório de transformadores de doming.
O treinamento pode ser iniciado correndo
python src/main.py --base src/configs/autoencoder/multi-vq_f8.yaml --train --gpus 0, Em src/configs/diffusion/ Fornecemos configurações para treinar o Matfuse LDMS.ckpt_path em first_stage_config no matfuse-ldm-vq_f8.yaml para apontar para o seu ponto de verificação VQ-VAE.
O treinamento pode ser iniciado correndo
python src/main.py --base src/configs/diffusion/matfuse-ldm-vq_f8.yaml --train --gpus 0, Para retomar um treinamento, anexa os argumentos --resume <log/folder> ao comando de treinamento.
Se você estiver treinando no Windows, lembre -se de definir o back -end distribuído para gloo . Outros não são apoiados!
$env :PL_TORCH_DISTRIBUTED_BACKEND= ' gloo 'Para limitar o número de GPUs visíveis:
CUDA_VISIBLE_DEVICES= < GPU_ID > python src/main.py ...As experiências são automaticamente registradas usando pesos e vieses. Para especificar seu próprio espaço de projeto e nome do projeto, defina as seguintes variáveis de ambiente:
WANDB_PROJECT= ' {YOUR_PROJECT_NAME} '
WANDB_ENTITY= ' {YOUR_PROJECT_SPACE_NAME} ' Para executar a inferência em um modelo treinado, execute o script gradio_app.py especificando o caminho para o ponto de verificação do modelo e a configuração.
Isso abrirá uma interface da Web para executar a geração condicional e a edição de materiais.
python src/gradio_app.py --ckpt < path/to/checkpoint.ckpt > --config src/configs/diffusion/ < config.yaml > 

@inproceedings { vecchio2024matfuse ,
author = { Vecchio, Giuseppe and Sortino, Renato and Palazzo, Simone and Spampinato, Concetto } ,
title = { MatFuse: Controllable Material Generation with Diffusion Models } ,
booktitle = { Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) } ,
month = { June } ,
year = { 2024 } ,
pages = { 4429-4438 }
}