跳到主要内容

Stable Diffusion 3 生图最佳实践

· 阅读需 14 分钟
Chi
Developer

Stability AI 最近发布了 Stable Diffusion 3 Medium 的权重,这是一个 20 亿参数的文本到图像的生成模型,在照片真实感、排版和提示词跟随方面表现出色。

现在就可以在 揽睿·知用 上运行 Stable Diffusion 3 模型,比如创建一个 ComfyUI 的工作空间,拖入官方的 SD3 工作流即可直接使用,如果想要将 SD3 的能力集成进你的应用中,我们自研的星舟推理引擎、ComfyUI API 推理服务均已支持 SD3 模型的生产级推理部署。

在这篇文章中,我们将介绍如何使用 Stable Diffusion 3 来获得最佳质量的图像,包括如何写 SD3 的提示词,这与之前的 Stable Diffusion 模型有点不同。

选择 SD3 的版本

Stability AI 封装了多个版本的 SD3 Medium 模型,以确保它可以在尽可能多的设备上运行。

SD3 使用三种不同的文本编码器(文本编码器的作用是将提示词转换为模型可以理解的格式)。其中新的 T5 文本编码器体积非常大 —— 这意味着它需要使用大量的显存。如果你正在查看 SD3 HuggingFace 权重,你将看到官方提供了四个不同文本编码器配置的模型,你应该根据实际可用的显存情况选择使用。

sd3_medium_incl_clips_t5xxlfp8.safetensors

包含模型权重、两个 CLIP 文本编码器和一个 fp8 的 T5-XXL 模型。为了简单起见和获得最佳结果,我们推荐使用这个权重。

sd3_medium_incl_clips_t5xxlfp16.safetensors

与 sd3_medium_incl_clips_t5xxlfp8.safetensors 相同,只是 T5 部分没有压缩那么多。通过使用 fp16 而不是 fp8,你的图像质量会略有改善。这种改进是以更高的内存使用量为代价的。

sd3_medium_incl_clips.safetensors

这个版本不使用 T5 编码器。它仅包含两个 CLIP 文本编码器。如果你没有太多 VRAM,这是一个不错的选择,但你的结果可能与完整版本有很大不同。此版本出的图片可能不会严格遵循你的提示词,并且还可能会降低图像中文本的质量。

sd3_medium.safetensors

该模型只是基本权重,没有任何文本编码器。如果你使用这些权重,请确保单独加载文本编码器。 Stability AI 为此提供了一个 ComfyUI 工作流程示例

提示词

SD3 在使用方式上的最大的变化是提示词。现在,我们可以使用很长的描述性提示词,并且返回的图像会非常好的遵循提示词的描述。不再受 CLIP 文本编码器 77 个令牌的限制。

现在我们可以使用长达 10,000 个字符的提示词,差不多超过 1,500 个单词。在实际使用中,你可能不太会写这么长的提示词,但很明显我们不再需要担心提示词的长度了。

对于很长的提示词,目前很难说哪些内容会出现在图像中,哪些内容不会出现在图像中。目前尚不清楚什么样的提示词一定会被模型使用。但提示词越长、越复杂,就越有可能遗漏某些内容。

不要使用负向提示词

SD3 的训练中没有使用负向提示词,所以负向提示词在 SD3 中并不会如期望的那样起作用。如果你已经尝试过 SD3,你可能会注意到,当给出负向提示词时,图片确实会发生变化,但这种变化并不是有意义的。负向提示词不会删除你不想要的元素,相反,它会给你的调节带来噪音,并简单地改变输出,有点像使用不同的种子。

提示词技巧

现在 SD3 允许更长的提示词,你可以使用简单的英语句子和语法来描述你想要的图像。你仍然可以像以前一样使用逗号分隔的关键字,但如果你的目标是特定的内容,那么需要提供明确的描述性提示词。类似于使用 Midjourney v6 和 DALL·E 3 。

当描述图像的元素时,请尝试使用明确的文字,以防止这些描述也适用于图像的其他部分。

这些是长描述性提示的示例,显示了 SD3 中良好的提示遵守情况:

a man and woman are standing together against a backdrop, the backdrop is divided equally in half down the middle, left side is red, right side is gold, the woman is wearing a t-shirt with a yoda motif, she has a long skirt with birds on it, the man is wearing a three piece purple suit, he has spiky blue hair

alt text

a man wearing 1980s red and blue paper 3D glasses is sitting on a motorcycle, it is parked in a supermarket parking lot, midday sun, he is wearing a Slipknot t-shirt and has black pants and cowboy boots

alt text

a close-up half-portrait photo of a woman wearing a sleek blue and white summer dress with a monstera plant motif, has square white glasses, green braided hair, she is on a pebble beach in Brighton UK, very early in the morning, twilight sunrise

alt text

每种文本编码器有不同的提示词

现在我们有了三个文本编码器,从技术上讲,我们可以向每个编码器传递不同的提示。例如,你可以尝试将图像的一般样式和主题传递给 CLIP 文本编码器,并将详细主题传递给 T5 部分。在我们的实验中,我们还没有找到任何特殊的技术,但我们仍在尝试。

下面一个示例,其中我们将不同的提示传递给 CLIP 和 T5 编码器。

