如何在本地运行稳定扩散模型

Stable Diffusion 是一个文本到图像的模型,具有最近发布的开源权重。在这个简单的教程中,了解如何生成仅给出描述的场景图像。

如何在本地运行稳定扩散模型
在线工具推荐:Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器

DALL-E 2Imagen 之后,新的深度学习模型 Stable Diffusion 标志着文本到图像领域的巨大飞跃。本月早些时候发布的 Stable Diffusion 承诺通过在消费级 GPU 上运行足够高效,使文本条件图像生成民主化。就在本周一,Stable Diffusion 检查点首次发布,这意味着现在,您只需几句话和几分钟的时间即可生成如下图像。

本文将向您展示如何在 GPU 和 CPU 上安装和运行 Stable Diffusion,以便您可以开始生成自己的映像。让我们开始吧!

想了解 Stable Diffusion 的工作原理吗?

查看我们关于物理学如何推进生成式 AI 的文章,直观地解释 Stable Diffusion 等扩散模型。

在 Colab 中使用 Stable Diffusion

在我们了解如何在本地安装和运行 Stable Diffusion 之前,您可以查看下面的 Colab 笔记本,以了解如何在非本地使用 Stable Diffusion。请注意,您将需要 Colab Pro 才能生成新图像,因为 Colab 的免费版本的 VRAM 略小,无法进行采样。

Colab (GPU) 中的稳定扩散

如果您没有 Colab Pro,您也可以在 Colab 的 CPU 上运行 Stable Diffusion,但请注意,图像生成将花费相对较长的时间(8-12 分钟):

Colab (CPU) 中的稳定扩散

您还可以在 YouTube 上查看我们的稳定扩散教程,了解使用 GPU 笔记本的演练。

如何安装 Stable Diffusion (GPU)

你将需要一个基于 UNIX 的操作系统来学习本教程,因此,如果你有一台 Windows 计算机,请考虑使用虚拟机WSL2

第 1 步:安装 Python

首先,通过在终端中键入内容来检查系统上是否安装了 Python。如果返回 Python 版本,请继续执行下一步。否则,请使用python --version

sudo apt-get update 
yes | sudo apt-get install python3.8

第 2 步:安装 Miniconda

接下来,我们需要确保安装了包/环境管理器 conda。进入终端。如果返回 conda 版本,请继续执行下一步conda --version

否则,请转到 conda 网站,下载并运行适用于您的 Python 版本和操作系统的 Miniconda 安装程序。对于 Python3.8,您可以使用以下命令下载并运行安装程序:

wget https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-Linux-x86_64.sh bash Miniconda3-py38_4.12.0-Linux-x86_64.sh

按住 Enter 键以通过许可证,然后在出现提示时键入“yes”以继续。接下来,按 Enter 确认安装位置,然后在询问安装程序是否应初始化 Miniconda 时键入“yes”。最后,关闭终端,然后打开一个新终端,在其中安装 Stable Diffusion。

第 3 步:克隆稳定的扩散存储库

现在我们需要克隆 Stable Diffusion 存储库。在终端中,执行以下命令:

git clone https://github.com/CompVis/stable-diffusion.git 
cd stable-diffusion/

如果您没有 git,则需要使用 .在克隆存储库之前,请确保阅读并接受 Stable Diffusion 许可证sudo apt install git

步骤 4:创建 Conda 环境

接下来,我们需要创建一个 conda 环境,其中包含运行 Stable Diffusion 所需的所有包。执行以下命令以创建并激活此环境,名为ldm

conda env create -f environment.yaml 
conda activate ldm

第 5 步:下载稳定的扩散砝码

现在,我们正在适当的环境中使用 Stable Diffusion,我们需要下载运行它所需的权重。如果您尚未阅读并接受 Stable Diffusion 许可证,请务必立即阅读并接受。已经发布了几个 Stable Diffusion 检查点版本。较高的版本号已在更多数据上进行了训练,并且通常比较低的版本号性能更好。我们将使用检查点 v1.4。使用以下命令下载权重:

curl https://f004.backblazeb2.com/file/aai-blog-files/sd-v1-4.ckpt > sd-v1-4.ckpt

这就是我们开始使用 Stable Diffusion 所需的所有设置!请继续阅读,了解如何使用模型生成图像。

如何生成具有稳定扩散 (GPU) 的图像

要使用 Stable Diffusion 生成图像,请打开终端并导航到目录。通过执行命令确保您处于正确的环境中。stable-diffusionconda activate ldm

若要生成映像,请运行以下命令:

python scripts/txt2img.py --prompt "YOUR-PROMPT-HERE" --plms --ckpt sd-v1-4.ckpt --skip_grid --n_samples 1

