理解扩散模型微调:Textual Inversion、DreamBooth、LoRA 与全量微调
前言:扩散模型已经具备很强的通用图像生成能力。以 Stable Diffusion 这类文生图模型为例,基础模型通常已经知道“猫”“狗”“人像”“建筑”“风景”“油画风格”等通用概念。但在实际应用中,我们往往不只想生成一个普通概念,而是希望模型掌握更具体的内容,例如某只特定宠物、某个固定角色、某种产品外观、一种新的插画风格,或者某个专业领域的图像分布。这就是扩散模型微调要解决的问题:在保留基础模型通用生成能力的同时,让模型获得新的概念、风格或领域能力。
本文并不试图穷尽扩散模型微调领域的全部方法。近年来,围绕个性化生成、参数高效适配和条件控制,已经出现了大量方法和变体,例如 Adapter-based tuning、Pivotal Tuning、HyperDreamBooth、LoRA 变体、reference-based personalization,以及 ControlNet、T2I-Adapter、IP-Adapter 等条件适配模块。
为建立一个清晰的基本框架,本文只聚焦几类最常见、最具代表性、也最容易混淆的方法:Textual Inversion、DreamBooth、LoRA、Custom Diffusion 和全量微调。理解这些方法后,再阅读其他变体会容易很多,因为许多新方法都可以看作是在“学习文本向量、更新局部参数、训练轻量补丁、保持类别先验、继续训练整体模型”这些基本思路上的扩展或组合。
目录
- 扩散模型微调的基本逻辑
- 1. Textual Inversion:学习一个新的文本向量
- 2. DreamBooth:把具体实例写进模型权重
- 3. LoRA:训练一个可插拔的轻量补丁
- 4. Custom Diffusion:局部精修文本与图像的连接
- 5. 全量微调:继续训练整个模型
- 其他相关方法与本文范围
- 主流方法对比
- 微调方法的选择逻辑
- 总结
扩散模型微调的基本逻辑
一个典型的文生图扩散模型大致包含三部分:文本编码器、U-Net 去噪网络和 VAE/Decoder。
文本编码器把输入文本转换成模型能理解的条件特征。U-Net 是生成过程的核心,它在扩散过程中逐步去噪,把随机噪声变成符合文本描述的图像。VAE/Decoder 负责在 latent space 和最终图像之间转换。
可以把文生图过程简化理解为:
Image = f(Model Parameters, Text Condition)也就是说,生成结果主要取决于两个因素:模型参数和文本条件。
扩散模型训练时通常不是直接预测最终图像,而是学习如何去噪。训练过程会先把图像编码到 latent space,再加入随机噪声,然后让 U-Net 根据当前噪声强度和文本条件预测噪声。预测越准确,说明模型越知道“在这个文本条件下,图像应该往哪个方向去噪”。
微调方法的差别就在于:为了让模型学会一个新概念,究竟要改文本侧、改 U-Net 的一小部分,给模型加一个轻量补丁,还是继续训练整个模型。
可以用一个简单类比理解:基础模型像一本已经学过大量图像知识的大词典,微调就是往这本词典里加入新知识。Textual Inversion 是增加一个新词,DreamBooth 是让词典记住一个具体对象,LoRA 是安装一个轻量插件,Custom Diffusion 是局部修改与概念关联最紧密的页面,全量微调则是重写词典的一大部分内容。
1. Textual Inversion:学习一个新的文本向量
Textual Inversion 是最轻量的概念注入方法。它的核心思想是:冻结扩散模型主体,只学习一个新的 token embedding。
假设我们希望模型学会一只特定的狗。Textual Inversion 会引入一个新的伪 token,例如<mydog>。这个 token 一开始没有明确含义,只是一个可以被优化的向量。训练时,U-Net、VAE 以及大部分文本编码器参数都保持冻结,真正被学习的只有<mydog>对应的 embedding。
训练过程可以这样理解:给模型看几张这只狗的图片,同时在文本描述中放入<mydog>。图像被编码到 latent space 并加入噪声,U-Net 根据文本条件预测噪声。由于 U-Net 被冻结,模型不能通过修改 U-Net 来记住这只狗,只能不断调整<mydog>这个文本向量,让它逐渐成为一个能够唤起目标视觉概念的入口。
因此,Textual Inversion 学到的新知识主要存储在 token embedding 中。推理时必须使用这个 token,模型才会调用对应概念。如果不使用它,模型只会按照基础模型原本对普通类别的理解进行生成。
Textual Inversion 的优势是训练快、文件小、易分享,对基础模型破坏很小,适合低成本加入一个新概念或风格。它的局限也很明确:它没有真正改写模型内部的视觉生成机制,而是在基础模型已有能力中寻找一个合适的文本入口。因此,如果目标概念很复杂,或者需要很强的身份一致性,单靠一个 embedding 往往不够稳定。
2. DreamBooth:把具体实例写进模型权重
DreamBooth 也是个性化生成中的经典方法。它解决的问题比 Textual Inversion 更进一步:不仅要让模型知道一个新词,还要让模型稳定记住一个具体实例。
例如,我们不只是希望模型知道“狗”,而是希望它记住“这只特定的狗”。DreamBooth 通常会给这个实例设置一个唯一标识符,并把它和类别词绑定起来。类别词的作用是告诉模型:这个新实例仍然属于某个已有类别,例如 dog、person、toy 或 backpack。
训练时,DreamBooth 会使用少量目标图像,并对模型权重进行微调。它通常会更新 U-Net,有时也会更新文本编码器的一部分。这样,实例信息不再只是存在于一个 token embedding 里,而是被写进了模型权重中。
DreamBooth 的关键不只是“记住目标对象”,还包括“不要忘记原来的类别知识”。如果只用几张目标图片训练,模型很容易过拟合。例如,训练一只狗之后,模型可能把所有狗都生成得像这只狗,或者总是复制训练图中的姿态、背景和光照。
为缓解这个问题,DreamBooth 通常会使用 prior preservation,也就是“先验保持”。训练中会同时考虑目标实例图像和类别图像,让模型既记住特定实例,又保留对该类别的一般理解。这样,模型才能在不同场景、姿态和风格下生成同一个对象,而不是简单复刻训练图。
DreamBooth 的优势是实例一致性强,适合人物、宠物、产品、角色等高一致性需求。代价是训练成本更高、模型权重改动更明显,也更容易过拟合。与 Textual Inversion 相比,它不是只学习一个文本向量,而是直接修改模型参数,让模型内部真正适应这个实例。
3. LoRA:训练一个可插拔的轻量补丁
LoRA,全称 Low-Rank Adaptation,是目前扩散模型社区最常见的轻量微调方法之一。它流行的原因很直接:效果通常不错,训练成本较低,文件也比较小。
神经网络中有大量权重矩阵。全量微调会直接更新这些大矩阵,参数量大、成本高,也不方便管理。LoRA 的思路是:不直接改原始权重,而是在原始权重旁边学习一个低秩增量。
更直观地说,基础模型保持不动,LoRA 只训练一个小型“旁路模块”。推理时,把这个旁路模块接到基础模型上,模型行为就会发生变化。需要时加载,不需要时卸载。因此,LoRA 常被看作一种可插拔的模型补丁。
在扩散模型中,LoRA 通常被加到 U-Net 的注意力层或相关线性层上。注意力层负责处理文本条件和图像特征之间的关系,会影响模型如何理解风格、角色、物体和构图。通过在这些位置加入低秩增量,LoRA 可以用较少参数改变模型生成行为。
LoRA 的能力比 Textual Inversion 更强,因为它不只是改变文本输入向量,而是影响了模型内部计算。它又比 DreamBooth 和全量微调更轻,因为它不需要大范围更新原始模型参数。
LoRA 可以用于多种目标:学习一种画风、一个角色、一个对象、一类服装、一种摄影风格,甚至某个领域的图像分布。不同 LoRA 的使用方式并不完全统一。有些 LoRA 需要特定触发词才能稳定生效,有些即使没有明确触发词,也会改变模型整体生成倾向。这取决于训练数据和训练文本如何组织。
LoRA 的主要优势是灵活。它可以单独训练、单独分享,也可以和基础模型分开管理。用户可以快速切换不同 LoRA,也可以尝试组合多个 LoRA。主要局限是质量差异较大,不同 LoRA 之间可能相互干扰,多个 LoRA 叠加时也未必稳定。
4. Custom Diffusion:局部精修文本与图像的连接
Custom Diffusion 也是一种参数高效微调方法。它和 DreamBooth 一样关注个性化概念,但不希望大范围修改模型,而是只修改与概念绑定最相关的少量参数。
在文生图扩散模型中,文本和图像之间的关系主要通过 cross-attention 建立。cross-attention 可以理解为模型在生成图像时决定“文本中的哪些词应该影响图像中的哪些视觉特征”。如果只是希望模型学会一个新概念,不一定需要改完整个 U-Net,而可以重点修改这些文本-图像连接。
Custom Diffusion 的做法是选择性微调 cross-attention 中的一部分参数,尤其是与 key 和 value 投影相关的参数。这样,模型可以在较小参数改动下,把某个文本概念和对应视觉特征绑定起来。
和 Textual Inversion 相比,Custom Diffusion 不只是学习一个文本向量,而是直接调整模型内部的文本-图像对齐机制。和 DreamBooth 相比,它修改的参数更少,对基础模型的扰动更小。和 LoRA 相比,它不是通过低秩旁路来适配,而是更直接地编辑少量关键参数。
Custom Diffusion 的思想很清晰:只改最相关的部分,不动不必要的部分。它的局限是生态和工具链不如 LoRA 成熟,因此在社区中没有 LoRA 那么普遍。
5. 全量微调:继续训练整个模型
全量微调是最直接、也最重的方式。它不只是加一个新词,也不只是挂一个补丁,而是继续训练模型本身,更新大量参数,甚至更新全部参数。
训练流程仍然遵循扩散模型的去噪学习:图像被编码到 latent space,加噪后交给 U-Net 预测噪声,模型根据预测误差更新参数。区别在于,全量微调允许大量权重一起变化,因此模型可以更充分地适应新数据分布。
这种方法适合目标变化较大的场景。例如,如果希望模型适应医学影像、卫星图像、工业设计图、特定艺术风格或某个专业领域,单靠一个 token 或一个轻量补丁可能不够。全量微调可以把模型整体推向新的分布。
但它的代价也最高。全量微调需要更多数据、更多算力和更谨慎的训练设置。生成的 checkpoint 文件通常较大,训练不当时容易过拟合,也可能破坏基础模型原有的通用生成能力。
因此,全量微调并不一定是最优选择。它只是最彻底的选择。只有当目标任务确实需要整体能力迁移时,全量微调才更有必要。
其他相关方法与本文范围
除了本文重点介绍的几类方法,扩散模型微调和适配还有很多相关路线。
Adapter-based tuning 会在模型中插入小型 adapter 模块,只训练这些新增模块,而不是更新完整模型。Pivotal Tuning 或 Pivotal Tuning Inversion 常用于进一步提升个性化保真度,有时会和 Textual Inversion 或其他方法结合。HyperDreamBooth 一类方法则希望通过 hypernetwork 快速生成个性化权重,从而降低 DreamBooth 式个性化的训练和存储成本。
LoRA 本身也有许多变体,例如 LyCORIS、LoHa、LoKr、OFT 等。它们通常仍属于更广义的参数高效适配路线,只是在矩阵分解方式、参数约束或适配结构上有所不同。
另外,ControlNet、T2I-Adapter、IP-Adapter 等方法也经常和微调方法一起被讨论。严格来说,它们更多属于条件控制或外部适配模块,不完全等同于本文讨论的“把新概念写进模型或参数补丁”的微调方法。它们的目标通常不是让模型永久记住某个新对象,而是让生成过程受到边缘图、姿态、深度图、参考图像或图像特征的控制。
因此,本文关注的不是全部方法,而是几个基础且高频的代表类型。掌握这些方法后,再理解其他变体会更容易。
主流方法对比
| 方法 | 主要改动位置 | 参数规模 | 核心机制 | 典型优势 | 主要局限 |
|---|---|---|---|---|---|
| Textual Inversion | 新 token embedding | 极少 | 在文本空间学习一个新概念入口 | 轻量、易分享、成本低 | 表达能力有限,依赖 token |
| DreamBooth | U-Net,部分情况下包括文本编码器 | 中到大 | 通过权重更新绑定具体实例和类别先验 | 实例一致性强 | 成本较高,易过拟合 |
| LoRA | 注意力层或线性层的低秩增量 | 少 | 冻结原权重,学习可插拔参数补丁 | 高效、灵活、易组合 | 使用方式不统一,组合时可能干扰 |
| Custom Diffusion | 少量 cross-attention 相关参数 | 少到中等 | 精修文本概念与视觉特征的绑定关系 | 参数较少,扰动有限 | 生态不如 LoRA 成熟 |
| 全量微调 | 大部分或全部模型参数 | 最大 | 继续训练整个模型以适应新分布 | 表达能力强,适合领域迁移 | 成本高,文件大,易损伤通用能力 |
如果只看改动幅度,可以粗略理解为:
Textual Inversion < LoRA / Custom Diffusion < DreamBooth < Full Fine-tuning但这不是绝对排名。它们的目标并不完全相同。Textual Inversion 强调极轻量的概念入口,LoRA 强调参数高效和灵活组合,DreamBooth 强调实例级个性化,Custom Diffusion 强调局部参数编辑,全量微调强调整体分布迁移。
微调方法的选择逻辑
选择哪种方法,取决于目标、数据量、算力成本和对生成一致性的要求。
如果目标是低成本加入一个新概念或风格,Textual Inversion 是最轻量的选择。它适合快速实验和小规模概念注入,但不适合复杂、高一致性的实例建模。
如果目标是稳定复现某个人、宠物、产品或角色,DreamBooth 通常更合适。它能把实例信息写进模型权重,生成一致性更强,但训练成本和过拟合风险也更高。
如果希望在效果、成本、存储和灵活性之间取得平衡,LoRA 往往是最实用的方案。它可以用较少参数显著改变模型行为,适合风格、角色、对象和领域适配等多种任务。
如果希望只修改与概念绑定最相关的部分,可以考虑 Custom Diffusion。它的思想清晰,但实际生态不如 LoRA 成熟。
如果目标是让模型整体适应一个新领域,全量微调更彻底。它适合较大规模分布迁移,但需要更多数据、算力和训练经验。
微调方法没有绝对优劣,只有目标、成本和稳定性之间的取舍。
总结
扩散模型微调方法的名称很多,但理解它们并不需要死记硬背。关键是看三件事:新知识写进哪里,训练时更新哪些参数,推理时如何调用。
Textual Inversion 把新概念写进一个 token embedding,因此非常轻量,但表达能力有限。DreamBooth 通过微调模型权重记住具体实例,因此实例一致性更强,但训练成本更高。LoRA 学习轻量低秩参数补丁,在效果、成本和灵活性之间取得了很好的平衡。Custom Diffusion 选择性修改 cross-attention 等关键参数,代表了局部参数编辑路线。全量微调则直接把模型整体推向新的分布,能力最强,代价也最高。
这些方法都能让基础模型更适合特定任务,但它们改变模型的方式、训练成本、使用接口和适用场景并不相同。真正理解这些差异,才能正确选择、训练和使用扩散模型微调方法。
