得益于与 Stability AI 和 Runway 的合作,稳定扩散得以实现,并建立在我们之前的工作基础上:
使用潜在扩散模型的高分辨率图像合成
罗宾·隆巴赫*、安德烈亚斯·布拉特曼*、多米尼克·洛伦茨、帕特里克·埃瑟、比约恩·奥默
CVPR '22 口头 | GitHub | arXiv |项目页面
稳定扩散是一种潜在的文本到图像扩散模型。感谢 Stability AI 的慷慨计算捐赠和 LAION 的支持,我们能够在 LAION-5B 数据库子集的 512x512 图像上训练潜在扩散模型。与 Google 的 Imagen 类似,该模型使用冻结的 CLIP ViT-L/14 文本编码器来根据文本提示调节模型。该模型具有 860M UNet 和 123M 文本编码器,相对轻量级,并且在至少具有 10GB VRAM 的 GPU 上运行。请参阅下面的本节和型号卡。
可以使用以下命令创建并激活名为ldm
的合适 conda 环境:
conda env create -f environment.yaml
conda activate ldm
您还可以通过运行来更新现有的潜在扩散环境
conda install pytorch torchvision -c pytorch
pip install transformers==4.19.2 diffusers invisible-watermark
pip install -e .
Stable Diffusion v1 是指模型架构的特定配置,它使用下采样因子 8 自动编码器以及 860M UNet 和 CLIP ViT-L/14 文本编码器来进行扩散模型。该模型在 256x256 图像上进行预训练,然后在 512x512 图像上进行微调。
注意:稳定扩散 v1 是通用的文本到图像扩散模型,因此反映了其训练数据中存在的偏差和(错误)概念。有关训练过程和数据以及模型预期用途的详细信息可以在相应的模型卡中找到。
这些权重可通过 Hugging Face 的 CompVis 组织获得,并获得许可证,该许可证包含特定的基于使用的限制,以防止模型卡告知的误用和伤害,但在其他方面仍然是允许的。虽然许可条款允许商业使用,但我们不建议在没有额外安全机制和考虑的情况下将提供的权重用于服务或产品,因为权重存在已知的限制和偏差,并且对安全和道德部署进行研究通用文本到图像模型是一项持续的工作。权重是研究成果,应如此对待。
CreativeML OpenRAIL M 许可证是 Open RAIL M 许可证,改编自 BigScience 和 RAIL Initiative 在负责任的 AI 许可领域联合开展的工作。另请参阅有关我们的许可证所基于的 BLOOM Open RAIL 许可证的文章。
我们目前提供以下检查点:
sd-v1-1.ckpt
:laion2B-en 上分辨率256x256
时有 237k 步。在 laion 高分辨率上,分辨率512x512
下有 194k 个步骤(来自 LAION-5B 的 170M 示例,分辨率>= 1024x1024
)。sd-v1-2.ckpt
:从sd-v1-1.ckpt
恢复。 laion-aesthetics v2 5+ 上分辨率512x512
的 515k 步(laion2B-en 的子集,估计美学分数> 5.0
,另外过滤到原始尺寸>= 512x512
的图像,估计水印概率< 0.5
。水印估计来自 LAION-5B 元数据,使用 LAION-Aesthetics Predictor 估计美学分数V2)。sd-v1-3.ckpt
:从sd-v1-2.ckpt
恢复。在“laion-aesthetics v2 5+”上以512x512
分辨率执行 195k 步,并丢弃 10% 的文本调节以改进无分类器引导采样。sd-v1-4.ckpt
:从sd-v1-2.ckpt
恢复。在“laion-aesthetics v2 5+”上以512x512
分辨率执行 225k 步,并删除 10% 的文本调节以改进无分类器引导采样。使用不同的无分类器指导尺度(1.5、2.0、3.0、4.0、5.0、6.0、7.0、8.0)和 50 个 PLMS 采样步骤进行的评估显示了检查点的相对改进:
稳定扩散是一种以 CLIP ViT-L/14 文本编码器的(非池化)文本嵌入为条件的潜在扩散模型。我们提供了用于采样的参考脚本,但也存在扩散器集成,我们期望看到更活跃的社区开发。
我们提供了一个参考采样脚本,其中包含
获得stable-diffusion-v1-*-original
权重后,将它们链接起来
mkdir -p models/ldm/stable-diffusion-v1/
ln -s <path/to/model.ckpt> models/ldm/stable-diffusion-v1/model.ckpt
并采样
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
默认情况下,它使用指导比例--scale 7.5
,即 Katherine Crowson 的 PLMS 采样器实现,并以 50 个步骤渲染大小为 512x512 的图像(经过训练)。下面列出了所有支持的参数(输入python scripts/txt2img.py --help
)。
usage: txt2img.py [-h] [--prompt [PROMPT]] [--outdir [OUTDIR]] [--skip_grid] [--skip_save] [--ddim_steps DDIM_STEPS] [--plms] [--laion400m] [--fixed_code] [--ddim_eta DDIM_ETA]
[--n_iter N_ITER] [--H H] [--W W] [--C C] [--f F] [--n_samples N_SAMPLES] [--n_rows N_ROWS] [--scale SCALE] [--from-file FROM_FILE] [--config CONFIG] [--ckpt CKPT]
[--seed SEED] [--precision {full,autocast}]
optional arguments:
-h, --help show this help message and exit
--prompt [PROMPT] the prompt to render
--outdir [OUTDIR] dir to write results to
--skip_grid do not save a grid, only individual samples. Helpful when evaluating lots of samples
--skip_save do not save individual samples. For speed measurements.
--ddim_steps DDIM_STEPS
number of ddim sampling steps
--plms use plms sampling
--laion400m uses the LAION400M model
--fixed_code if enabled, uses the same starting code across samples
--ddim_eta DDIM_ETA ddim eta (eta=0.0 corresponds to deterministic sampling
--n_iter N_ITER sample this often
--H H image height, in pixel space
--W W image width, in pixel space
--C C latent channels
--f F downsampling factor
--n_samples N_SAMPLES
how many samples to produce for each given prompt. A.k.a. batch size
--n_rows N_ROWS rows in the grid (default: n_samples)
--scale SCALE unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
--from-file FROM_FILE
if specified, load prompts from this file
--config CONFIG path to config which constructs model
--ckpt CKPT path to checkpoint of model
--seed SEED the seed (for reproducible sampling)
--precision {full,autocast}
evaluate at this precision
注意:所有 v1 版本的推理配置均设计为与仅 EMA 检查点一起使用。因此,在配置中设置了use_ema=False
,否则代码将尝试从非 EMA 权重切换到 EMA 权重。如果您想检查 EMA 与无 EMA 的效果,我们提供包含两种类型权重的“完整”检查点。对于这些, use_ema=False
将加载并使用非 EMA 权重。
下载和采样稳定扩散的一个简单方法是使用扩散器库:
# make sure you're logged in with `huggingface-cli login`
from torch import autocast
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline . from_pretrained (
"CompVis/stable-diffusion-v1-4" ,
use_auth_token = True
). to ( "cuda" )
prompt = "a photo of an astronaut riding a horse on mars"
with autocast ( "cuda" ):
image = pipe ( prompt )[ "sample" ][ 0 ]
image . save ( "astronaut_rides_horse.png" )
通过使用 SDEdit 首次提出的扩散去噪机制,该模型可用于不同的任务,例如文本引导的图像到图像的转换和升级。与 txt2img 采样脚本类似,我们提供了一个使用稳定扩散进行图像修改的脚本。
下面描述了一个将 Pinta 中的粗略草图转换为详细艺术品的示例。
python scripts/img2img.py --prompt "A fantasy landscape, trending on artstation" --init-img <path-to-img.jpg> --strength 0.8
此处,强度是 0.0 到 1.0 之间的值,用于控制添加到输入图像的噪声量。接近 1.0 的值允许存在大量变化,但也会生成在语义上与输入不一致的图像。请参阅以下示例。
输入
输出
例如,此过程也可用于从基本模型升级样本。
我们的扩散模型代码库很大程度上建立在 OpenAI 的 ADM 代码库和 https://github.com/lucidrains/denoising-diffusion-pytorch 之上。感谢开源!
Transformer 编码器的实现来自 lucidrains 的 x-transformers。
@misc{rombach2021highresolution,
title={High-Resolution Image Synthesis with Latent Diffusion Models},
author={Robin Rombach and Andreas Blattmann and Dominik Lorenz and Patrick Esser and Björn Ommer},
year={2021},
eprint={2112.10752},
archivePrefix={arXiv},
primaryClass={cs.CV}
}