故障 排除

替换为要为其生成图像的标题的位置(保留引号)。在提示“蜥蜴骑滑雪板穿越太空的逼真蒸汽波图像”的情况下运行此命令将输出以下图像:YOUR-PROMPT-HERE

上图是在 GCP 中使用 Ubuntu 18.04 VM 和 NVIDIA Tesla K80 在大约一分钟内生成的。

脚本选项

您可以使用多个命令行参数自定义此脚本,以根据需要定制结果。让我们来看看一些可能会派上用场的:

  1. --prompt后跟引号中的句子将指定为其生成图像的提示。默认值为“弹吉他的病毒怪物的画作”。
  2. --from-file指定用于为其生成图像的提示文件的 FilePath。
  3. --ckpt后跟一个路径,指定要使用的模型检查点。缺省值为 。models/ldm/stable-diffusion-v1/model.ckpt
  4. --outdir后跟路径将指定要保存生成图像的输出目录。缺省值为 。outputs/txt2img-samples
  5. --skip_grid将跳过创建合并的图像。
  6. --ddim_steps后跟一个整数,指定扩散过程中的采样步骤数。增加此数字将增加计算时间,但可能会改善结果。默认值为 50。
  7. --n_samples后跟一个整数指定每个给定提示要生成的样本数(批处理大小)。默认值为 3。
  8. --n_iter后跟一个整数,指定运行采样循环的次数。实际上与 相同,但如果遇到 OOM 错误,请使用它。有关说明,请参阅源代码。默认值为 2。--n_samples
  9. --H后跟一个整数,指定生成图像的高度(以像素为单位)。默认值为 512。
  10. --W后跟一个整数,指定生成图像的宽度(以像素为单位)。默认值为 512。
  11. --scale后跟浮点数指定要使用的指导比例。默认值为 7.5
  12. --seed后跟一个整数允许设置随机种子(以获得可重现的结果)。默认值为 42。

您可以在文件中看到具有默认值的可能参数的完整列表。现在,让我们看到使用这些可选参数的更复杂的生成提示。txt2img.py

在目录中,创建一个名为 .创建多个提示,文件的每一行一个提示。例如:stable-diffusionprompts.txt

现在,在终端的目录中,运行stable-diffusion

python scripts/txt2img.py \
--from-file prompts.txt \
--ckpt sd-v1-4.ckpt \
--outdir generated-images \
--skip_grid \
--ddim_steps 100 \
--n_iter 3 \
--H 256 \
--W 512 \
--n_samples 3 \
--scale 8.0 \
--seed 119

每个标题的两个结果图像可以在下面看到。上面的命令旨在用作使用更多命令行参数的示例,而不是最佳参数的示例。一般来说,经验发现较大的图像质量更高,图像/标题相似度更高,较低的引导比例可能会产生更好的结果。继续阅读下一节,了解有关改善稳定扩散结果的更多信息。

如何安装 Stable Diffusion (CPU)

第 1 步:安装 Python

首先,通过在终端中键入内容来检查系统上是否安装了 Python。如果返回 Python 版本,请继续执行下一步。否则,请使用python --version

sudo apt-get update 
yes | sudo apt-get install python3.8

第 2 步:下载存储库

现在我们需要克隆 Stable Diffusion 存储库。我们将使用一个可以容纳 CPU 推理的 fork。在终端中,执行以下命令:

git clone https://github.com/bes-dev/stable_diffusion.openvino.git 
cd stable_diffusion.openvino

如果您没有 git,则需要使用 .在克隆存储库之前,请确保阅读并接受 Stable Diffusion 许可证sudo apt install git

第 3 步:安装要求

安装所有必要的要求

pip install -r requirements.txt

请注意,Scipy 版本 1.9.0 是列出的要求,但它与旧版本的 python 不兼容。您可能需要通过编辑来更改 Scipy 版本,例如 在运行上述命令之前。requirements.txtscipy==1.7.3

第 4 步:下载稳定的扩散砝码

现在,我们正在适当的环境中使用 Stable Diffusion,我们需要下载运行它所需的权重。如果您尚未阅读并接受 Stable Diffusion 许可证,请务必立即阅读并接受。已经发布了几个 Stable Diffusion 检查点版本。较高的版本号已在更多数据上进行了训练,并且通常比较低的版本号性能更好。我们将使用检查点 v1.4。使用以下命令下载权重:

curl https://f004.backblazeb2.com/file/aai-blog-files/sd-v1-4.ckpt > sd-v1-4.ckpt

这就是我们开始使用 Stable Diffusion 所需的所有设置!请继续阅读,了解如何使用模型生成图像。

如何生成具有稳定扩散 (CPU) 的图像

