Giuseppe Vecchio, Renato Sortino, Simone Palazzo und Concetto Spampinato

Die offizielle Pytorch -Implementierung für Papier "Matfuse: Steuerbares Materialgenerierung mit Diffusionsmodellen" .
Matfuse ist ein neuer Ansatz, der die Erstellung von SVBRDF-Karten (räumlich variierende bidirektionale Reflexionsverteilungsverteilung) vereinfacht.
Es nutzt die generative Leistung von Diffusionsmodellen (DM), um den Materialsyntheseprozess zu rationalisieren. Durch die Integration mehrerer Konditionierungsquellen, einschließlich Farbpaletten, Skizzen, Text und Bilder, bietet es eine feinkörnige Kontrolle und Flexibilität bei der materiellen Erzeugung.
Darüber hinaus ermöglichte Matfuse nach ihrer ersten Generation die Bearbeitung oder Verfeinerung der synthetisierten Materialien. Es unterstützt eine Bearbeitung auf Kartenebene, indem bestimmte Bereiche bestimmter Karten oder das gesamte Material maskiert werden.

Das Erstellen hochwertiger Materialien in Computergrafiken ist eine herausfordernde und zeitaufwändige Aufgabe, die ein großes Fachwissen erfordert. In diesem Prozess stellen wir Matfuse vor, einen einheitlichen Ansatz, der die generative Kraft von Diffusionsmodellen nutzt, um die Erstellung von SVBRDF -Karten zu vereinfachen. Unsere Pipeline integriert mehrere Konditionierungsquellen, einschließlich Farbpaletten, Skizzen, Text und Bilder, für eine feinkörnige Kontrolle und Flexibilität bei der Materialsynthese. Dieses Design ermöglicht die Kombination verschiedener Informationsquellen (z. B. Sketch + Text), wodurch kreative Möglichkeiten im Einklang mit dem Prinzip der Kompositionalität verbessert werden. Darüber hinaus schlagen wir ein Multi-Encoder-Komprimierungsmodell mit einem zweifachen Zweck vor: Es verbessert die Rekonstruktionsleistung durch das Erlernen einer separaten latenten Darstellung für jede Karte und ermöglicht eine Materialbearbeitungsfunktionen auf Kartenebene. Wir demonstrieren die Wirksamkeit von Matfuse unter mehreren Konditionierungseinstellungen und untersuchen das Potenzial der materiellen Bearbeitung. Wir bewerten auch quantitativ die Qualität der erzeugten Materialien in Bezug auf Clip-IQA- und FID-Scores.

