本文档介绍了如何使用 Stable Diffusion 模型进行文本到图像的生成。它涵盖了使用 txt2img.py 脚本将文本提示转换为图像的过程,解释了命令行选项,并详细介绍了底层的技术流程。有关使用文本提示修改现有图像的信息,请参阅 图像到图像修改。
来源: README.md75-78 README.md85-101
Stable Diffusion的文本到图像生成通过使用条件化于CLIP ViT-L/14文本编码器的文本嵌入的潜在扩散模型,将文本描述转换为高质量图像。该模型在压缩的潜在空间中运行,与像素空间扩散模型相比,计算效率更高。
来源: README.md14-20 README.md79-80
文本到图像生成的主要界面是位于 scripts 目录中的 txt2img.py 脚本。最基本的使用方法是提供文本提示来生成图像。
默认情况下,这将
outputs/txt2img-samples 目录中来源: README.md100-104 scripts/txt2img.py98-235
txt2img.py 脚本接受许多参数来定制生成过程。
| 参数 | 描述 | 默认 |
|---|---|---|
--prompt | 用于图像生成的文本描述 | "一幅描绘病毒怪物弹吉他的画" |
--outdir | 生成图像的输出目录 | "outputs/txt2img-samples" |
--ddim_steps | 去噪步数 | 50 |
--plms | 使用 PLMS 采样器而非 DDIM | 否 |
--dpm_solver | 使用 DPM-Solver 采样器 | 否 |
--H | 图像高度(像素) | 512 |
--W | 图像宽度(像素) | 512 |
--scale | 无条件引导比例 | 7.5 |
--seed | 用于可重现性的随机种子 | 42 |
--n_samples | 每个提示的图像数量(批次大小) | 3 |
--n_iter | 批次迭代次数 | 2 |
--from-file | 从文本文件中加载提示 | None |
--fixed_code | 为所有样本使用相同的起始噪声 | 否 |
--skip_grid | 跳过保存所有图像的网格 | 否 |
--skip_save | 跳过保存单个图像 | 否 |
来源: scripts/txt2img.py98-235 README.md107-140
下图说明了 txt2img.py 的核心代码执行流程。
该脚本支持三种不同的采样器,每种都有不同的特性。
来源: scripts/txt2img.py251-256 README.md103
文本到图像的扩散模型使用无分类器引导来提高对文本提示的遵循度。实现方式计算
ε_θ(x_t, c) = ε_θ(x_t, ∅) + scale * (ε_θ(x_t, c) - ε_θ(x_t, ∅))
其中
ε_θ(x_t, c) 为带有文本条件的噪声预测ε_θ(x_t, ∅) 为无条件(空提示)的噪声预测scale 为引导比例(默认值:7.5)这在代码中通过生成有条件和无条件的预测,然后根据比例参数在它们之间进行插值来实现。
来源: scripts/txt2img.py296-301 scripts/txt2img.py200-204
check_safety() 函数使用 Stable Diffusion 安全检查模型来检测潜在的不安全内容。对于检测到的不安全图像,它会用安全的替代图像替换它们。
来源: scripts/txt2img.py88-95 scripts/txt2img.py317
所有生成的图像都会添加一个不可见的水印,以帮助识别它们是 AI 生成的内容。这是通过 imwatermark 库中的 WatermarkEncoder 类来实现的。
来源: scripts/txt2img.py69-74 scripts/txt2img.py261-264
要从存储在文本文件中的多个提示生成图像
其中 prompts.txt 文件每行包含一个提示。
要确保结果可重现,请设置一个特定的种子。
要生成同一构图的变体,请使用 --fixed_code 标志。
为了获得更高质量(但生成速度较慢)的生成效果
为了更快的(但质量可能较低的)生成效果
来源: README.md85-101 scripts/txt2img.py293-343
Stable Diffusion 的文本到图像生成功能实现在 txt2img.py 脚本中,它提供了一种灵活强大的方式,可以根据文本描述生成图像。该过程包括文本编码、引导式潜在扩散、解码、安全检查和水印。通过调整各种参数,用户可以控制生成图像的质量、风格和内容。