Giuseppe Vecchio, Renato Sortino, Simone Palazzo และ Concetto Spampinato

การใช้งาน Pytorch อย่างเป็นทางการสำหรับกระดาษ "Matfuse: การสร้างวัสดุที่สามารถควบคุมได้ด้วยรูปแบบการแพร่กระจาย"
Matfuse เป็นวิธีการใหม่ที่ทำให้การสร้าง SVBRDF ง่ายขึ้น
มันใช้ประโยชน์จากพลังการกำเนิดของแบบจำลองการแพร่กระจาย (DM) เพื่อปรับปรุงกระบวนการสังเคราะห์วัสดุ ด้วยการรวมแหล่งที่มาของการปรับสภาพหลายแหล่งรวมถึงจานสีภาพร่างข้อความและรูปภาพทำให้มีการควบคุมและความยืดหยุ่นในการสร้างวัสดุอย่างละเอียด
นอกจากนี้ Matfuse เปิดใช้งานการแก้ไขหรือปรับแต่งวัสดุสังเคราะห์หลังจากรุ่นแรกของพวกเขา รองรับการแก้ไขระดับแผนที่โดยการปิดบังพื้นที่เฉพาะของแผนที่เฉพาะหรือวัสดุทั้งหมด

การสร้างวัสดุคุณภาพสูงในกราฟิกคอมพิวเตอร์เป็นงานที่ท้าทายและใช้เวลานานซึ่งต้องใช้ความเชี่ยวชาญที่ดี ในกระบวนการนี้เราแนะนำ Matfuse ซึ่งเป็นวิธีการแบบครบวงจรที่ควบคุมพลังการกำเนิดของแบบจำลองการแพร่กระจายเพื่อลดความซับซ้อนของการสร้างแผนที่ SVBRDF ไปป์ไลน์ของเรารวมแหล่งที่มาของการปรับสภาพหลายแหล่งรวมถึงจานสีภาพร่างข้อความและรูปภาพเพื่อการควบคุมและความยืดหยุ่นในการสังเคราะห์วัสดุ การออกแบบนี้ช่วยให้การรวมกันของแหล่งข้อมูลที่หลากหลาย (เช่น Sketch + Text) เพิ่มความเป็นไปได้ที่สร้างสรรค์ให้สอดคล้องกับหลักการของการประพันธ์ นอกจากนี้เรายังเสนอรูปแบบการบีบอัดแบบหลายรหัสด้วยวัตถุประสงค์สองเท่า: ปรับปรุงประสิทธิภาพการสร้างใหม่โดยการเรียนรู้การแสดงแฝงแยกต่างหากสำหรับแต่ละแผนที่และเปิดใช้งานความสามารถในการแก้ไขวัสดุระดับแผนที่ เราแสดงให้เห็นถึงประสิทธิภาพของ Matfuse ภายใต้การตั้งค่าการปรับอากาศหลายครั้งและสำรวจศักยภาพของการแก้ไขวัสดุ นอกจากนี้เรายังประเมินคุณภาพของวัสดุที่สร้างขึ้นในแง่ของคะแนน Clip-IQA และ FID

