
很多人第一次用 Stable Diffusion 生成出图时脑子里蹦出来的问题往往是“它怎么知道我想要什么”。你给它一句 prompt它就能把画面里的人物、光影、风格全都安排明白甚至比你手绘还快。但真要追一句“它到底是怎么画出来的”能讲清楚的人其实不多。这篇就当一份核心原理解析兼技术精讲版来写不绕圈子尽量用大白话把 Stable Diffusion 的画图机制掰开揉碎。我会从扩散模型的底层思路开始聊到模型文件的选型逻辑再给出一套可以直接上手的实操链路最后把常见的翻车问题按图索骥地排查一遍。适合两类人一是刚入门、用网页版或本地工具跑过图但一知半解的新手二是天天出图但只知道“采样器换一下风格就变了”的进阶玩家。1. Stable Diffusion如何“练”出画画能力1.1 训练分成两个阶段加噪学破坏去噪学还原Stable Diffusion 的画画能力本质不是像人类一样学素描、学构图而是学一种“还原”的能力。这个还原过程非常像你手上拿着一张照片然后把它一点一点丢进雪花屏里直到画面完全变成噪点之后你再运转大脑试着从噪点里把它恢复出来。在训练阶段干的是这件事取一张真实图片按不同强度往上叠加高斯噪声让图片逐渐变成一团乱码。模型要做的事情就是给它一张被加过噪的图让它预测“噪声是什么样子的”从而反推出原图。这个过程反复进行模型就会变得越来越擅长从噪声里找回图像结构。到了生成阶段模型被丢进一个全新的游戏里给它一张纯粹由随机噪点组成的图让它一次次“去噪”。一开始画面什么都不是但每去噪一步一只猫的轮廓、一束光的形状、一层皮肤质感就慢慢浮现出来。本质上Stable Diffusion 不是在“创作”画面而是在“雕刻”画面把一块石头削成大理石的维纳斯。这里有一个很关键的思想如何让模型记住训练数据里的语义特征答案是把图像变成一种可压缩的表示而不是直接在高分辨率像素上硬算。直接对 512×512 的像素做扩散每一步都要处理几十万维数据训练和推理会变得无比昂贵。所以训练时还要做一件事先压缩再学习。1.2 三块核心部件VAE、U-Net、CLIPStable Diffusion 的完整链路里有三块部件缺一不可它们各管一段**VAE变分自编码器**负责“压缩”。它把高分辨率图片变成潜空间里的低分辨率表示比如把 512×512 的像素图压成 64×64 的潜变量。相当于把一幅画缩印成一张“提示卡”保留关键纹理和结构丢掉冗余细节。出图时VAE 的解码器再把潜变量还原回像素图。U-Net才是真正的“画家”。它在潜空间里逐次预测噪声并把它移除。你可以把它理解成一块带有“时间感知”的橡皮擦每一步都知道自己该擦掉多少噪声从而让画面逐渐清晰。**CLIP文本编码器**负责“翻译”。它把你的英文 prompt 编码成一个条件向量告诉 U-Net“往这个语义方向去噪”。没有它Stable Diffusion 就是无序噪声抽取机你给它一百个提示词它也只会随机画。这三块合起来整条画面生成链路就变成CLIP 把文字变成条件向量VAE 把噪声图和条件向量压到潜空间U-Net 在这个空间里反复去噪十几步到几十步最后 VAE 解码成一张完整的 RGB 图。这个设计最精妙的地方在于它把“理解语义”和“去除噪声”解耦了。CLIP 告诉你目标是什么U-Net 只负责执行。所以你切换一个不同的底模等于换了一个不同脾气的“画家”而换一个 VAE等于换了不同风格的“画框”。注意SD 的训练和生成其实是同一个模型的两种情况训练时学“预测噪声”生成时反着用“减去噪声”。理解这一点后面调试参数时就不容易犯糊涂。2. 选择模型文件的底层逻辑2.1 底模决定了基本功每次你在 WebUI 里换一个 checkpoint出图风格都会有明显变化这不只是“滤镜不同”。底模是在某个数据集上用扩散方式训练出的完整权重文件数据集决定了它的审美偏好。目前主流有 SD1.5、SD2.1、SDXL 这几代路线。SD1.5 生态最丰富社区里大量 LoRA 都基于它训练SD2.1 在提示词理解上更贴近 CLIP 的语义空间但民间模型数量不如 1.5SDXL 原生支持更大分辨率输入图层关系、光影细节都比老模型更好但显存门槛也更高。选择底模时不要只看名字要看它的“专长”。有的底模大量用真人照片训练皮肤纹理和光影就真实有的底模专攻二次元线条感和色彩倾向就会更重。如果你想要写实风却选了个动漫底模那怎么调提示词都会有一股塑料味。实操心得我自己选底模时会先在 Hugging Face 或 Civitai 上看模型页面给出的示例图和训练集描述看它的“性格”是不是我要的而不是盲从下载量。跑出来的第一张图先不看细节只看整体色调和人物比例是否正常。2.2 LoRA和VAE在出图链路里的补位LoRA 是一种轻量级微调方式它不是重新训练整个大模型而是在原有权重上挂一小块“补丁”。它的体积一般只有几十 MB 到几百 MB却能精准控制人物长相、画风或特定元素。它的意义在于节约资源。你要训练一个完整底模需要几百 GB 的数据和多卡训练几天而训练一个 LoRA 只需要几十张图片、一张消费级显卡、几小时就能完成。所以在实际项目中底模确定了基础风格LoRA 用来做“局部长相/物品/氛围”的定向增强。VAE 则更像一个色彩校准插件。底模训练时如果没内置 VAE出图颜色会发灰发闷套上合适的 VAE 后皮肤质感、蓝天绿树的饱和度和通透度都会提升。有些底模已经内置了 VAE就不需要额外挂载有些则需要手动指定否则画面容易出现“灰蒙蒙”的问题。这三层叠加的关系可以这样理解底模是大楼的钢筋混凝土LoRA 是房间里的大理石拼花和软装VAE 是给整间屋子调灯光的开关。少了底模什么都没有有底模没 LoRA细节会平淡有 LoRA 没 VAE画面可能发灰。2.3 不同版本模型的实际观感差距用 SD1.5 与 SDXL 跑同一段提示词能明显感觉到差异。SDXL 在手部结构、复杂背景层次、远景虚化上通常更稳健SD1.5 则更依赖提示词技巧和外挂 LoRA 救场。你也可以在同版本底模间切换对比比如在 SD1.5 生态里有的底模侧重“厚涂油画感”有的侧重“摄影直出感”这来自训练集里图片的平均质量分布。所以“同一个关键词出图却千差万别”根源通常就是底模差异而不是你输入错了。经验总结一个合格的模型选择流程是“先跑三张固定种子图再换模型”。拿同样的提示词和参数在两个候选底模上各生成三张图对比纵横比、脸部精度、手指细节和色彩倾向你很快能看出哪个底模更合适。3. 实战从提示词到出图的完整链路3.1 采样器、步数、CFG一组互相拉扯的参数生成一张图不只是点一下“Generate”按钮那么简单。采样器、步数、CFG 这三个参数是互相牵制的很多人觉得“换了个采样器出图变好看了”但没搞懂它们各自做了什么。先说采样器。U-Net 每次只能预测噪声但具体怎么一步步从噪声走到清晰图像需要一个“走法”这个走法就是采样器。常见的 Euler a 和 DPM 2M Karras 用起来最稳前者偏柔和后者细节更锐利。DDIM 则更靠近一种效率优先的路线步骤少了也能出形但精细度不足。再说步数。步数决定“走多少次去噪”。步数太少画面还没完全从噪声里成形会混沌步数太多大部分采样器在超过一定步数后就不再增益甚至可能引入伪影。我给 SD1.5 模型常用的区间是 20~30 步SDXL 可以适当增加到 30~40 步。CFG 是“提示词引导强度”。它决定模型有多乖CFG 设得太低模型对着 prompt 爱理不理画面会偏散偏弱设得太高模型又容易用力过猛产生过曝、线条发硬、画面脏脏的“烧糊感”。经验值一般放在 7~9 之间。SDXL 有时候放在 4~6 更自然。除了这三个还有一个容易被忽略的东西种子seed。种子决定初始随机噪声图长什么样同样的提示词加上不同的种子细节会完全不同。调试参数时必须固定 seed否则你换了采样器看不出是采样器还是随机性在起作用。3.2 提示词的写法与权重控制提示词结构是实操里最影响出图质量的一环。它不是叫你把所有描述堆在一起而是要学会分层。通常我会按“质量前缀 主体内容 环境描述 风格限定”来组织。用一张乡村小屋作为例子(masterpiece, best quality:1.2), a small wooden cabin in the forest, morning sunlight, volumetric fog, lush green trees, photorealistic, 8k, detailed texture第一层“masterpiece, best quality”是质量标签。不同底模对这些词的理解不一样有的底模甚至已经内置了这种偏好所以不要迷信这些词能凭空提高画质它们更多是帮助模型往“精修”方向走。第二层是主体和场景。注意拆分主体放最前场景其次光线材质再往后。模型对位置权重是有强弱的离得越近的词通常更容易被响应。权重控制用括号加数字如(lush green trees:1.2)表示加强这个元素 1.2 倍(blur:0.8)表示减弱。这个操作是对 CLIP 得到的嵌入向量做缩放不是简单地让模型多听一点。第三层是风格和画质后缀比如“photorealistic, 8k”对于写实底模有用对于二次元底模则作用有限。所以提示词也要跟着底模走别拿一套 prompt 往所有模型上套。注意负面提示词一样关键。我每次通常会写lowres, bad anatomy, bad hands, extra fingers, blurry, watermark。它帮助 U-Net 避开常见的坏结果是唯一不需要太多解释、但效果立竿见影的步骤。3.3 移动端跑步的体验和硬件边界聊到“stable diffusion android 1.1.2”这类移动端版本其实核心逻辑和桌面端是一样的只是硬件边界给体验画了一道线。手机端跑图必须面对“内存小、算力弱”这两个现实。安卓版一般通过量化和减少扩散步数来适配有的把模型精度压到 FP16再配合切片计算才能勉强跑起来。出图的体验属于“能看但有点慢”。一张 512×512 的图在旗舰手机上可能要几十秒到一分钟在低端机上就基本不可用了。移动端更适合用来做“便携出图”而不是“重度创作”。你上班路上想到一个画面随手打开手机配上一句提示词先看个雏形回来再用电脑精修这就是移动端最大的价值。别指望手机能一步到位跑 SDXL那不是硬件该干的活。4. 翻车现场与排查心得4.1 显存不足、速度慢先别急着打补丁最常遇到的翻车就是“Out of memory”或者出图卡死。这不是你操作错误而是资源不够用。一个稳定的应对思路是按顺序降负载先降低分辨率从 768×768 降到 640×640显存占用会明显下降再把批量大小 batch size 调到 1一次只生成一张图如果还不行在 WebUI 里开启 medvram 模式或模型切块把显存占用摊到内存上。对于速度慢很多人第一反应是加显卡但实际上是步数和采样器选择影响更大。同样的效果用 DPM 2M Karras 30 步可能比 Euler a 40 步还快且更干净。再就是启用 xformers 或类似的内存优化机制能省下大量计算时间。实操心得我把显存从 6GB 升级到 12GB 后发现瓶颈从“出不了图”变成了“采样器不够细”。所以如果你 6GB 显存跑不动 SD优先减步骤、减分辨率如果 12GB 还慢再考虑显卡问题。4.2 崩图、黑图、糊图的常见成因图像崩坏通常有几种表现人脸糊成一团、手指多出两节、线条发黑发硬、色彩灰暗无神。这些现象分别对应不同原因。如果整张图都脏脏的CFG 太高是头号嫌疑。把 CFG 从 12 降回 7 左右往往瞬间从“烧灼感”变成“通透感”。如果整体画面发灰VAE 大概率没挂上换一个合适的 VAE 再看。如果手部崩坏严重SD1.5 的老毛病要么加负面提示词里写“bad hands, extra fingers”要么用后续局部重绘手动修手SDXL 在这块会好很多。黑图问题也常见生成结果完全是一团黑通常是 VAE 文件与模型不兼容或者采样器步数太少。前者替换 VAE 即可后者增加步数到 20 以上。4.3 问题排查速查表症状最常见原因优先排查动作出图崩溃或花屏CFG 过高、采样器不匹配降低 CFG 到 7~9换 Euler a颜色发灰VAE 缺失或不匹配挂载官方 VAE 或合适替代人脸/手部扭曲底模对局部结构理解弱加负面提示词、局部重绘整图糊步数太少提升到 25~30 步慢到不能忍步数过多、未开加速优化减少步数、启用优化模块移动端闪退内存不足、模型过大换成量化模型、降低分辨率排查时先动一个变量固定其他变量。不要同时改 CFG、采样器和步数否则你看不出是哪个参数救了图。最后分享一个我自己调试的习惯无论别人给的参数有多么“万能”我都会在第一次复现时把种子固定住然后只改一个参数。种子固定相当于永远用同一张“底噪图”开局这样你每调一个采样器、一个 CFG 或一段提示词都能清楚看到它对画面的真实作用。毕竟 Stable Diffusion 的随机性很强不锁住种子你根本分不清效果来自你的调整还是运气。另一个习惯是不要把某个模型、某组参数当成“标准答案”。每个底模都有脾气每个采样器都有自己的步数舒适区。先用同一张种子图把所有采样器跑一遍把结果都看一眼你才能真正摸清自己手上这套组合的极限在哪。这才是理解“Stable Diffusion 是怎么画画”的最实用一步。