🚀 StableMaterials
StableMaterials 是一個基於擴散模型的工具,專為生成逼真的基於物理的渲染(PBR)材質而設計。該模型將半監督學習與潛在擴散模型(LDMs)相結合,能夠根據文本或圖像提示生成高分辨率、可平鋪的材質貼圖。StableMaterials 可以推斷漫反射(基礎顏色)和鏡面反射(粗糙度、金屬度)屬性,以及材質的微觀結構(高度、法線)。🌟
如需瞭解更多詳情,請訪問項目頁面,或在 arXiv 上閱讀完整論文。
⚠️ 重要提示
此倉庫包含 LDM 和 LCM 版本的基礎模型的權重和管道代碼。精煉模型及其管道和修復管道將很快發佈。
🚀 快速開始
你可以根據提供的代碼示例,使用 StableMaterials 模型生成材質。具體代碼在“🧑💻 使用示例”章節中有詳細展示。
✨ 主要特性
- 半監督學習:模型使用帶註釋和未帶註釋的數據進行訓練,利用對抗訓練從大規模預訓練圖像生成模型中提煉知識。 📚
- 知識蒸餾:將使用 SDXL 模型生成的未註釋紋理樣本納入訓練過程,彌合不同數據分佈之間的差距。 🌐
- 潛在一致性:採用潛在一致性模型促進快速生成,減少生成高質量輸出所需的推理步驟。 ⚡
- 特徵滾動:在 U-Net 架構的每個卷積和注意力層引入特徵滾動技術,實現可平鋪性。 🎢
📦 安裝指南
文檔未提及安裝相關內容,故跳過此章節。
💻 使用示例
基礎用法
標準模型
from diffusers import DiffusionPipeline
from diffusers.utils import load_image
pipe = DiffusionPipeline.from_pretrained(
"gvecchio/StableMaterials",
trust_remote_code=True,
torch_dtype=torch.float16
)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
pipe = pipe.to(device)
material = pipe(
prompt="Old rusty metal bars with peeling paint",
guidance_scale=10.0,
tileable=True,
num_images_per_prompt=1,
num_inference_steps=50,
).images[0]
material = pipe(
prompt=load_image("path/to/input_image.jpg"),
guidance_scale=10.0,
tileable=True,
num_images_per_prompt=1,
num_inference_steps=50,
).images[0]
basecolor = material.basecolor
normal = material.normal
height = material.height
roughness = material.roughness
metallic = material.metallic
一致性模型
from diffusers import DiffusionPipeline, LCMScheduler, UNet2DConditionModel
from diffusers.utils import load_image
unet = UNet2DConditionModel.from_pretrained(
"gvecchio/StableMaterials",
subfolder="unet_lcm",
torch_dtype=torch.float16,
)
pipe = DiffusionPipeline.from_pretrained(
"gvecchio/StableMaterials",
trust_remote_code=True,
unet=unet,
torch_dtype=torch.float16
)
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
pipe = pipe.to(device)
material = pipe(
prompt="Old rusty metal bars with peeling paint",
guidance_scale=10.0,
tileable=True,
num_images_per_prompt=1,
num_inference_steps=4,
).images[0]
material = pipe(
prompt=load_image("path/to/input_image.jpg"),
guidance_scale=10.0,
tileable=True,
num_images_per_prompt=1,
num_inference_steps=4,
).images[0]
basecolor = material.basecolor
normal = material.normal
height = material.height
roughness = material.roughness
metallic = material.metallic
📚 詳細文檔
模型架構
🧩 基礎模型
基礎模型使用壓縮變分自編碼器(VAE)生成低分辨率(512x512)的材質貼圖,然後進行潛在擴散過程。該架構基於 LDM 範式的 MatFuse 改編,針對材質貼圖生成進行了優化,注重多樣性和高視覺保真度。 🖼️
🔑 關鍵特性
- 半監督學習:模型使用帶註釋和未帶註釋的數據進行訓練,利用對抗訓練從大規模預訓練圖像生成模型中提煉知識。 📚
- 知識蒸餾:將使用 SDXL 模型生成的未註釋紋理樣本納入訓練過程,彌合不同數據分佈之間的差距。 🌐
- 潛在一致性:採用潛在一致性模型促進快速生成,減少生成高質量輸出所需的推理步驟。 ⚡
- 特徵滾動:在 U-Net 架構的每個卷積和注意力層引入特徵滾動技術,實現可平鋪性。 🎢
🗂️ 訓練數據
該模型在 MatSynth 和 Deschaintre 等人的組合數據集上進行訓練,包括 6198 種獨特的 PBR 材質。它還包含使用各種提示從 SDXL 模型生成的 4000 個紋理 - 文本對。 🔍
🔧 侷限性
雖然 StableMaterials 表現出強大的性能,但它也有一些侷限性:
- 對於描述複雜空間關係的複雜提示,它可能會遇到困難。 🧩
- 它可能無法準確表示高度詳細的圖案或圖形。 🎨
- 它偶爾會為某些材質類型生成不正確的反射屬性。 ✨
未來的更新旨在通過納入更多樣化的訓練提示和改進模型對複雜紋理的處理來解決這些侷限性。
🔧 技術細節
文檔未提供更詳細的技術細節內容,故跳過此章節。
📄 許可證
本項目採用 OpenRAIL 許可證。
📖 引用
如果你在研究中使用了此模型,請引用以下論文:
@article{vecchio2024stablematerials,
title={StableMaterials: Enhancing Diversity in Material Generation via Semi-Supervised Learning},
author={Vecchio, Giuseppe},
journal={arXiv preprint arXiv:2406.09293},
year={2024}
}