Giuseppe Vecchio, Renato Tritino, Simone Palazzo et Contetto Spampinato

La mise en œuvre officielle de Pytorch pour le papier "MATFUSE: Génération de matériaux contrôlables avec des modèles de diffusion" .
Matfuse est une nouvelle approche qui simplifie la création de cartes SVBRDF (fonction de distribution de réflectance bidirectionnelle variant spatialement).
Il exploite la puissance générative des modèles de diffusion (DM) pour rationaliser le processus de synthèse des matériaux. En intégrant plusieurs sources de conditionnement, y compris les palettes de couleurs, les croquis, le texte et les images, il offre un contrôle et une flexibilité à grains fins dans la génération de matériaux.
De plus, MATFUS a permis de modifier ou de raffiner les matériaux synthétisés après leur génération initiale. Il prend en charge un montage au niveau de la carte en masquant des zones spécifiques de cartes spécifiques ou de l'ensemble du matériau.

La création de matériaux de haute qualité en informatique est une tâche difficile et chronophage, ce qui nécessite une grande expertise. Pour simplement ce processus, nous introduisons Matfuse , une approche unifiée qui exploite la puissance générative des modèles de diffusion pour simplifier la création de cartes SVBRDF. Notre pipeline intègre plusieurs sources de conditionnement, y compris les palettes de couleurs, les croquis, le texte et les images, pour un contrôle et une flexibilité à grains fins dans la synthèse des matériaux. Cette conception permet la combinaison de diverses sources d'information (par exemple, Sketch + Text), améliorant les possibilités créatives conformément au principe de la compositionnalité. De plus, nous proposons un modèle de compression multi-encodeur à deux fins: il améliore les performances de reconstruction en apprenant une représentation latente séparée pour chaque carte et permet des capacités d'édition de matériau au niveau de la carte. Nous démontrons l'efficacité du matfuse sous plusieurs paramètres de conditionnement et explorons le potentiel de l'édition de matériaux. Nous évaluons également quantitativement la qualité des matériaux générés en termes de scores CLIP-IQA et FID.

Ce repo s'appuie sur l'implémentation d'origine de diffusion latente (https://github.com/compvis/stable-diffusion) qui a été modifié pour inclure les fonctionnalités décrites dans le papier matfuse . Si vous connaissez la base de code de diffusion stable d'origine, vous ne devriez avoir aucun problème à exécuter celui-ci.
Les changements les plus pertinents sont:
Matfuse est formé sur une combinaison de l'ensemble de données par Deschaintre et al. (2018) et les matériaux de la bibliothèque Polyheaven. Nous ne prévoyons pas de publier un tel ensemble de données car il peut être facilement collecté. Quoi qu'il en soit, si vous prévoyez de former votre propre Matfuse, nous recommandons fortement en utilisant le jeu de données récemment publié Matsynth qui contient une plus grande variété de matériaux et d'annotations haute résolution.
git clone https://github.com/giuvecchio/matfuse-sd.git
cd matfuse-sd Cela suppose que vous avez navigué à la racine matfuse-sd après l'avoir cloné.
Remarque: Ceci est testé sous python3.10 . Pour d'autres versions Python, vous pourriez rencontrer des conflits de version.
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.txtLa formation de Matfuse nécessite deux étapes:
Les deux sont accessibles via le script main.py dans le dossier src et s'appuient sur l'utilisation des fichiers de configuration pour configurer les modèles, les ensembles de données et les pertes.
Les fichiers de configuration sont situés sous src/configs/ et sont divisés dans autoencoder et des sous-dossiers diffusion .
Utilisez le bon fichier de configuration en fonction de la partie du modèle que vous souhaitez former.
La commande générale pour lancer une formation est:
python src/main.py --base src/configs/ < model > / < config.yaml > --train --gpus < indices, > Nous fournissons une classe d'ensemble de données pour la formation de Matfuse. Cet ensemble de données s'attend à ce que le dossier de données soit structuré comme indiqué ci-dessous.
./data/MatFuse/{split}/
├── bricks_045
│ ├── metadata.json
│ ├── diffuse.png
│ ├── normal.png
│ ├── roughness.png
│ ├── specular.png
│ ├── sketch.png
│ ├── renders
│ ├── render_00.png
│ ├── render_01.png
│ ├── ...
├── ...
Les données doivent être divisées entre les ensembles train et test . Chaque dossier de matériau contient les cartes SVBRDF requises (diffuse, normale, rugosité, spéculaire), l'esquisse et un fichier metadata.json avec la légende du texte et la palette de couleurs.
data_root dans le fichier de configuration pour pointer vers le dossier où vous avez stocké votre ensemble de données.
Nous fournissons un script pour extraire la palette de couleurs des rendus dans le dossier src/scripts/data . Pour l'exécuter, fonctionne:
python src/scripts/data/extract_palette.py --data < path/to/dataset > Des configurations pour la formation d'un autoencoder sont fournies à src/configs/autoencoder .
Matfuse utilise un modèle régularisé VQ. Pour plus d'informations, consultez le référentiel de transformateurs à l'approvisionnement.
La formation peut être lancée par courir
python src/main.py --base src/configs/autoencoder/multi-vq_f8.yaml --train --gpus 0, Dans src/configs/diffusion/ Nous fournissons des configurations pour la formation des Matfuse LDMS.ckpt_path sous first_stage_config dans le matfuse-ldm-vq_f8.yaml pour pointer votre point de contrôle VQ-VAE.
La formation peut être lancée par courir
python src/main.py --base src/configs/diffusion/matfuse-ldm-vq_f8.yaml --train --gpus 0, Pour reprendre une formation, ajoutez les arguments --resume <log/folder> à la commande de formation.
Si vous vous entraînez sur Windows, n'oubliez pas de définir le backend distribué sur gloo . D'autres ne sont pas pris en charge!
$env :PL_TORCH_DISTRIBUTED_BACKEND= ' gloo 'Pour limiter le nombre de GPU visibles à utiliser:
CUDA_VISIBLE_DEVICES= < GPU_ID > python src/main.py ...Les expériences sont automatiquement enregistrées à l'aide de poids et de biais. Pour spécifier votre propre espace de projet et le nom de projet Définissez les variables d'environnement suivantes:
WANDB_PROJECT= ' {YOUR_PROJECT_NAME} '
WANDB_ENTITY= ' {YOUR_PROJECT_SPACE_NAME} ' Pour exécuter l'inférence sur un modèle formé, exécutez le script gradio_app.py spécifiant le chemin d'accès au point de contrôle du modèle et à la configuration.
Cela ouvrira une interface Web pour effectuer la génération conditionnelle et l'édition de matériaux.
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 }
}