模型概述
模型特點
模型能力
使用案例
🚀 穩定擴散圖像變體模型卡片
📣 已發佈V2模型,並且模糊問題已修復! 📣
🧨🎉 🤗 Diffusers 現在原生支持圖像變體功能! 🎉🧨
🚀 快速開始
請確保你使用的 Diffusers 版本 >=0.8.0(對於舊版本,請參閱本模型卡片底部的舊說明)。
from diffusers import StableDiffusionImageVariationPipeline
from PIL import Image
device = "cuda:0"
sd_pipe = StableDiffusionImageVariationPipeline.from_pretrained(
"lambdalabs/sd-image-variations-diffusers",
revision="v2.0",
)
sd_pipe = sd_pipe.to(device)
im = Image.open("path/to/image.jpg")
tform = transforms.Compose([
transforms.ToTensor(),
transforms.Resize(
(224, 224),
interpolation=transforms.InterpolationMode.BICUBIC,
antialias=False,
),
transforms.Normalize(
[0.48145466, 0.4578275, 0.40821073],
[0.26862954, 0.26130258, 0.27577711]),
])
inp = tform(im).to(device).unsqueeze(0)
out = sd_pipe(inp, guidance_scale=3)
out["images"][0].save("result.jpg")
✨ 主要特性
- V2版本:此版本的 Stable Diffusion 是從 CompVis/stable-diffusion-v1-4-original 微調而來,可接受 CLIP 圖像嵌入而非文本嵌入,從而能夠使用 Stable Diffusion 創建類似於 DALLE - 2 的“圖像變體”。該版本的權重已移植到 huggingface Diffusers,使用 Diffusers 庫需要 Lambda Diffusers 倉庫。
- 訓練優化:該模型分兩個階段進行訓練,且訓練時間比原始變體模型更長,與原始版本相比,圖像質量更好,CLIP 評分相似度更高。
💻 使用示例
基礎用法
from diffusers import StableDiffusionImageVariationPipeline
from PIL import Image
device = "cuda:0"
sd_pipe = StableDiffusionImageVariationPipeline.from_pretrained(
"lambdalabs/sd-image-variations-diffusers",
revision="v2.0",
)
sd_pipe = sd_pipe.to(device)
im = Image.open("path/to/image.jpg")
tform = transforms.Compose([
transforms.ToTensor(),
transforms.Resize(
(224, 224),
interpolation=transforms.InterpolationMode.BICUBIC,
antialias=False,
),
transforms.Normalize(
[0.48145466, 0.4578275, 0.40821073],
[0.26862954, 0.26130258, 0.27577711]),
])
inp = tform(im).to(device).unsqueeze(0)
out = sd_pipe(inp, guidance_scale=3)
out["images"][0].save("result.jpg")
高級用法
正確調整大小的重要性
由於訓練期間的一點疏忽,該模型期望輸入的是未進行抗鋸齒處理的調整大小後的圖像。事實證明,這會產生很大的影響,並且在推理過程中以相同的方式調整大小非常重要。當將 PIL 圖像傳遞給 Diffusers 管道時,調整大小時會應用抗鋸齒處理,因此最好輸入一個根據上述示例中的變換手動準備的張量!
以下是調整大小時未使用(頂部)和使用(底部)抗鋸齒處理生成的圖像示例。(輸入圖像為 此圖像)
V1 與 V2 對比
以下是 V1 和 V2 的示例,版本二經過更精心和更長時間的訓練,詳情如下。V2(頂部)與 V1(底部)對比
輸入圖像:
需要注意的是,由於 V2 訓練時間更長,它似乎記住了訓練數據中的一些常見圖像。例如,以《戴珍珠耳環的少女》為例,現在幾乎能完美重現原始圖像,而不是創建變體。你可以通過指定 revision="v1.0"
始終使用 V1 版本。
以《戴珍珠耳環的少女》為輸入的 V2 輸出(引導比例 = 3)
🔧 技術細節
訓練過程
此模型是從 Stable Diffusion v1 - 3 微調而來,其中文本編碼器已被圖像編碼器取代。訓練過程與 Stable Diffusion 相同,不同之處在於圖像通過 ViT - L/14 圖像編碼器進行編碼,包括到 CLIP 共享嵌入空間的最終投影層。該模型在 LAION improved aesthetics 6plus 上進行訓練。
屬性 | 詳情 |
---|---|
硬件 | 8 x A100 - 40GB GPU(由 Lambda GPU Cloud 提供) |
優化器 | AdamW |
階段 1 | 僅微調 Stable Diffusion v1.4 模型的 CrossAttention 層權重。步驟:46,000;批次:批次大小 = 4,GPU = 8,梯度累積 = 4,總批次大小 = 128;學習率:在 10,000 步內熱身至 1e - 5,然後保持不變 |
階段 2 | 從階段 1 繼續訓練整個 unet。步驟:50,000;批次:批次大小 = 4,GPU = 8,梯度累積 = 5,總批次大小 = 160;學習率:在 5,000 步內熱身至 1e - 5,然後保持不變 |
訓練使用了 原始 Stable Diffusion 訓練代碼的修改版本。
📚 詳細文檔
用途
直接使用
該模型僅用於研究目的。可能的研究領域和任務包括:
- 安全部署有可能生成有害內容的模型。
- 探究和理解生成模型的侷限性和偏差。
- 生成藝術作品並用於設計和其他藝術過程。
- 在教育或創意工具中的應用。
- 生成模型的研究。
排除的用途如下所述。
濫用、惡意使用和超出範圍的使用
該模型不應被用於故意創建或傳播會給人們造成敵對或疏離環境的圖像。這包括生成人們可預見會感到不安、痛苦或冒犯的圖像,或傳播歷史或當前刻板印象的內容。
超出範圍的使用
該模型並非用於對人物或事件進行事實或真實的呈現,因此使用該模型生成此類內容超出了該模型的能力範圍。
濫用和惡意使用
使用該模型生成對個人殘酷的內容是對該模型的濫用。這包括但不限於:
- 生成對人或其環境、文化、宗教等有貶低、非人化或其他有害的表現形式。
- 故意推廣或傳播歧視性內容或有害的刻板印象。
- 在未經個人同意的情況下冒充他人。
- 未經可能看到該內容的人的同意而生成色情內容。
- 虛假和誤導性信息。
- 嚴重暴力和血腥場面的表現形式。
- 違反使用條款分享受版權保護或有許可的材料。
- 違反使用條款分享對受版權保護或有許可的材料進行修改後的內容。
侷限性和偏差
侷限性
- 該模型無法實現完美的照片級真實感。
- 該模型無法渲染清晰可讀的文本。
- 該模型在涉及組合性的更困難任務上表現不佳,例如渲染與“藍色球體上的紅色立方體”對應的圖像。
- 面部和人物總體上可能無法正確生成。
- 該模型主要使用英文標題進行訓練,在其他語言中的效果不佳。
- 模型的自動編碼部分存在信息損失。
- 該模型在大規模數據集 LAION - 5B 上進行訓練,該數據集包含成人內容,在沒有額外安全機制和考慮的情況下不適合用於產品。
- 未使用額外措施對數據集進行去重。因此,我們觀察到模型對訓練數據中重複的圖像有一定程度的記憶。可以在 https://rom1504.github.io/clip-retrieval/ 上搜索訓練數據,以幫助檢測被記住的圖像。
偏差
雖然圖像生成模型的能力令人印象深刻,但它們也可能強化或加劇社會偏差。Stable Diffusion v1 在 LAION - 2B(en) 的子集上進行訓練,該子集主要由英文描述的圖像組成。使用其他語言的社區和文化的文本和圖像可能沒有得到充分考慮。這影響了模型的整體輸出,因為白人和西方文化通常被設定為默認。此外,該模型使用非英文提示生成內容的能力明顯低於使用英文提示的情況。
安全模塊
該模型的預期用途是與 Diffusers 中的 安全檢查器 一起使用。該檢查器通過將模型輸出與已知的硬編碼 NSFW 概念進行比對來工作。這些概念被故意隱藏,以降低逆向工程此過濾器的可能性。具體來說,檢查器在圖像生成後,在 CLIPModel
的嵌入空間中比較有害概念的類別概率。這些概念與生成的圖像一起傳入模型,並與每個 NSFW 概念的手動設計權重進行比較。
舊說明
如果你使用的 Diffusers 版本 <0.8.0,則沒有 StableDiffusionImageVariationPipeline
。在這種情況下,你需要結合 lambda - diffusers 倉庫使用較舊的版本 (2ddbd90b14bc5892c19925b15185e561bc8e5d0a
)。
首先克隆 Lambda Diffusers 並安裝所有依賴項(在以下示例的虛擬環境中):
git clone https://github.com/LambdaLabsML/lambda-diffusers.git
cd lambda-diffusers
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
然後運行以下 Python 代碼:
from pathlib import Path
from lambda_diffusers import StableDiffusionImageEmbedPipeline
from PIL import Image
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
pipe = StableDiffusionImageEmbedPipeline.from_pretrained(
"lambdalabs/sd-image-variations-diffusers",
revision="2ddbd90b14bc5892c19925b15185e561bc8e5d0a",
)
pipe = pipe.to(device)
im = Image.open("your/input/image/here.jpg")
num_samples = 4
image = pipe(num_samples*[im], guidance_scale=3.0)
image = image["sample"]
base_path = Path("outputs/im2im")
base_path.mkdir(exist_ok=True, parents=True)
for idx, im in enumerate(image):
im.save(base_path/f"{idx:06}.jpg")
本模型卡片由 Justin Pinkney 編寫,並基於 Stable Diffusion 模型卡片。

