🤗 Diffusers 是生成图像、音频,甚至是分子 3D 结构的最先进的预训练扩散模型的首选库。无论您是在寻找简单的推理解决方案还是训练您自己的扩散模型,🤗 Diffusers 都是一个支持这两者的模块化工具箱。我们的库设计重点是可用性优于性能、简单优于容易和可定制性优于抽象。
🤗 Diffusers 提供三个核心组件:
安装
我们建议在虚拟环境中从 PyPI 或 Conda 安装 🤗 Diffusers。有关安装 PyTorch 和 Flax 的更多详细信息,请参阅其官方文档。
PyTorch
使用 pip
(官方包):
pip install --upgrade diffusers[torch]
使用 conda
(由社区维护):
conda install -c conda-forge diffusers
Flax
使用 pip
(官方包):
pip install --upgrade diffusers[flax]
Apple Silicon (M1/M2) 支持
请参阅如何在 Apple Silicon 上使用 Stable Diffusion指南。
快速入门
使用 🤗 Diffusers 生成输出非常简单。要从文本生成图像,请使用 from_pretrained
方法加载任何预训练的扩散模型(在 Hub 上浏览 30,000 多个检查点):
from diffusers import DiffusionPipeline
import torch
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipeline.to("cuda")
pipeline("An image of a squirrel in Picasso style").images[0]
您还可以深入研究模型和调度器工具箱,构建您自己的扩散系统:
from diffusers import DDPMScheduler, UNet2DModel
from PIL import Image
import torch
scheduler = DDPMScheduler.from_pretrained("google/ddpm-cat-256")
model = UNet2DModel.from_pretrained("google/ddpm-cat-256").to("cuda")
scheduler.set_timesteps(50)
sample_size = model.config.sample_size
noise = torch.randn((1, 3, sample_size, sample_size), device="cuda")
input = noise
for t in scheduler.timesteps:
with torch.no_grad():
noisy_residual = model(input, t).sample
prev_noisy_sample = scheduler.step(noisy_residual, t, input).prev_sample
input = prev_noisy_sample
image = (input / 2 + 0.5).clamp(0, 1)
image = image.cpu().permute(0, 2, 3, 1).numpy()[0]
image = Image.fromarray((image * 255).round().astype("uint8"))
image
查看 快速入门,今天就开启您的扩散之旅吧!
如何浏览文档
文档 | 我可以学到什么? |
---|---|
教程 | 一个基础速成课程,学习如何使用库的最重要功能,比如使用模型和调度器构建自己的扩散系统,以及训练自己的扩散模型。 |
加载 | 如何加载和配置库的所有组件(管线、模型和调度器)以及如何使用不同的调度器的指南。 |
推理管线 | 如何使用管线进行不同推理任务、批量生成、控制生成的输出和随机性,以及如何为库贡献管线的指南。 |
优化 | 如何优化您的扩散模型以更快运行和更少内存消耗的指南。 |
训练 | 如何使用不同的训练技术为不同任务训练扩散模型的指南。 |
贡献
我们 ❤️ 来自开源社区的贡献! 如果您想为此库做出贡献,请查看我们的贡献指南。 您可以留意想要解决的问题,以便为库做出贡献。
另外,请在我们的公共 Discord 频道中打个招呼 <img alt="
使用 🧨 Diffusers 的流行库
- https://github.com/microsoft/TaskMatrix
- https://github.com/invoke-ai/InvokeAI
- https://github.com/InstantID/InstantID
- https://github.com/apple/ml-stable-diffusion
- https://github.com/Sanster/lama-cleaner
- https://github.com/IDEA-Research/Grounded-Segment-Anything
- https://github.com/ashawkey/stable-dreamfusion
- https://github.com/deep-floyd/IF
- https://github.com/bentoml/BentoML
- https://github.com/bmaltais/kohya_ss
- 以及其他超过14,000个惊人的GitHub仓库 💪
感谢您使用我们 ❤️。
致谢
该库具体化了许多不同作者的先前工作,没有他们的伟大研究和实现,这一切都是不可能的。我们特别感谢以下实现,它们在我们的开发过程中给予了帮助,如果没有它们,API不会如此完善:
- @CompVis的潜在扩散模型库,见 此处
- @hojonathanho 的原始 DDPM 实现,见 此处 以及 @pesser 翻译成 PyTorch 的极有用实现,见 此处
- @ermongroup 的 DDIM 实现,见 此处
- @yang-song 的 Score-VE 和 Score-VP 实现,见 此处
我们还要感谢 @heejkoo 对扩散模型论文、代码和资源的非常有用的概述,见 此处,以及 @crowsonkb 和 @rromb 对有用讨论和见解的贡献。
引用
@misc{von-platen-etal-2022-diffusers,
author = {Patrick von Platen and Suraj Patil and Anton Lozhkov and Pedro Cuenca and Nathan Lambert and Kashif Rasul and Mishig Davaadorj and Dhruv Nair and Sayak Paul and William Berman and Yiyi Xu and Steven Liu and Thomas Wolf},
title = {Diffusers: State-of-the-art diffusion models},
year = {2022},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/huggingface/diffusers}}
}