CLIP

a cartoon, dreamy anime background, a photo of a dog

T5

the words written across the sky say "hello world", written in clouds from a plane, above the dog

alt text

设置

有许多设置(其中一些是新设置)可用于更改 SD3 中的图像输出。我们在下面推荐了一些不错的默认值,但你应该尝试找到自己的偏好。

总之,你应该从这些设置开始实验(我们将在下面更详细地讨论它们):

  • 28 steps
  • 3.5 ~ 4.5 CFG
  • 使用 dpmpp_2m sampler 和 sgm_uniform scheduler
  • 3.0 shift

宽度和高度

与 SDXL 非常相似,SD3 提供 1 百万像素左右的最佳输出。分辨率必须能被 64 整除。我们建议这些常见的宽高比采用以下宽度和高度:

  • 1:1 - 1024 x 1024(方形图像)
  • 16:9 - 1344 x 768(影院和宽屏)
  • 21:9 - 1536 x 640(电影)
  • 3:2 - 1216 x 832(横向纵横比)
  • 2:3 - 832 x 1216(纵向纵横比)
  • 5:4 - 1088 x 896(横向纵横比)
  • 4:5 - 896 x 1088(纵向纵横比)
  • 9:16 - 768 x 1344(长垂直图像)
  • 9:21 - 640 x 1536(非常高的图像)

如果你之前使用过 Stable Diffusion 1.5 和 SDXL,其分辨率高于训练时的分辨率,你可能会熟悉它们给出的奇怪输出 - 扭曲的图像、多个头、重复元素等等。SD3 不会发生这种情况。

在 SD3 中,如果分辨率大于预期,则中间会出现合理的图像,而边缘周围会出现奇怪的重复伪影,以下是一个显示太大图像的预测示例。

alt text

同样,如果太小,你的图像将被严重裁剪,以下示例,显示裁剪后的图像太小。

alt text

步数

此设置是模型在生成图像时将使用的去噪步数。在 SDXL 中,该值通常约为 20,对于 Lightning 模型,该值为 4 个步长。步数是决定生成图像所需时间的主要因素。步数越多,图像质量越好,而步数越少,生成速度越快。

对于 SD3,我们建议 28 个步数。这个数字可以提供清晰的图像,具有不错的前景和背景,并且几乎没有 VAE 伪影(图像中看到可见的噪声),而且不需要太长时间。

增加步数的效果

与以前的稳定扩散模型不同,我们习惯于增加步数来提高质量,直到效果趋于平稳并且图像不再有大的变化。但对于 SD3,当你增加步数时,会有一些不同的情况。

SD3 通常可以在大约 8 到 10 个步数内获得看起来不错的图像,尽管存在 VAE 噪声伪影和不连贯的图像部分,这取决于提示词和种子数。随着步数的增加,你会获得更高质量的图像。最合适的值是 26 到 36 左右。

图像及其主题有时会在不同的步长值下发生显着变化。例如,对于一个人的模糊提示,你可能会发现你的主题随着步数的增加而改变年龄、性别或种族。比如这两个输出:

alt text

10 Steps

alt text

32 Steps,具有相同的设置和种子数

Guidance scale

指导尺度(或 CFG,无分类器指导)告诉模型输出与提示的相似程度。对于 SD3,你需要使用比 SD 1.5 和 SDXL 更低的值。

我们建议介于 3.5 和 4.5 之间。如果你的输出看起来对比度太大,请降低 CFG(以下是 CFG 太高的图像的示例)。

alt text

值得指出的是,CFG 越低,不同文本编码器选项的输出就越相似(无论你在 fp8、fp16 中使用 T5 文本编码器还是都不使用)。因此,如果你使用非常低的 CFG,你可以不使用 T5 编码器,而基本不会影响图像质量。

Sampler and scheduler 采样器和调度器

这是模型用于管理噪声的算法,不同的算法给出不同的图像。

对于 SD3,我们建议在 ComfyUI 中使用 dpmpp_2m 采样器和 sgm_uniform 调度程序。在 Automatic1111 中使用 dpm++ 2M。

Euler 也能给出很好的结果。

某些采样器和调度器无法与 SD3 配合使用 – 特别是 ancestral 和 sde 采样器以及流行的 SDXL 噪声调度器 karras 。

Shift 转移

Shift 是 SD3 中的一个新参数,你可以尝试修改。它代表时间步调度偏移,其中较高的偏移值能更好的管理更高分辨率的噪声。从本质上讲,使用 Shift 时,噪点可以得到更好的处理,并且你可以获得更好看的图像。你可以在 SD3 研究论文中阅读有关时间步计划转换背后的理论的更多信息。

3.0 是基于人类偏好评估的推荐默认值。在 ComfyUI 中,你可以在 ModelSamplingSD3 节点上找到该值,在 Diffusers 中,你可以将 shift 参数传递给 FlowMatchEulerDiscreteScheduler

6.0 在人类评估中得分很高,值得尝试。如果你使用较低的值(例如 2.0 或 1.5),你可以获得更原始且「处理较少」的图像,这适用于某些提示词。

本文部分翻译自:https://replicate.com/blog/get-the-best-from-stable-diffusion-3