模型简介
模型特点
模型能力
使用案例
🚀 稳定扩散图像变体模型卡片
📣 已发布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 模型卡片。

