中文精炼导读

核心观点

  • Jay Alammar 的这篇图解文章是 Stable Diffusion 的经典入门:它把 SD 拆成三个各自带神经网络的组件——文本编码器(CLIP 的 ClipText)、图像信息创建器(UNet + 调度器,在潜空间逐步"扩散"信息)、图像解码器(自动编码器的解码器,一次性"画出"最终像素图像)。
  • "扩散"发生在潜空间而非像素空间:这是 Stable Diffusion 相对前代扩散模型的主要性能优势来源——压缩后的潜表示让扩散更快,因此跑在普通消费级硬件上成为可能,也让 SD 成为里程碑式的开源工具。
  • 核心机制是"训练一个噪声预测器":对图像逐步加噪制造训练样本,学到的噪声预测器在推理时反向"减去噪声"、把纯噪声一步步拉回训练数据的分布(蓝天上、人物有两只眼睛、猫有尖耳朵)——这个去噪过程通常运行 50 或 100 步。
  • 文本控制靠"条件化":CLIP 用 4 亿张"图 + 说明文字"对训练图像编码器与文本编码器(余弦相似度对齐、负样本打低分),SD 把文本 token 嵌入喂进 UNet 的注意力层,让 ResNet 块之后的处理能利用文本信息。
  • 一个反直觉的结论来自 Imagen 论文:换成更大的语言模型对生成质量的影响,比增大图像生成组件本身更大——这提醒读者语言理解组件在文生图系统中举足轻重。
Stable Diffusion 文本到图像生成
Stable Diffusion 文本到图像生成

内容精讲

文章开篇点明 Stable Diffusion 的里程碑意义:它把高性能的文生图模型(图像质量、速度、相对低的资源/内存需求)开放给了大众。之后作者逐层拆解这个系统——它不是一个单一的巨型模型,而是多个组件和模型的组合。第一个观察是存在一个"文本理解组件":它把文本信息转换成捕获文字思想的数字表示。这个文本编码器是一个特殊的 Transformer 语言模型,技术上是 CLIP 模型的文本编码器(ClipText):输入文本,为每个词/token 输出一个向量。这些信息随后被送入"图像生成器",后者分为两个阶段。

三大组件:ClipText、UNet+调度器、解码器
三大组件:ClipText、UNet+调度器、解码器

第一阶段是"图像信息创建器"——Stable Diffusion 的秘密武器,也是相对前代模型获得主要性能提升的地方。它以多个步骤生成图像信息,对应界面里的 steps 参数(默认 50 或 100)。它完全在"图像信息空间"(潜空间)里工作,这让它比在像素空间工作的前代扩散模型更快。技术上说,这个组件由 UNet 神经网络和一个调度算法构成;"扩散"(diffusion)一词描述的就是这个组件里发生的事——逐步处理信息,最终产出高质量图像。第二阶段是"图像解码器":它只在流程最后运行一次,用信息创建器传来的信息"画出"最终的像素图。三个主要组件的输入输出很清晰:ClipText 输入文本、输出 77 个 768 维的 token 嵌入向量;UNet + Scheduler 输入文本嵌入和一张由噪声构成的起始张量、输出处理后的信息数组(维度 4×64×64);自动编码器解码器把处理后的信息数组"画"成 3×512×512 的 RGB 图像。

"到底什么是扩散?"作者用一个直观的方式解释:把随机潜变量数组经图像解码器可视化,看到的就是视觉噪声;扩散分多步进行,每一步都把一个输入潜数组变成"更接近输入文本和模型从训练图中学到的所有视觉信息"的另一个潜数组。文章附带的动图展示了每步潜变量的可视化——尤其在步骤 2 到 4 之间,仿佛轮廓从噪声中浮现,非常震撼。机制的框架是:给定一张图,生成一些噪声加进去,这就构成一个训练样本;用同样公式批量制造训练样本(从无噪声到完全噪声,可控地分布在几十个步骤上),训练一个噪声预测器。训练完成后,这个噪声预测器能接受一张带噪声的图 + 去噪步骤编号,预测出一片噪声;从图中减去这片噪声,就得到更接近训练数据分布(而非具体哪张图)的图像——训练数据如果来自 LAION Aesthetics 这类美观图像,结果就倾向美观;如果训练数据是 logo,就得到 logo 生成模型。作者还指出,这个扩散直觉同样适用于 DALL-E 2 和 Google 的 Imagen。

潜空间中的扩散与去噪
潜空间中的扩散与去噪

但仅靠去噪生成的图像无法控制内容——不知道是金字塔还是猫。文本是怎么融入的?Stable Diffusion 论文的关键技巧是"离开像素、进入潜空间":用一个自动编码器把图像压缩到潜空间,再只用压缩信息重构;前向扩散在压缩后的潜变量上进行,噪声预测器预测的其实是"潜空间表示上的噪声"。为了把文本纳入流程,需要调整噪声预测器、把文本作为输入(text conditioning)。作者深入 UNet 内部讲解:没有文本的 UNet 是一系列处理潜数组的层,每层处理上一层输出,部分输出经残差连接送到网络后段,时间步被转换成时间步嵌入向量供各层使用;加入文本后的关键改动是在 ResNet 块之间插入注意力层——ResNet 块本身不直接看文本,但注意力层把文本表示合并进潜变量,下一个 ResNet 块就能利用这些文本信息继续处理。

文章最后解释了 CLIP 的训练方式:在"图像 + 说明文字"的数据集(实际是 4 亿张带 alt 标签的网页图片)上,同时训练图像编码器和文本编码器,用余弦相似度比较两者的嵌入——开始时即使文本正确描述图像,相似度也很低;训练更新两个模型让它们下次嵌入时相似。与 word2vec 类似,训练还需要不匹配的图像/说明负样本、给它们低相似度分数。在结语之前,作者特别引用 Imagen 论文的发现:更换更大的语言模型对生成图像质量的影响,超过增大图像生成组件本身——这也是他反复强调语言理解组件重要性的原因。

阅读价值

适合所有想搞懂"文生图到底怎么工作"的读者,尤其是 ML 初学者与产品/设计师:这篇文章用大量示意图把 Stable Diffusion 的三大组件、潜空间扩散、噪声预测、文本条件化讲得直观清晰,不需要强数学背景;对理解 steps、text-to-image/img2img 等常用参数背后的原理,以及"为什么语言模型大小影响图像质量"这类反直觉结论,都是理想的第一站。

阅读英文原文 → 返回 AI 技术文档

本文为中文精炼导读,由 AI 基于原文整理,内容与图片版权归原作者所有。原文: http://jalammar.github.io/illustrated-stable-diffusion/