现在一切都已安装完毕,我们准备使用 Stable Diffusion 生成图像。要生成图像,只需运行以下命令,将提示更改为所需的任何内容。

python demo.py --prompt "bright beautiful solarpunk landscape, photorealism"

推理时间大约为 8-12 分钟,因此在 Stable Diffusion 运行时,请随时喝杯咖啡。下面我们可以看到运行上述命令的输出:

技巧和窍门

当您开始使用 Stable Diffusion 时,请在探索时牢记这些提示和技巧。

快速工程

文本到图像模型的结果可能对用于描述所需场景的措辞很敏感。提示工程是定制提示以获得所需结果的实践。例如,如果生成的图像质量较低,请尝试在标题前面加上“an image of”。您还可以指定不同的样式和媒介,以实现不同的效果。查看以下每个下拉菜单以获取想法:

图像类型:

尝试在标题前面加上以下内容之一,以获得不同的效果:

"A photograph of"
"A headshot of"
"A painting of"
"A vision of"
"A depiction of"
"A cartoon of"
"A drawing of"
"A figure of"
"An illustration of"
"A sketch of"
"A portrayal of"
风格

您可以指定不同的样式来实现不同的结果。尝试将以下一个或多个形容词添加到提示中并观察效果。

"Modernist(ic)"
"Abstract"
"Impressionist(ic)"
"Expressionist(ic)"
"Surrealist(ic)"
美学

您也可以尝试指定不同的美学。尝试将以下一个或多个形容词添加到提示中并观察效果。

"Vaporwave"
"Synthwave"
"Cyberpunk"
"Solarpunk"
"Steampunk"
"Cottagecore"
"Angelcore"
"Aliencore"
艺术家

您甚至可以尝试指定不同的艺术家来实现不同的视觉效果。尝试将以下选项之一附加到提示符中:

画家:
	"in the style of Vincent van Gogh"
	"in the style of Pablo Picasso"
	"in the style of Andrew Warhol"
	"in the style of Frida Kahlo"
	"in the style of Jackson Pollock"
	"in the style of Salvador Dali"
雕刻家:
	"in the style of Michelangelo"
	"in the style of Donatello"
	"in the style of Auguste Rodin"
	"in the style of Richard Serra"
	"in the style of Henry Moore"
建筑师:
	"in the style of Frank Lloyd Wright"
	"in the style of Mies van der Rohe"
	"in the style of Eero Saarinen"
	"in the style of Antoni Gaudi"
	"in the style of Frank Gehry"

调整采样参数

在调整采样参数时,您可以利用以下经验观察来指导您的探索。

图像尺寸

一般来说,从经验上看,较大的图像在图像质量和标题对齐方面都比较小的图像要好得多。有关 256x256 和 512x512 大小图像的提示“Guy Fieri gives a tour of a haunted house”,请参阅以下示例:

提示“Guy Fieri 参观鬼屋”的 256x256 与 512x512 样本比较

扩散步骤数

扩散过程中的步骤数似乎不会对超过大约 50 个时间步长的某个阈值的结果产生太大影响。下面的图像是使用相同的随机种子和提示“一辆红色跑车”生成的。可以看出,更多的时间步长始终如一地提高了生成图像的质量,但过去 50 个时间步长的改进仅体现在对感兴趣对象的偶然环境的轻微变化上。事实上,从25个时间步长开始,汽车的细节几乎完全一致,而且环境正在改善,以在更大的时间步长内变得更适合汽车。

图像纵横比

图像质量和标题相似性作为纵横比的函数似乎取决于输入标题。下面的图像具有相同的面积,但纵横比不同,均使用标题“钢和玻璃现代建筑”生成。结果相对均匀,尽管垂直图像看起来最好,其次是正方形,然后是水平图像。鉴于这种类型的现代建筑又高又瘦,这应该不足为奇。因此,性能作为纵横比的函数似乎与主体有关。

不幸的是,稳定扩散仅限于可分解的纵横比,这使得更细粒度的实验变得不可能,但无论如何,方形图像应该足以满足大多数目的。

检查点符号链接

为了避免每次生成映像时都必须提供检查点,可以在检查点和缺省值 之间创建一个符号链接。在终端中,导航到目录并执行以下命令:--ckpt sd-v1-4.ckpt--ckptstable-diffusion

mkdir -p models/ldm/stable-diffusion-v1/ ln -s sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt

或者,只需将检查点移动到默认位置即可:--ckpt

mv sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt

最后的话

这就是使用新的 Stable Diffusion 模型生成图像所需的全部内容 ,如果您想了解有关 Stable Diffusion 工作原理的更多信息,请随时查看3D建模学习工作室

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号