Giuseppe Vecchio, Renato Sortino, Simone Palazzo y Concetto Spampinato

La implementación oficial de Pytorch para el papel "Matfuse: generación de material controlable con modelos de difusión" .
Matfuse es un enfoque novedoso que simplifica la creación de mapas SVBRDF (función de distribución de reflectancia bidireccional espacialmente variable).
Aprovecha la potencia generativa de los modelos de difusión (DM) para racionalizar el proceso de síntesis de material. Al integrar múltiples fuentes de acondicionamiento, incluidas paletas de colores, bocetos, texto e imágenes, proporciona un control y flexibilidad de grano fino en la generación de materiales.
Además, Matfuse permitió editar o refinar los materiales sintetizados después de su generación inicial. Admite una edición a nivel de mapa enmascarando áreas específicas de mapas específicos o todo el material.

Crear materiales de alta calidad en gráficos por computadora es una tarea desafiante y que requiere mucho tiempo, que requiere una gran experiencia. Para simplemente este proceso, presentamos a Matfuse , un enfoque unificado que aprovecha el poder generativo de los modelos de difusión para simplificar la creación de mapas SVBRDF. Nuestra tubería integra múltiples fuentes de acondicionamiento, incluidas paletas de colores, bocetos, texto e imágenes, para un control de grano fino y flexibilidad en la síntesis de materiales. Este diseño permite la combinación de diversas fuentes de información (por ejemplo, boceto + texto), mejorando las posibilidades creativas en línea con el principio de composicionalidad. Además, proponemos un modelo de compresión múltiple con un propósito doble: mejora el rendimiento de la reconstrucción mediante el aprendizaje de una representación latente separada para cada mapa y permite una capacidades de edición de material a nivel de mapa. Demostramos la efectividad de Matfuse en múltiples configuraciones de acondicionamiento y exploramos el potencial de la edición de materiales. También evaluamos cuantitativamente la calidad de los materiales generados en términos de puntajes CLIP-IQA y FID.

Este repositorio se basa en la implementación de difusión latente original (https://github.com/compvis/stable-diffusion) que se ha modificado para incluir las características descritas en el documento Matfuse . Si está familiarizado con la base de código de difusión estable original, no debe tener problemas para ejecutar este.
Los cambios más relevantes son:
Matfuse está entrenado en una combinación del conjunto de datos por Deschaintre et al. (2018) y materiales de la Biblioteca Polyheaven. No planeamos lanzar el conjunto de datos que se pueda recopilar fácilmente. De todos modos, si planea entrenar su propia matfuse, recomendamos firmemente el uso del conjunto de datos recientemente publicado Matsynth , que contiene una variedad más amplia de materiales y anotaciones de alta resolución.
git clone https://github.com/giuvecchio/matfuse-sd.git
cd matfuse-sd Esto supone que ha navegado a la raíz matfuse-sd después de clonarla.
Nota: Esto se prueba bajo python3.10 . Para otras versiones de Python, puede encontrar conflictos de versión.
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.txtEl entrenamiento de Matfuse requiere dos pasos:
Se accede a ambos a través del script main.py en la carpeta src y se basa en el uso de archivos de configuración para configurar los modelos, conjuntos de datos y pérdidas.
Los archivos de configuración se encuentran en src/configs/ , y se dividen en subcarpetas autoencoder y diffusion .
Use el archivo de configuración correcto según la parte del modelo que desea entrenar.
El comando general para lanzar una capacitación es:
python src/main.py --base src/configs/ < model > / < config.yaml > --train --gpus < indices, > Proporcionamos una clase de conjunto de datos para la capacitación de Matfuse. Este conjunto de datos espera que la carpeta de datos se estructura como se muestra a continuación.
./data/MatFuse/{split}/
├── bricks_045
│ ├── metadata.json
│ ├── diffuse.png
│ ├── normal.png
│ ├── roughness.png
│ ├── specular.png
│ ├── sketch.png
│ ├── renders
│ ├── render_00.png
│ ├── render_01.png
│ ├── ...
├── ...
Los datos deben dividirse entre train y los conjuntos test . Cada carpeta de material contiene los mapas SVBRDF requeridos (difuso, normal, rugosidad, especular), el boceto y un archivo metadata.json con el título de texto y la paleta de colores.
data_root en el archivo de configuración para señalar la carpeta donde se almacena su conjunto de datos.
Proporcionamos un script para extraer la paleta de colores de los renders bajo la carpeta src/scripts/data . Para ejecutarlo ejecutar:
python src/scripts/data/extract_palette.py --data < path/to/dataset > Las configuraciones para capacitar a un autoencoder se proporcionan en src/configs/autoencoder .
Matfuse utiliza un modelo regularizado VQ. Para obtener más información, consulte el repositorio de Taming-Transformers.
El entrenamiento se puede iniciar ejecutando
python src/main.py --base src/configs/autoencoder/multi-vq_f8.yaml --train --gpus 0, En src/configs/diffusion/ Proporcionamos configuraciones para capacitar a Matfuse LDMS.ckpt_path en first_stage_config en el matfuse-ldm-vq_f8.yaml para apuntar a su punto de control VQ-VAE.
El entrenamiento se puede iniciar ejecutando
python src/main.py --base src/configs/diffusion/matfuse-ldm-vq_f8.yaml --train --gpus 0, Para reanudar una capacitación, agregue los argumentos --resume <log/folder> al comando de capacitación.
Si está entrenando en Windows, recuerde establecer el backend distribuido en gloo . ¡Otros no son apoyados!
$env :PL_TORCH_DISTRIBUTED_BACKEND= ' gloo 'Para limitar el número de uso visible de GPU:
CUDA_VISIBLE_DEVICES= < GPU_ID > python src/main.py ...Los experimentos se registran automáticamente utilizando pesos y sesgos. Para especificar su propio espacio de proyecto y nombre de proyecto, Establezca las siguientes variables de entorno:
WANDB_PROJECT= ' {YOUR_PROJECT_NAME} '
WANDB_ENTITY= ' {YOUR_PROJECT_SPACE_NAME} ' Para ejecutar inferencia en un modelo entrenado, ejecute el script gradio_app.py especificando la ruta al punto de control del modelo y la configuración.
Esto abrirá una interfaz web para realizar la generación condicional y la edición de materiales.
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 }
}