Dieses Repo basiert auf der ursprünglichen latenten Implementierung von Latent Diffusion (https://github.com/compis/stable-diffusion), die so geändert wurde, dass sie die im Matfuse- Papier beschriebenen Funktionen enthalten. Wenn Sie mit der ursprünglichen stabilen Diffusions -Codebasis vertraut sind, sollten Sie keine Probleme haben, diese auszuführen.
Die relevantesten Änderungen sind:
Matfuse wird in einer Kombination aus dem Datensatz von Deschaintre et al. (2018) und Materialien aus der Polyheaven -Bibliothek. Wir planen nicht, einen solchen Datensatz zu veröffentlichen, da diese leicht erfasst werden können. Wenn Sie vorhaben, Ihre eigene Matfuse zu trainieren, empfehlen wir mit dem kürzlich veröffentlichten Datensatz -Matsynth, der eine Vielzahl von hochauflösenden Materialien und Anmerkungen enthält, mithilfe der kürzlich veröffentlichten Datensatzmatsyn.
git clone https://github.com/giuvecchio/matfuse-sd.git
cd matfuse-sd Dies setzt voraus, dass Sie nach dem Klonen in die matfuse-sd Wurzel navigiert haben.
Hinweis: Dies wird unter python3.10 getestet. Für andere Python -Versionen können Sie auf Versionskonflikte stoßen.
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.txtDie Ausbildung von Matfuse erfordert zwei Schritte:
Beide werden über das Hauptskript main.py im src -Ordner zugegriffen und basieren auf der Verwendung von Konfigurationsdateien zum Einrichten der Modelle, Datensätze und Verluste.
Konfigurationsdateien befinden sich unter src/configs/ und werden in den Unterordnern autoencoder und diffusion aufgeteilt.
Verwenden Sie die richtige Konfigurationsdatei je nach Teil des Modells, das Sie trainieren möchten.
Der allgemeine Befehl zum Starten eines Trainings lautet:
python src/main.py --base src/configs/ < model > / < config.yaml > --train --gpus < indices, > Wir bieten eine Datensatzklasse für die Ausbildung von Matfuse. Dieser Datensatz erwartet, dass der Datenordner wie unten gezeigt strukturiert wird.
./data/MatFuse/{split}/
├── bricks_045
│ ├── metadata.json
│ ├── diffuse.png
│ ├── normal.png
│ ├── roughness.png
│ ├── specular.png
│ ├── sketch.png
│ ├── renders
│ ├── render_00.png
│ ├── render_01.png
│ ├── ...
├── ...
Daten sollten zwischen train und test aufgeteilt werden. Jeder Materialordner enthält die erforderlichen SVBRDF -Karten (diffuse, normal, rau, spiegelig), die Skizze und eine metadata.json -Datei mit der Textunterschrift und der Farbpalette.
data_root in der Konfigurationsdatei, um auf den Ordner zu verweisen, in dem Sie Ihren Datensatz gespeichert haben.
Wir stellen ein Skript zur Verfügung, um die Farbpalette aus den Rendern unter dem Ordner src/scripts/data zu extrahieren. Um es zu laufen, läuft:
python src/scripts/data/extract_palette.py --data < path/to/dataset > Konfigurationen für das Training eines AutoCoders werden unter src/configs/autoencoder bereitgestellt.
Matfuse verwendet ein VQ-regulärer Modell. Weitere Informationen finden Sie im Taming-Transformatoren-Repository.
Das Training kann durch Laufen gestartet werden
python src/main.py --base src/configs/autoencoder/multi-vq_f8.yaml --train --gpus 0, In src/configs/diffusion/ Wir bieten Konfigurationen für das Training der Matfuse -LDMs.ckpt_path unter first_stage_config im matfuse-ldm-vq_f8.yaml um auf Ihren VQ-VAE-Checkpoint zu verweisen.
Das Training kann durch Laufen gestartet werden
python src/main.py --base src/configs/diffusion/matfuse-ldm-vq_f8.yaml --train --gpus 0, Um ein Training wieder aufzunehmen, wenden Sie sich an die Argumente --resume <log/folder> in den Trainingsbefehl.
Wenn Sie unter Windows trainieren, denken Sie daran, das verteilte Backend auf gloo zu setzen. Andere werden nicht unterstützt!
$env :PL_TORCH_DISTRIBUTED_BACKEND= ' gloo 'Um die Anzahl der sichtbaren GPUs zu begrenzen:
CUDA_VISIBLE_DEVICES= < GPU_ID > python src/main.py ...Die Experimente werden automatisch mit Gewichten und Vorurteilen protokolliert. Um Ihren eigenen Projektraum und der Projektname anzugeben, legen Sie die folgenden Umgebungsvariablen fest:
WANDB_PROJECT= ' {YOUR_PROJECT_NAME} '
WANDB_ENTITY= ' {YOUR_PROJECT_SPACE_NAME} ' Führen Sie das Skript gradio_app.py aus, um den Pfad zum Modell -Checkpoint und die Konfiguration anzugeben, um Inferenz auf einem trainierten Modell auszuführen.
Dadurch wird eine Weboberfläche geöffnet, um eine bedingte Generation und materielle Bearbeitung durchzuführen.
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 }
}