repo นี้อาศัยการใช้งานการแพร่กระจายแฝงดั้งเดิม (https://github.com/compvis/stable-diffusion) ซึ่งได้รับการแก้ไขเพื่อรวมคุณสมบัติที่อธิบายไว้ในกระดาษ matfuse หากคุณคุ้นเคยกับ codebase การแพร่กระจายที่เสถียรดั้งเดิมคุณไม่ควรมีปัญหาในการเรียกใช้อันนี้
การเปลี่ยนแปลงที่เกี่ยวข้องมากที่สุดคือ:
Matfuse ได้รับการฝึกฝนเกี่ยวกับการรวมกันของชุดข้อมูลโดย Deschaintre และคณะ (2018) และวัสดุจากห้องสมุด Polyheaven เราไม่ได้วางแผนที่จะปล่อยชุดข้อมูลดังกล่าวเนื่องจากสามารถรวบรวมได้ง่าย อย่างไรก็ตามหากคุณวางแผนที่จะฝึกอบรม matfuse ของคุณเองเราขอแนะนำอย่างยิ่งโดยใช้ ชุด ข้อมูลที่เพิ่งเปิดตัวเมื่อเร็ว ๆ นี้ซึ่งมีวัสดุและคำอธิบายประกอบความละเอียดสูงที่หลากหลาย
git clone https://github.com/giuvecchio/matfuse-sd.git
cd matfuse-sd นี่คือสมมติว่าคุณได้นำทางไปยังรูท matfuse-sd หลังจากโคลน
หมายเหตุ: นี่คือการทดสอบภายใต้ python3.10 สำหรับรุ่น Python อื่น ๆ คุณอาจพบกับความขัดแย้งของเวอร์ชัน
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.txtการฝึกอบรม Matfuse ต้องใช้สองขั้นตอน:
ทั้งสองสามารถเข้าถึงได้ผ่านสคริปต์ main.py ในโฟลเดอร์ src และอาศัยการใช้ไฟล์กำหนดค่าเพื่อตั้งค่าโมเดลชุดข้อมูลและการสูญเสีย
ไฟล์ config อยู่ภายใต้ src/configs/ และถูกแบ่งในโฟลเดอร์ autoencoder และ diffusion
ใช้ไฟล์กำหนดค่าที่เหมาะสมขึ้นอยู่กับส่วนของรุ่นที่คุณต้องการฝึกอบรม
คำสั่งทั่วไปที่จะเปิดตัวการฝึกอบรมคือ:
python src/main.py --base src/configs/ < model > / < config.yaml > --train --gpus < indices, > เรามีคลาสชุดข้อมูลสำหรับการฝึกอบรมของ Matfuse ชุดข้อมูลนี้คาดว่าโฟลเดอร์ข้อมูลจะจัดโครงสร้างดังที่แสดงด้านล่าง
./data/MatFuse/{split}/
├── bricks_045
│ ├── metadata.json
│ ├── diffuse.png
│ ├── normal.png
│ ├── roughness.png
│ ├── specular.png
│ ├── sketch.png
│ ├── renders
│ ├── render_00.png
│ ├── render_01.png
│ ├── ...
├── ...
ข้อมูลควรแยกระหว่าง train และชุด test แต่ละโฟลเดอร์วัสดุมีแผนที่ SVBRDF ที่ต้องการ (กระจาย, ปกติ, ความหยาบ, specular), ร่างและไฟล์ metadata.json พร้อมคำบรรยายภาพข้อความและจานสี
data_root ในไฟล์ config เพื่อชี้ไปที่โฟลเดอร์ที่คุณจัดเก็บชุดข้อมูลของคุณไว้
เราให้สคริปต์เพื่อแยกจานสีออกจากการแสดงผลภายใต้โฟลเดอร์ src/scripts/data รันมันรัน:
python src/scripts/data/extract_palette.py --data < path/to/dataset > Configs สำหรับการฝึกอบรม AutoEncoder มีให้ที่ src/configs/autoencoder
Matfuse ใช้โมเดล VQ-regularized สำหรับข้อมูลเพิ่มเติมโปรดดูที่เก็บของ Taming-Transformers
การฝึกอบรมสามารถเริ่มต้นด้วยการวิ่ง
python src/main.py --base src/configs/autoencoder/multi-vq_f8.yaml --train --gpus 0, ใน src/configs/diffusion/ เราให้การกำหนดค่าสำหรับการฝึกอบรม matfuse ldmsckpt_path ภายใต้ first_stage_config ใน matfuse-ldm-vq_f8.yaml เพื่อชี้ไปที่จุดตรวจสอบ VQ-vae ของคุณ
การฝึกอบรมสามารถเริ่มต้นด้วยการวิ่ง
python src/main.py --base src/configs/diffusion/matfuse-ldm-vq_f8.yaml --train --gpus 0, หากต้องการกลับมาฝึกอบรมต่อภาคผนวกอาร์กิวเมนต์ --resume <log/folder> ไปยังคำสั่งการฝึกอบรม
หากคุณกำลังฝึกอบรมเกี่ยวกับ Windows อย่าลืมตั้งแบ็กเอนด์แบบกระจายเป็น gloo คนอื่นไม่ได้รับการสนับสนุน!
$env :PL_TORCH_DISTRIBUTED_BACKEND= ' gloo 'เพื่อ จำกัด จำนวนการใช้ GPU ที่มองเห็นได้:
CUDA_VISIBLE_DEVICES= < GPU_ID > python src/main.py ...การทดลองจะถูกบันทึกโดยอัตโนมัติโดยใช้น้ำหนักและอคติ เพื่อระบุพื้นที่โครงการและชื่อโครงการของคุณเองตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้:
WANDB_PROJECT= ' {YOUR_PROJECT_NAME} '
WANDB_ENTITY= ' {YOUR_PROJECT_SPACE_NAME} ' ในการเรียกใช้การอนุมานในรูปแบบที่ผ่านการฝึกอบรมให้เรียกใช้สคริปต์ gradio_app.py ที่ระบุเส้นทางไปยังจุดตรวจสอบโมเดลและการกำหนดค่า
สิ่งนี้จะเปิดเว็บอินเตอร์เฟสเพื่อดำเนินการสร้างแบบมีเงื่อนไขและการแก้ไขวัสดุ
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 }
}