Giuseppe Vecchio, Renato Sortino, Simone Palazzo dan Concetto Spampinato

Implementasi Pytorch resmi untuk kertas "Matfuse: Generasi Bahan yang Dapat Dikontrol dengan Model Difusi" .
Matfuse adalah pendekatan baru yang menyederhanakan penciptaan SVBRDF (fungsi distribusi refleksi dua arah yang bervariasi secara spasial).
Ini memanfaatkan kekuatan generatif model difusi (DM) untuk merampingkan proses sintesis material. Dengan mengintegrasikan berbagai sumber pengkondisian, termasuk palet warna, sketsa, teks, dan gambar, ia memberikan kontrol berbutir halus dan fleksibilitas dalam pembuatan material.
Selain itu, Matfuse mengaktifkan pengeditan atau penyempurnaan bahan yang disintesis setelah generasi awal mereka. Ini mendukung pengeditan tingkat peta dengan menutupi area spesifik peta spesifik atau seluruh materi.

Membuat bahan berkualitas tinggi dalam grafik komputer adalah tugas yang menantang dan memakan waktu, yang membutuhkan keahlian yang hebat. Untuk hanya proses ini, kami memperkenalkan Matfuse , pendekatan terpadu yang memanfaatkan kekuatan generatif model difusi untuk menyederhanakan penciptaan peta SVBRDF. Pipa kami mengintegrasikan berbagai sumber pengkondisian, termasuk palet warna, sketsa, teks, dan gambar, untuk kontrol berbutir halus dan fleksibilitas dalam sintesis material. Desain ini memungkinkan kombinasi beragam sumber informasi (misalnya, sketsa + teks), meningkatkan kemungkinan kreatif sejalan dengan prinsip komposisi. Selain itu, kami mengusulkan model kompresi multi-encoder dengan tujuan dua kali lipat: ini meningkatkan kinerja rekonstruksi dengan mempelajari representasi laten terpisah untuk setiap peta dan memungkinkan kemampuan pengeditan material tingkat peta. Kami menunjukkan efektivitas Matfuse di bawah pengaturan pengkondisian berganda dan mengeksplorasi potensi pengeditan material. Kami juga secara kuantitatif menilai kualitas bahan yang dihasilkan dalam hal skor Clip-IQA dan FID.

Repo ini bergantung pada implementasi difusi laten asli (https://github.com/compvis/stable-diffusion) yang telah dimodifikasi untuk memasukkan fitur yang dijelaskan dalam kertas Matfuse . Jika Anda terbiasa dengan basis kode difusi stabil asli, Anda seharusnya tidak memiliki masalah yang menjalankan yang satu ini.
Perubahan yang paling relevan adalah:
Matfuse dilatih pada kombinasi dataset oleh Deschaintre et al. (2018) dan bahan dari perpustakaan polyheaven. Kami tidak berencana untuk merilis dataset seperti itu karena dapat dengan mudah dikumpulkan. Ngomong-ngomong, jika Anda berencana untuk melatih Matfuse Anda sendiri, kami sangat merekomendasikan menggunakan Dataset Matsynth yang baru-baru ini dirilis yang berisi variasi yang lebih luas dari bahan dan anotasi resolusi tinggi.
git clone https://github.com/giuvecchio/matfuse-sd.git
cd matfuse-sd Ini dengan asumsi Anda telah menavigasi ke akar matfuse-sd setelah mengkloningnya.
Catatan: Ini diuji di bawah python3.10 . Untuk versi Python lainnya, Anda mungkin menghadapi konflik versi.
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.txtPelatihan Matfuse membutuhkan dua langkah:
Keduanya diakses melalui skrip main.py di folder src dan bergantung pada penggunaan file konfigurasi untuk mengatur model, kumpulan data, dan kerugian.
File konfigurasi terletak di bawah src/configs/ , dan dibagi dalam subfolder autoencoder dan diffusion .
Gunakan file konfigurasi yang tepat tergantung pada bagian dari model yang ingin Anda latih.
Perintah umum untuk meluncurkan pelatihan adalah:
python src/main.py --base src/configs/ < model > / < config.yaml > --train --gpus < indices, > Kami menyediakan kelas dataset untuk pelatihan Matfuse. Dataset ini mengharapkan folder data disusun seperti yang ditunjukkan di bawah ini.
./data/MatFuse/{split}/
├── bricks_045
│ ├── metadata.json
│ ├── diffuse.png
│ ├── normal.png
│ ├── roughness.png
│ ├── specular.png
│ ├── sketch.png
│ ├── renders
│ ├── render_00.png
│ ├── render_01.png
│ ├── ...
├── ...
Data harus terpecah antara train dan set test . Setiap folder material berisi peta SVBRDF yang diperlukan (difus, normal, kekasaran, specular), sketsa dan file metadata.json dengan teks teks dan palet warna.
data_root di file konfigurasi untuk menunjuk ke folder di mana Anda memiliki dataset Anda disimpan.
Kami menyediakan skrip untuk mengekstrak palet warna dari render di bawah src/scripts/data . Untuk menjalankannya lari:
python src/scripts/data/extract_palette.py --data < path/to/dataset > Konfigurasi untuk Pelatihan Autoencoder disediakan di src/configs/autoencoder .
Matfuse menggunakan model yang diatur VQ. Untuk info lebih lanjut, lihat repositori Taming-Transformers.
Pelatihan dapat dimulai dengan berlari
python src/main.py --base src/configs/autoencoder/multi-vq_f8.yaml --train --gpus 0, Dalam src/configs/diffusion/ kami menyediakan konfigurasi untuk melatih Matfuse LDMS.ckpt_path di bawah first_stage_config di matfuse-ldm-vq_f8.yaml untuk menunjuk ke pos pemeriksaan VQ-VAE Anda.
Pelatihan dapat dimulai dengan berlari
python src/main.py --base src/configs/diffusion/matfuse-ldm-vq_f8.yaml --train --gpus 0, Untuk melanjutkan pelatihan, tambahkan argumen --resume <log/folder> ke perintah pelatihan.
Jika Anda berlatih di Windows, ingatlah untuk mengatur backend terdistribusi ke gloo . Yang lain tidak didukung!
$env :PL_TORCH_DISTRIBUTED_BACKEND= ' gloo 'Untuk membatasi jumlah penggunaan GPU yang terlihat:
CUDA_VISIBLE_DEVICES= < GPU_ID > python src/main.py ...Eksperimen secara otomatis dicatat menggunakan bobot dan bias. Untuk menentukan ruang proyek dan nama proyek Anda sendiri, atur variabel lingkungan berikut:
WANDB_PROJECT= ' {YOUR_PROJECT_NAME} '
WANDB_ENTITY= ' {YOUR_PROJECT_SPACE_NAME} ' Untuk menjalankan inferensi pada model yang terlatih, jalankan skrip gradio_app.py yang menentukan jalur ke pos pemeriksaan model dan konfigurasi.
Ini akan membuka antarmuka web untuk melakukan pembuatan bersyarat dan pengeditan materi.
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 }
}