Diffusers 有哪些新功能?🎨
一个半月前,我们发布了 `diffusers`,这是一个为跨模态扩散模型提供模块化工具箱的库。几周后,我们发布了对 Stable Diffusion 的支持,这是一种高质量的文本到图像模型,并提供免费演示供所有人试用。除了耗费大量 GPU 外,在过去三周,团队决定为该库添加一到两个新功能,我们希望社区会喜欢!这篇博客文章概述了 `diffusers` 0.3 版本中的新功能!请记得给 GitHub 仓库 一个 ⭐。
图像到图像 (Image to Image) 流水线
最受欢迎的功能之一是图像到图像生成。这个流水线允许您输入一张图像和一个提示,它将根据这些输入生成一张图像!
我们来看看基于官方 Colab notebook 的一些代码。
from diffusers import StableDiffusionImg2ImgPipeline
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4",
revision="fp16",
torch_dtype=torch.float16,
use_auth_token=True
)
# Download an initial image
# ...
init_image = preprocess(init_img)
prompt = "A fantasy landscape, trending on artstation"
images = pipe(prompt=prompt, init_image=init_image, strength=0.75, guidance_scale=7.5, generator=generator)["sample"]
没有时间写代码?不用担心,我们还创建了一个 空间演示,您可以直接在那里试用
文本反转 (Textual Inversion)
文本反转 (Textual Inversion) 允许您仅使用 3-5 个样本,即可在您自己的图像上个性化 Stable Diffusion 模型。通过此工具,您可以训练一个关于概念的模型,然后将该概念与社区中的其他人分享!
短短几天内,社区就分享了 200 多个概念!快来看看吧!
- 包含概念的组织。
- Navigator Colab:可视化浏览和使用社区创建的 150 多个概念。
- 训练 Colab:教 Stable Diffusion 一个新概念,并与社区分享。
- 推理 Colab:使用学习到的概念运行 Stable Diffusion。
实验性修复 (Inpainting) 流水线
修复功能允许您提供一张图像,然后选择图像中的一个区域(或提供一个蒙版),并使用 Stable Diffusion 替换该蒙版区域。这是一个示例:

您可以尝试一个极简的 Colab notebook 或查看下面的代码。演示即将推出!
from diffusers import StableDiffusionInpaintPipeline
pipe = StableDiffusionInpaintPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4",
revision="fp16",
torch_dtype=torch.float16,
use_auth_token=True
).to(device)
images = pipe(
prompt=["a cat sitting on a bench"] * 3,
init_image=init_image,
mask_image=mask_image,
strength=0.75,
guidance_scale=7.5,
generator=None
).images
请注意,这是实验性的,因此仍有改进空间。
针对小型 GPU 的优化
经过一些改进,扩散模型可以占用更少的显存。🔥 例如,Stable Diffusion 只占用 3.2GB!这会产生完全相同的结果,但速度会牺牲 10%。以下是如何使用这些优化:
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4",
revision="fp16",
torch_dtype=torch.float16,
use_auth_token=True
)
pipe = pipe.to("cuda")
pipe.enable_attention_slicing()
这非常令人兴奋,因为它将进一步降低使用这些模型的门槛!
Mac OS 上的 Diffusers
🍎 没错!又一个广受好评的功能发布了!请阅读官方文档中的完整说明(包括性能比较、规格等)。
使用 PyTorch mps 设备,拥有 M1/M2 硬件的用户可以运行 Stable Diffusion 推理。🤯 这对用户来说只需要最少的设置,快来试试吧!
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=True)
pipe = pipe.to("mps")
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]
实验性 ONNX 导出器和流水线
新的实验性流水线允许用户在任何支持 ONNX 的硬件上运行 Stable Diffusion。这是一个如何使用它的示例(请注意,正在使用 `onnx` 修订版):
from diffusers import StableDiffusionOnnxPipeline
pipe = StableDiffusionOnnxPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4",
revision="onnx",
provider="CPUExecutionProvider",
use_auth_token=True,
)
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]
另外,您也可以直接使用导出脚本将您的 SD 检查点转换为 ONNX。
python scripts/convert_stable_diffusion_checkpoint_to_onnx.py --model_path="CompVis/stable-diffusion-v1-4" --output_path="./stable_diffusion_onnx"
新文档
以上所有功能都非常酷。作为开源库的维护者,我们深知高质量文档的重要性,它能让任何人尽可能轻松地试用该库。
💅 因此,我们进行了一次文档冲刺,非常高兴发布我们的文档的第一个版本。这是第一个版本,所以我们计划添加许多内容(并且始终欢迎贡献!)。
文档的一些亮点
社区
在我们进行上述工作的同时,社区也没有闲着!以下是一些(尽管不全面)已完成工作的亮点:
Stable Diffusion 视频
通过探索潜在空间并在文本提示之间进行形态转换,使用 Stable Diffusion 创建 🔥 视频。您可以:
- 梦想同一提示的不同版本
- 在不同的提示之间进行形态转换
Stable Diffusion Videos 工具可通过 pip 安装,附带 Colab notebook 和 Gradio notebook,并且非常易于使用!
这里是一个例子
from stable_diffusion_videos import walk
video_path = walk(['a cat', 'a dog'], [42, 1337], num_steps=3, make_video=True)
Diffusers Interpret
Diffusers interpret 是一个基于 `diffusers` 构建的可解释性工具。它具有以下酷炫功能:
- 查看扩散过程中的所有图像
- 分析提示中每个 token 如何影响生成
- 如果您想了解图像的某个部分,可以在指定的边界框内进行分析
# pass pipeline to the explainer class
explainer = StableDiffusionPipelineExplainer(pipe)
# generate an image with `explainer`
prompt = "Corgi with the Eiffel Tower"
output = explainer(
prompt,
num_inference_steps=15
)
output.normalized_token_attributions # (token, attribution_percentage)
#[('corgi', 40),
# ('with', 5),
# ('the', 5),
# ('eiffel', 25),
# ('tower', 25)]
日语 Stable Diffusion
名字说明了一切!JSD 的目标是训练一个也能捕捉文化、身份和独特表达信息的模型。它使用 1 亿张带有日语字幕的图片进行训练。您可以在模型卡片中阅读有关模型训练方式的更多信息
Waifu Diffusion
Waifu Diffusion 是一个经过微调的 SD 模型,用于生成高质量的动漫图像。

交叉注意力控制
交叉注意力控制允许通过修改扩散模型的注意力图来精细控制提示。您可以做一些很酷的事情:
- 替换提示中的目标(例如,将 cat 替换为 dog)
- 减少或增加提示中单词的重要性(例如,如果您希望“岩石”获得较少的注意力)
- 轻松注入样式
以及更多!请查看仓库。
可复用种子
Stable Diffusion 最令人印象深刻的早期演示之一是种子的重用以调整图像。其思想是使用感兴趣图像的种子,并使用不同的提示生成新图像。这会产生一些很酷的结果!请查看 Colab
感谢阅读!
希望您阅读愉快!请记得在我们的GitHub 仓库中给我们点赞,并加入Hugging Face Discord 服务器,我们那里有一个专门讨论扩散模型的频道。那里会分享库的最新消息!
欢迎随时提出功能请求和错误报告!如果没有如此优秀的社区,这一切都不可能实现。