1. 先看本质:扩散模型为何能把噪声变成画面
我第一次跑通 Stable Diffusion 出图时,盯着屏幕上从满屏雪花里慢慢浮现出的人脸,心里想的是“这怕不是某种炼金术”。因为当时我实在想不通,一堆随机噪声像素是怎么一步步变成有结构、有光照、有语义的画面。后来把前向过程和反向过程从头推了一遍,才明白这压根不是魔法,而是一个极其优雅的概率设计。
1.1 正向过程:把秩序打碎成混沌
扩散模型的训练思路可以理解成“先学会破坏,再学会修复”。正向过程就是破坏:我们拿一张正常图片 x0,不断给它加上小步的高斯噪声。每加一步,画面就更糊一点;步数足够多之后,图片基本退化成一团纯噪声,和原来的内容没有任何关系。数学上,这个过程可以写成:
q(xt | x0) = N(xt; √(αt) x0, (1 - αt) I)
这个公式也不需要死记,你只要抓住两件事:第一,给定原始图 x0,第 t 步的噪声图 xt 可以直接由公式算出,不用一步一步迭代;第二,αt 是一个随 t 增大而递减的系数,控制着“保留原图多少信息”和“叠加多少噪声”的比例。前向过程说白了就是一条从有序到无序的路径,路径上每个点都清楚知道“原图是谁、已经被污染了多少”。
这就像你把一幅油画从墙上取下来,先罩一层薄薄的冰霜,再罩一层灰尘,一层一层盖上去,最后完全看不清原貌。前向过程干的就是这件事。它本身没有任何智能,也不需要学习,它只是负责制造训练数据。
1.2 反向过程:在噪声中学会“倒放”
真正精彩的是反向过程。模型要做的事情,是输入一张几乎纯噪声的图,输出“它跟前一步相比被去掉了多少噪声”。训练时,我们把正向过程产生的任意一步噪声图喂给模型,告诉它“这张图实际上是 x0 加噪到第 t 步得来的”,然后让模型预测:在下一次去噪中,应该去掉多大的噪声才更接近干净图。模型本身并不输出一张完整的干净图,它输出的是一个预测的噪声残差。
训练目标也简单,就是尽量让预测的噪声和真实噪声接近,通常用均方误差:
L = E[‖ ε - εθ(xt, t) ‖²]
一旦模型学会了“看到带噪图片 x_{t-1} 的情况下,预测下一步应去除的噪声”,我们就可以反过来玩:先随机生成一团纯高斯噪声,然后让模型反复执行去噪操作,每一步去除一点点噪声,直到还原出清晰的图像。这个最初只有噪声的图像,在几十步迭代中逐渐形成轮廓、细节、光影,这就是从混沌到秩序的过程。
当时我意识到一个关键点:扩散模型本质上不是在“从零画图”,而是在“逐步判断噪声并剥离噪声”。它学会的是噪声的分布规律,而不是图片的静态模板。所以它对训练集里没有出现过的组合也有一定泛化能力,这也解释了它为什么能根据各种提示词组合出新鲜画面。
1.3 从像素空间到潜空间:为什么SD跑得动
如果扩散过程全程在 512×512×3 的像素空间里做,每一步都处理八十多万个数值,训练和推理的代价都极其夸张。Stable Diffusion 之所以叫“Stable Diffusion”并且能跑在消费级显卡上,核心在于它把扩散过程搬进了一个压缩过的潜空间。
具体做法是先用一个自编码器把 512×512×3 的图片压缩成 64×64×4 的潜向量,扩散模型在 64×64×4 的维度上做加噪和去噪,最后再通过解码器把潜向量还原成图片。64×64×4 和 512×512×3 比,计算量直接掉了一两个数量级,这是 SD 能在普通显卡上跑起来的关键。我见过一些初学的人拿这件事总结成一句话:SD 里真正吃显存的往往不是 U-Net,而是解码器那块。
顺着这个思路也能理解为什么你改分辨率时要尽量用 64 的倍数,因为潜空间是 64×64,解码回像素空间时通常要保持长宽对齐。你设 513×513,其实还是要先按比例缩放编码到潜空间,最后再拉回来,细节上既多花了算力又容易出奇怪瑕疵。早期我总喜欢设 520×520,后来改成 512 或 768,出图质量明显更稳。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 降噪的“手术台”:U-Net架构与时间步调度
刚才提到公式时,那个 εθ(xt, t) 在 Stable Diffusion 里的实际载体是一张 U-Net。很多教程会直接说“U-Net 负责去噪”,但没有解释它为什么长成那个样子,以及它凭什么是 U-Net。
2.1 U-Net的结构:下采样编码与上采样解码
U-Net 的结构有点像漏斗。前半部分通过卷积和下采样把特征图的空间尺寸一路压缩,同时增加通道数,强迫网络提炼高层语义信息;后半部分再逐步上采样还原空间尺寸,并把高层语义信息与浅层细节信息结合。中间那一层是最浓缩的瓶颈特征,负责把握“这到底是什么物体、什么场景、什么构图”。
关键细节在于跳跃连接。编码器每一层得到的特征图,会被直接拼接到解码器对应的同尺度层上。这样解码器在做细节恢复时,不用完全依赖瓶颈层的压缩信息,还能直接参考早期层的边缘、纹理等局部特征。这个设计很实用,因为扩散去噪要同时兼顾物体类别和边缘细节,如果只靠压缩特征,很多局部锐利度会渐渐丢失。
可能有人会问,这不是传统图像分割常用的结构吗?为什么会拿去跑扩散。原因不复杂:去噪任务本质上也是一个逐像素重建设定,编码器把“被污染的图”理解成高级语义,解码器在语义指引下重建出“干净图”,U-Net 这种对称结构很适合这个匹配度。所以它从医疗图像分割方法跨界到扩散模型,不是偶然,而是结构特性恰好对路。
2.2 时间步 Embedding:让模型知道现在走到哪一步
上面公式里出现了条件 t,这很重要。模型在去噪时,只看到当前这张图是不够的,它必须知道“现在是第几步”,因为第 5 步和第 40 步时,噪声所占比例完全不同,需要的处理策略也不一样。早期步要重建大面积结构,后期步要打磨局部细节。
Stable Diffusion 是通过把时间步 t 转换成一种特征向量再注入网络来做到这点的,类似Transformer里的位置编码。它利用正弦/余弦函数将一个整数 t 编码成高维向量,然后通过映射层加进 U-Net 的各个层,使网络在不同时间步上能调整自己的处理侧重。这也是为什么就算画面一样,模型在不同 t 值下行为也不同。
这里有个容易忽略的点:推理时步数减少,并不等于训练时步数也要一样。很多人误以为推理用了 20 步,模型就只在 1 到 20 的范围内被训练过。其实不是,训练可能覆盖 1 到 1000 步,推理时采用采样器在整条去噪轨迹上重新规划路径,也能生成高质量结果。模型的能力来自完整时间范围,只是采样器可以沿着更稀疏的节点跳跃。
2.3 关键认知:SD生成的不是像素,而是噪声残差
我记得自己第一次用别人的推理脚本时,顺手把 U-Net 的输出当成最终图片拿去存,结果存出来一张灰蓝色噪点图。那次折腾让我彻底理解了公式里的 εθ 到底代表什么:U-Net 输出的是一个预测的噪声图,而不是净图。
我们要得到干净图,得用当前噪声图减去预测噪声,再做一个去噪摊还映射,才能拿到“估计的 x0”。这一点在理解采样器时尤其重要。很多采样器之间的差异,本质上是它们如何利用预测出的噪声来更新下一步样本,比如要不要引入额外随机噪声、要不要走二阶修正等。如果你把这个基础搞混了,后面看采样器参数会一头雾水。
另外,U-Net 输出的尺度通常和潜空间一致,所以千万别直接把它当成 RGB 图像。检查调试信息时,我会先看看输出张量的空间尺寸是不是 64×64 左右,再做解码,不要想当然直接保存。
3. 控制生成方向的“三根线”:文本编码、条件注入与CFG
空有噪声和去噪模型,生成出来的图是不可控的,因为你不知道希望模型往哪个方向重建。Stable Diffusion 最大的突破在于把文本条件引入了去噪过程。这里有三根线:文本编码器、交叉注意力、以及 CFG 引导强度。每根线都直接关系到最终图是否贴合提示词。
3.1 CLIP文本编码器:把自然语言变成特征向量
你输入的提示词不会直接以文字形式进入 U-Net,而是先经过一个文本编码器,映射成特征向量序列。Stable Diffusion 早期版本用得比较多的是 CLIP 的文本分支,它会把你写的句子内部各个 token 转成一组向量,并附带区分每个词的语义权重。
很多初学用户有个误判,以为提示词越长越精确。其实文本编码器对长度有限制,通常最多处理 77 个 token。超过的部分会被直接截断,或者被压缩进剩余的语义槽里,效果往往不够理想。我自己写提示词时,会把最重要、最核心的元素放在前面,让模型优先处理,次要的装饰性描述放后面,避免关键信息被挤掉。对于超长描述,要么精简,要么拆分成多个阶段通过多段提示词处理。
这里也顺带解释了一个常见现象:为什么两个含义相近但措辞不同的提示词,出图风格差异会很大。因为 CLIP 文本编码是在特定图文配对约束下训练出来的,它眼中的“高质量”和你日常语言里的“高质量”并不完全一致。它更在乎那些在训练数据里高频关联的词组。所以提示词的措辞最好是贴近训练数据分布的说法,而不是写作文式的描写。
3.2 交叉注意力机制:文字如何“指挥”画面布局
拿到文本特征向量之后,U-Net 并不会简单地把它们拼进特征图了事。它会通过交叉注意力模块把文本特征和图像特征做关联:图像特征作为查询,文本特征作为键和值,来计算每个图像区域应该关注哪些文字含义。例如一条狗坐在沙滩上,交叉注意力会让图片左半边的特征更关注“狗”这个 token,右半边更关注“沙滩”这个 token。
这个机制你不需要会复现,但理解它能解释很多调参现象。比如为什么同样提示词,横构图和竖构图下物体位置会变化;为什么加了特定词之后,某个区域细节突然丰富起来;为什么有些提示词权重太低时,对应物体直接消失。交叉注意力的强度会随去噪步数变化,早期步侧重布局,中后期侧重纹理。所以不要在最后几步才想起来“我要加一个太阳”,那时候结构已经锁死了,模型能调整的空间非常有限。
一个更直观的体验是,把提示词里的主语移到最前面,画面中主体出现的位置清晰度通常会更好;把修饰词全部放到句尾,出图往往更干净。这其实就是交叉注意力在按权重分配“注意力预算”。
3.3 CFG引导强度:从一个“置信度旋钮”理解为什么常见7.5
仅仅把文本条件输入模型,模型对提示词的遵循度可能还不够,因为训练数据里也不是每张图都严格匹配文本。为了让生成更贴合提示词,Stable Diffusion 在推理时普遍会用到 CFG(Classifier-Free Guidance)。做法是不做随机采样,而是同时让模型分别预测“有条件(给定提示词)”下的噪声和“无条件(空提示词)”下的噪声,再按强度引导修正最终噪声:
epsilon = eps_uncond + scale * (eps_cond - eps_uncond)
这里 scale 通常叫 CFG Scale。当 scale=1 时,等于没有引导,输出更自由但也更容易偏离提示词;当 scale=7.5 时,模型会更坚持往提示词方向去噪;当 scale 超过 15 或 20,画面可能过度饱和、边缘发硬、对比度异常,甚至出现烧焦感。很多人只知道默认值 7.5,不知道它本质上是“有信心地靠向条件概率方向”,所以调太高反而破坏了概率自然的生成轨迹。
我在实际测试中体会是,写实类出图一般用 6 到 9;插画风可以稍微高一点,9 到 12;如果提示词本来就写得很具体,CFG 可以压低一点,给模型更多自由发挥空间。空提示词和条件提示词在早期步差异很小的特点也说明:CFG 对布局影响在早期有限,真正拉开差距的是中后期细节强化。
4. 炼金炉中真正影响成色的参数:采样器、步数与种子
同样的模型、同样的提示词,换一套采样器或步数,出来的图可能完全不是一回事。这类参数看着像是工程细节,其实是决定最终视觉成品最关键的一层。我在最初折腾时以为采样器只是速度差异,后来发现它的每一步更新逻辑都会影响画面风格,甚至细节纹理走向都不同。
4.1 采样器不是玄学:DPM++、Euler、DDIM到底差在哪
先搞清楚采样器的作用:模型只告诉我们“当前状态下噪声残差是多少”,而采样器负责根据这个残差算出“下一步走到哪里”。不同采样器,区别在于更新公式里是否包含额外随机扰动、是否做二阶校正、以及是否把预测噪声当作精确梯度。
我把常用采样器的特点整理成一张表,方便对照:
| 采样器 | 风格特点 | 推荐步数 | 说明 |
|---|---|---|---|
| Euler | 经典一阶采样,速度最快,画面锐利 | 20~30 | 线条感比较强,适合快速预览 |
| Euler a | Euler 的变体,带额外随机扰动 | 20~30 | 细节更丰富,但步数过高可能不稳定 |
| DDIM | 确定性采样,适合可控重绘 | 20~50 | 保留潜空间的连续性,适合图生图 |
| DPM++ 2M | 二阶自适应采样,整体均衡 | 20~30 | 目前综合表现最稳的选择之一 |
| DPM++ SDE | 带随机噪声的变体,质感更细腻 | 20~30 | 细节更丰富,但速度略慢 |
| DPM++ 3M SDE | 三阶版本,更精细 | 20~40 | 显存占用和耗时更高,追求极致时用 |
我自己用得最多的是 DPM++ 2M,步数 25 到 30,既不会有明显瑕疵也能保持效率。如果做线稿、概念草图,反而会特意换 Euler,画面更利落一些。SDE 变体适合需要丰富胶片颗粒感或皮肤质感的写实图,但同一提示词下可能增加随机性,批量出图时不利于逐张对照找问题。
4.2 步数为什么不是越多越好
说到步数,很多人会认为 100 步总比 20 步细致。其实步数增加只代表采样曲线切得更细,不代表一定更好。原因在于 CFG 引导和预测噪声之间存在累积误差,步数太多,每一步的偏差可能不是被修正,而是被持续放大,最终画面上出现微妙的过锐或过饱和。另外,二阶采样器本身已经在补偿误差,你强行堆步数只是浪费算力。
检测一个采样器是否到了合适步数,可以固定种子和提示词,分别跑 15、20、25、30、40 步,对比细节稳定度。通常 20 步后画面主体已经稳定,25 到 30 步是细节收敛区,超过 40 步提升很小。图生图任务里如果用重绘幅度比较高,倒是可以适当增加步数,因为高噪状态需要更多迭代才能恢复结构。
4.3 种子:可复现的随机,以及为什么能“接着生成”
Stable Diffusion 的起始噪声不是完全的混沌,它由随机种子生成。种子相同、模型相同、提示词相同、采样参数相同时,生成结果是可复现的。这点对调试非常有用:发现某张图某个部位特别好看,就把种子复制下来继续微调其他参数。种子变了,起始噪声就换了一张,整体构图、明暗、姿态都会受影响。
我常用种子做“两级搜索”:先锁定一个大概构图,然后固定种子,在提示词里增加细节描述,观察画面如何逐步变化;如果觉得风格方向不对,就换种子,重新探索几组候选,再回来微调提示词。这种做法比每次都随机乱换高效得多。
另外,图生图里还有个常见概念叫重绘幅度,它控制“从原图到目标噪声之间的距离”。重绘幅度越低,越是沿用原图的潜空间信息改动细节;越高,越接近重新生成。你可以把种子和重绘幅度理解成“在随机性的哪一层保留可控性”,这也是做局部修复时会反复调的两个值。
4.4 提示词与负面提示词的权重语法
提示词除了顺序,还可以显式调整权重。在多数 WebUI 实现里,可以用 (word:1.2) 提高权重,用 [word:0.8] 降低权重。高权重能让模型更重视某个特征,但也可能让整体布局失衡。我调整某个物体大小时会先试 1.1 这种小幅提升,而不是一步拉到 1.5,否则容易出现过拟合式的生硬观感。
负面提示词则是一种反向引导。它并不是真的告诉模型“不要画什么”,而是把某个概念作为条件输入模型,让模型计算该方向上的噪声趋势并在采样中尽量避免。这意味着负面提示词里的内容会被放大权重的视觉效果。比如负面提示词里写 low quality, bad hands, 就会明显降低这些特征的倾向。
实际操作中,负面提示词写太长作用反而会被稀释,最好集中在最影响观感的几项上:低画质、畸形结构、多余手指、文字水印等。另有一项经验:如果想修正某个具体问题但不想影响整体构图,负面提示词用 1.1 到 1.3 的权重即可,不必堆到 1.5 以上。
5. 实战中反复踩到的坑与排查链路
模型能出图,不等于能稳定出图。配置环境、调整显存、处理 VAE、修正主体畸变,这些坑我基本都遇到过一轮。踩坑过程往往不是一次定位,而是多条线索交织。我把自己常用的排查顺序和根因判断总结一下,给刚开始实践的人省些时间。
5.1 显存不足:从OOM错误开始的分级排查
显卡内存不够时最常见的表现就是第一次出图直接崩,命令行报 CUDA out of memory。很多人第一时间切换低显存模式,但问题未必只出在模式上。我的排查顺序是:
- 降低分辨率到 512×768 以下,先排除空间尺寸问题。
- 检查是否有多个进程在同时占用显存,比如后台开了别的推理服务或开了浏览器的大量硬件加速页面。
- 在 WebUI 启动参数里加 --medvram 或 --lowvram,前者把 U-Net 的中间层分摊到 CPU,降低单次显存峰值;后者更进一步,每跑一层才移送数据到显存。
- 如果还崩,检查 batch size 是否大于 1,一次并行出多张图会显著抬高显存峰值。
- 优化潜空间解码环节。有些插件会同时缓存多个模型副本,增加显存压力,可以把不必要的扩展禁用,逐项排查。
显存占用伴随一个反直觉现象:同样的参数,中途显存曲线可能在某一步突然拉满,而不是均匀增长。这往往是交叉注意力模块在某个分辨率层级产生的大尺寸中间张量。解决办法是把图像尺寸改成 64 的整数倍,比如 576 是 64 的 9 倍,512 是 8 倍,都能避免边缘填充带来的额外开销。
5.2 出图灰蒙蒙或花屏:VAE缺失是常见原因
如果你生成出来的图发灰、色彩脏、黑白噪点覆盖,或者局部出现类似电视雪花的花斑,大概率不是模型坏了,而是缺少合适的 VAE。前面说过自编码器负责潜空间与像素空间的互相转换,如果推理脚本没有加载正确的解码器权重,潜向量无法被正确还原成图片。
检查方法很简单:看生成图的色彩饱和度和明度是不是异常低。正常的 SD 出图,即使偏暗,也有相对自然的动态范围。VAE 缺失时图会像蒙了一层薄灰,人体肤色尤其明显偏土黄。还有一个特点是,多次生成后每张图的“灰色程度”几乎一致,与提示词无关,看到这种规律基本能确认。
修复方式就是给模型加上一个合适的 VAE 文件,然后在模型配置里指定它。很多 WebUI 也支持单独替换 VAE,不用改代码。加了 VAE 之后再跑同一张图,色彩分布立刻正常。如果你换的是社区训练过的 VAE,还可能让画面色彩更鲜艳,此时要留意有没有过度饱和,别为了“好看”盲目叠加。
5.3 主体畸变与肢体错乱:采样器、CFG、负面提示词的共同作用
生成人物时最常见的是手指多或少、手臂扭曲、眼睛错位。这类问题不单是模型强度不够,还和采样器在细节阶段的步进方式有关。用确定性采样器时,如果步数偏少,局部几何约束不够;用高 CFG 时,模型会过度确信自己补出的局部结构,畸形反而被强化。
我处理这类问题的组合拳是:把采样器换成 DPM++ 2M 一类的均衡型;步数加到 25 以上,但不超过 35;CFG 控制在 6.5 到 8;负面提示词加入 hands、fingers、limbs 等部位相关负面描述。如果还不行,降低重绘幅度,在原图基础上做局部修补,而不是全图重新生成。
这里还有个容易被忽略的细节:提示词里同时出现多个身体特征描述时,交叉注意力可能把不同部位的属性混叠。比如“红色头发+红色衣服”,模型有时会把两处特征一起溢出。解决方法是把颜色尽量绑定在具体对象上,不单独出现多余颜色词,或降低颜色词权重。
5.4 一张排查对照表
把上面的经验压成一张表,遇到问题可以先对照定位:
| 症状 | 常见根因 | 优先检查项 |
|---|---|---|
| OOM 崩溃 | 显存不足/分辨率过高/多进程占用 | 分辨率、低显存模式、后台进程 |
| 图片灰、花屏 | VAE 缺失或异常 | VAE 文件是否加载正确 |
| 主体模糊无细节 | 步数不足/采样器不匹配 | 提高步数到 25,换 DPM++ 2M |
| 过度对比、烧焦感 | CFG 过高 | 把 Scale 降到 7 左右 |
| 肢体重复、错位 | 文本权重冲突/负面提示词不足 | 降低相关词权重,补充负面词 |
| 构图飘忽、不稳定 | 种子频繁变换 | 固定种子,只调整提示词再次对比 |
排查时最重要的是先固定变量。一次只动一个参数,记录结果,不要同时换采样器、改 CFG、换种子,那样出了问题根本分不清是谁引起的。我自己遇到过整整一下午调图没找到原因,回头发现是模型没切换干净,多个版本混在一个目录里。所以建立自己的调试目录也很必要,每个实验一套独立的模型、VAE、采样配置,至少不会被环境噪声干扰判断。
6. “炼金术”的进阶延伸:ControlNet、LoRA与模型融合
如果你已经能稳定出图,接下来自然想知道如何进一步控制画面。Stable Diffusion 的可玩性很大程度上来自它开放了模型结构,允许外部模块插入到采样流程中。这里只挑三个最常见的方向,它们其实都建立在前面所述的基础机制上。
6.1 ControlNet:把构图主动权拿回手里
ControlNet 的核心是用额外输入(姿势骨架、深度图、边缘图、分割图等)约束 U-Net 的生成条件。它不改变 U-Net 本身,而是在主模型旁边加入一个可训练的副本,通过受限卷积层把控制信息注入到不同尺度的特征中。训练副本时,主模型权重保持不变,所以同一个基础模型可以叠加多种控制方式。
实际应用里最典型的是,先用一张照片提取人物姿势骨架,再用 ControlNet 把骨架输入,然后在提示词里改成想要的新角色。这样角色姿态和背景可以重新绘制,但动作结构基本沿用原图。我常用的是 Canny 边缘和 OpenPose 姿态,前者适合保留原图轮廓进行风格转换,后者适合人物动作迁移。还有一个常见做法是配合深度图来控制空间关系,特别适合场景合成。
用 ControlNet 时,控制强度参数不能开满,否则生成结果会被边缘、骨架完全绑架,变成“照着描”,丢失模型本身的生成多样性。一般从 0.6 到 0.8 开始调,根据控制程度需要微调。如果控制信息本身存在噪声或断线,也会被直接放大到画面里,所以预处理质量很重要。
6.2 LoRA:低成本微调特定风格
LoRA 是一种参数高效的微调方法,它不去重新训练整个模型,而是训练一组低秩增量矩阵,注入到原始权重附近。这样能在较小显存下,为某个特定风格或角色做定向适配,推理时通过控制权重决定影响强弱。
它的用法也像“风格插件”:想要某位画师的色彩风格,就加载对应 LoRA 文件,调整权重到 0.8 左右;想要某个虚构角色的特征,也可以叠加对应 LoRA。多个 LoRA 可以同时加载,但要留意权重叠加可能导致冲突。我在测试中遇到过两三个风格同时加载时,画面会出现互相“打架”的怪异感,比如线条是 A 风格,配色却是 B 风格,整体观感非常割裂。建议同时只挂一两个 LoRA,且权重从低到高逐次增加。
理解 LoRA 的本质之后,你还会发现它可以和 ControlNet 强强联合。比如用 LoRA 锁定某个角色面部特征,用 ControlNet 锁定指定动作,再配合基础模型生成完整场景,这是目前比较流行的角色一致性方案,投入产出比很高。
6.3 模型融合:Checkpoint混搭
除了上述两种,还有一种更“炼金”的玩法:把两个基础模型按比例混合成一个新的 Checkpoint。融合的原理本质上是对模型权重做线性插值,比如按 70% A 模型和 30% B 模型的比例混合权重,得到兼具两者风格的模型。你可以把 A 理解为光线质感更好的写实底子,B 理解为色彩更浓厚的插画风,混合后得到一个中间态。
我在做模型融合时,最常用的比例是 6:4 或 7:3,很少做五五开,因为五五开往往两头都不讨好,特定风格特征反而被削弱。融合后要在不同提示词下做多次测试,如果线条变脏或颜色偏灰,就调整比例重来。这个方法特别适合没有精力训练 LoRA、但又想要独特风格底模的玩家,操作也比训练一座模型轻量得多。
这里顺带提一句:模型融合和 LoRA 的方向不同,融合是改变模型整体倾向,LoRA 是给模型添加一个局部调优通道,两者可以叠加使用,但每次改动都要记录参数组合,否则后期回溯很痛苦。
现在回头看看,从“一团噪声为什么会变成画面”到“如何用参数和插件控制这个过程”,Stable Diffusion 的整套体系已经变得非常工程化了。它确实像一门炼金术,但炼金术的可贵不在于结果玄妙,而在于配方可以被记录、被调整、被复现。希望这篇拆解能帮你少走一些弯路,把更多时间花在真正有意思的画面探索上。你在调试过程中如果也碰到过特别莫名其妙的问题,欢迎回来交流排查过程,互相借鉴总是比自己闷头折腾来得快。
