LoRA 微调技术详解:Stable Diffusion 模型的高效适配方案
引言
LoRA(Low-Rank Adaptation,低秩适应)是一种高效的微调技术,广泛应用于 Stable Diffusion 等生成式 AI 模型的定制。与传统的 Dreambooth 或文本反转(Textual Inversion)相比,LoRA 在保持较小文件体积的同时,提供了强大的风格迁移和概念学习能力。本文将深入探讨 LoRA 的原理、优势、安装使用方法以及训练基础。
LoRA 模型是什么?
LoRA 本质上是对预训练模型权重的低秩分解与适配。虽然我们已经拥有 Dreambooth 和文本反转等训练技术,但 LoRA 提供了一种更优的折中方案:
- Dreambooth:功能强大,可完整微调模型,但生成的检查点文件体积巨大(通常为 2GB 至 7GB),对存储要求高。
- 文本反转(Embeddings):文件极小(约 100KB),但表达能力有限,难以捕捉复杂的视觉风格。
- LoRA:介于两者之间。文件大小通常在 2MB 至 200MB 之间,训练能力接近 Dreambooth,且易于管理。
由于原始 Checkpoint 模型体积庞大,本地存储空间往往成为瓶颈。LoRA 通过仅修改模型的关键部分来改变输出风格,是解决存储问题的优秀方案。
注意:与文本反转类似,LoRA 模型不能单独使用。它必须与基础的模型检查点文件配合使用。LoRA 通过对配套模型文件进行微小的权重调整来改变生成图像的风格或内容。
LoRA 的工作原理
LoRA 的核心在于对 Stable Diffusion 模型中最关键的部分进行微调,即交叉注意力层(Cross-Attention Layers)。研究表明,微调这部分参数足以实现良好的训练效果。
矩阵分解机制
交叉注意力层的权重以矩阵的形式排列。LoRA 模型通过将自己的权重加到这些矩阵上来微调模型。为了减小文件体积,LoRA 的技巧是将大矩阵分解成两个更小的低秩矩阵。
假设原始模型有一个 $100 \times 100$ 的矩阵,需要存储 10,000 个数字。LoRA 将其分解为一个 $100 \times 2$ 矩阵和一个 $2 \times 100$ 矩阵。这样只需要存储 $100 \times 2 + 2 \times 100 = 400$ 个数字。如果矩阵更大,LoRA 带来的压缩效果越明显。
在这个例子中,矩阵的秩(Rank)是 2。这比原始尺寸低得多,因此被称为低秩矩阵。这种操作虽然理论上会带来数据缺失,但在交叉注意力层中,这些损失通常是无伤大雅的,使得 LoRA 的做法在工程上完全可行。
在哪里找到 LoRA 模型?
Civitai
Civitai 是目前寻找 LoRA 模型的首选平台。该网站托管了大量社区贡献的 LoRA 模型集合。应用 LoRA 过滤器可以仅查看相关模型。大多数模型涵盖女性肖像、动漫风格、现实主义插图等常见类别。
Hugging Face
Hugging Face 是另一个优质的 LoRA 库来源。这里你会发现更多种类的 LoRA 模型,包括一些实验性或特定领域的模型。不过,相比 Civitai,Hugging Face 上的模型可能数量较少,且界面不够直观,通常缺乏图片预览功能。
如何使用 LoRA?
本文介绍如何在 AUTOMATIC1111 Stable Diffusion WebUI 中使用 LoRA 模型。AUTOMATIC1111 原生支持 LoRA,无需安装额外扩展。
第 1 步:安装 LoRA 模型
要在 AUTOMATIC1111 WebUI 中安装 LoRA 模型,请将下载的 .safetensors 或 .ckpt 格式模型文件放入以下目录:
stable-diffusion-webui/models/Lora/
重启 WebUI 后,系统会自动识别新放入的模型。
第 2 步:在提示词中使用 LoRA
在 AUTOMATIC1111 中添加带权重的 LoRA,可以在正向提示词或反向提示词中使用以下语法:


