图像生成原理与控制方法
# 图像生成原理与控制方法
图像生成不是从素材库里找一张图,而是让模型根据文字、参考图等条件逐步构造新图像。 不同模型的架构和控制方式不同,下面以 Stable Diffusion 一类潜空间扩散模型为主。
# 从噪声到图片发生了什么
可以先把噪声理解成一幅杂乱的雪花图。以生成一只橘猫为例,输入文字并不会直接变成像素,而是作为条件,指导模型在多次计算中逐渐形成猫的轮廓、毛色和背景。
模型之所以会这个过程,是因为训练时见过图片及其加噪后的状态,学习了怎样预测去噪所需的信息。生成时没有一张被遮住的原图等待恢复,而是在文字等条件下构造新图。部分新模型使用流匹配等训练方式,不能把内部实现全部视为相同。
Stable Diffusion 主要在压缩后的图像表示中计算,而不是每一步都处理完整像素。这个压缩表示叫 latent(潜变量):可以理解成保留图像主要信息、但不能直接作为普通图片观看的数据。
| 组件 | 具体作用 | 容易混淆的地方 |
|---|---|---|
| 文本编码器 | 把提示词变成模型能使用的数值表示 | 不是直接画图的组件 |
| 去噪网络 | 根据当前图像表示、时间步和条件预测更新方向 | 不同模型可能使用 U-Net 或 Transformer |
| VAE | 在像素图片与潜变量之间编码、解码 | 不是单纯改善颜色的滤镜 |
| 采样器与调度器 | 决定每一步如何更新、经过哪些噪声阶段 | Euler a 是采样方法,不是迭代次数 |
| Checkpoint | 保存模型权重,具体包含哪些组件由格式决定 | 不等于每个文件都包含完整运行环境 |
| LoRA | 给基座模型增加少量可训练参数,改变特定风格或行为 | 不是从大模型里裁剪一部分出来 |
VAE 是 Variational Autoencoder(变分自编码器)。文生图通常用它解码最终图像;图生图还需要先把输入图片编码到潜空间。它必须与所用模型兼容。
连起来看,一次文生图就是:文字编码器读懂条件 → 去噪网络在潜空间生成 → VAE 解码成图片。采样器负责安排中间每次怎样更新,Steps 决定更新多少次。
# 训练时加噪,为什么生成时能去噪
训练时有一张已知图片,把它编码后加入不同程度的噪声,模型学习根据带噪数据、噪声阶段和文字条件预测需要去掉的噪声或其他等价目标。因为正确目标已知,就能计算误差并更新参数。
推理时没有对应的原图,而是先生成随机噪声,再按照模型学到的规律逐步更新。例如早期大致形成猫和沙发的位置,后续逐渐细化纹理;这种描述帮助理解过程,并不表示每个时间步都严格对应某个固定语义动作。
训练是在学习生成规律,推理是在使用规律生成这一次的结果。 多调几次 Seed、跑 50 个采样步骤,都不等于把模型又训练了一遍。
为什么在 latent 中做?假设图片的宽高都很大,直接在所有像素上反复计算成本很高。VAE 先把视觉信息压缩,生成网络在更小的表示上工作,最后才解码。代价是压缩与解码可能丢失细节,所以细小文字、规则线条和商标仍需要专门验收。
# CFG 为什么能加强提示词,又为什么不能无限调大
经典 CFG 会结合带文字条件与不带文字条件的预测,用两者的差异加强条件的影响。概念上可以写为:
引导后的预测 = 无条件预测 + guidance ×(有条件预测 − 无条件预测)
它不是给模型额外增加了理解能力,而是在已有预测方向上加大偏向。比如提示词要求红色,过强引导可能把颜色推得过饱和,而不是更真实。带负面条件、蒸馏或采用其他 guidance 设计的模型,具体形式和推荐数值不完全相同。
# 参数应该怎么理解
| 参数 | 人话解释 | 调节时注意什么 |
|---|---|---|
| Seed | 初始化随机数过程的种子 | 同种子还要配合同模型、参数、节点和环境,才能较好复现 |
| Steps | 生成时迭代多少次 | 不是越多越好;蒸馏模型可能只适合很少的步骤 |
| CFG / guidance | 以常见 CFG 为例,增强条件对生成方向的影响 | 太高可能失真;不同模型并非都使用相同形式 |
| Denoise strength | 图生图时允许偏离原图多少 | 通常越高改动越大,但含义受工作流影响 |
| 分辨率 | 输出尺寸,也影响显存和计算量 | 优先用模型支持的尺寸,再做放大 |
提示词先写主体、动作、场景和构图,再补风格、光线、限制条件。负面提示词并非所有模型都支持,也不能保证消除所有错误;WebUI 中的括号权重语法也不是所有 API 的通用语法。
例如先用:一只白色陶瓷杯放在木桌上,背景为咖啡馆,左侧自然光,右侧留白,产品摄影。保持模型、Seed 和尺寸不变,只把光线改成暖色灯光,再比较两张图。这样才能知道改变来自哪里,而不是同时调五个参数后凭感觉猜。
CFG 是 Classifier-Free Guidance(无分类器引导)。直观理解是增加文字条件对生成方向的影响,不是越大就越懂你的意思;出现颜色过饱和或边缘失真时,应回到模型推荐范围再比较。
# 想控制结果,分别用什么
| 需求 | 常用方法 | 为什么有效 |
|---|---|---|
| 保持姿势、轮廓或空间布局 | ControlNet 的姿态、边缘、深度等条件 | 增加结构输入,减少纯文字描述的歧义 |
| 参考一张图的风格或主体特征 | 图像条件、IP-Adapter 等兼容组件 | 提供视觉参考,但不能保证身份和细节完全一致 |
| 修改局部物体 | Inpainting(局部重绘) | 用蒙版指定修改区域,尽量保留其余部分 |
| 扩展画布 | Outpainting(扩图) | 根据已有边缘生成外部内容 |
| 固定角色或特定风格 | 对应基座的 LoRA | 学习反复需要的视觉模式,仍需要评估泛化与过拟合 |
ControlNet 需要和基座家族、预处理器及条件类型匹配。边缘图模型不能直接当成任意深度图模型使用;SD 1.5 的附件也不能默认装到 SDXL 等不同架构上。
# ControlNet:先提取结构,再拿结构约束生成
以保留商品轮廓为例,完整过程不是随便上传图片就结束:
- 预处理器从图片提取边缘、深度或姿态等结构条件。例如 Canny 得到边缘线,深度估计得到远近关系。
- 选择与基座模型和条件类型匹配的 ControlNet 权重,将结构信号加入生成过程。
- 文字描述材质、环境和风格,结构条件限制位置与轮廓,两者共同影响结果。
- 调节控制强度和作用的采样阶段,比较结构保持程度与创作自由度。
控制太弱,杯把可能移动;控制太强,背景和构图也可能被锁死。姿态条件通常只表示骨架位置,不包含完整服装和身份;深度条件表示远近,不自动保证准确工程尺寸。
IP-Adapter 等图像参考组件更关注图片提供的视觉特征,ControlNet 更偏结构约束。两者可以结合,但同一个人物或商品的细节一致性仍要用样例验证,不能只凭方法名称保证。
# LoRA:学一类风格,不是保存一张模板图
LoRA 是 Low-Rank Adaptation(低秩适配)。训练时通常冻结基座的大部分权重,用较小的参数矩阵学习增量;推理时将这份增量与兼容基座结合。
比如经常需要同一种插画风格,反复写长提示词仍不稳定,可以考虑用授权数据训练风格 LoRA。若只是本次换背景,使用参考图或局部重绘往往更直接,没必要为一次需求训练。
使用时需要注意三件事:基座架构是否匹配、训练数据是否覆盖足够变化、权重强度是否合适。强度太高可能让所有场景都像训练样本,多个 LoRA 叠加也可能互相影响。具体低秩矩阵与量化原理复用 LoRA 与 QLoRA,不把语言模型的对话训练配置直接套给图像模型。
# 局部重绘和放大怎样避免越改越坏
局部重绘先准备原图和蒙版:蒙版指定允许生成的区域,周边像素提供衔接上下文。修杯把时,蒙版要覆盖错误处和少量过渡边缘;只选极窄的一条线,可能难以形成自然连接。具体黑白含义以节点预览为准。
去噪强度通常影响改动幅度。太低可能保留错误,太高可能连正确的外观也改变。先固定种子和其他参数,只调整蒙版与强度,检查边缘接缝和商品一致性。
放大有两种不同动作:普通或学习式超分辨率提升分辨率;扩散重绘式放大还会重新生成细节。后者可能让材质更丰富,也可能改掉文字、商标和脸。需要精确保留的区域应独立保护,不能将新增细节当成从原图里恢复的事实。
# 商品海报怎样一步步做
- 用经过授权的商品照片作为参考,明确不能改变的外观特征。
- 先生成背景和构图;需要保持轮廓时增加结构条件。
- 用蒙版局部修正瑕疵,不必每次整张重新生成。
- 用排版程序叠加准确的商品名、价格、活动时间和二维码。
- 检查多种屏幕尺寸;二维码要用真实手机、多角度、多亮度扫码验收。
艺术二维码的具体操作见 制作艺术二维码。视觉效果和可扫描性存在权衡,不能仅凭看起来像二维码判断成功。
# 用一组对照实验建立参数直觉
固定同一个基座、同一份输入、同一个 Seed 和输出尺寸,每组只改变一个因素:
| 实验 | 要观察什么 | 能得到什么判断 |
|---|---|---|
| 模板默认 Steps 与更高 Steps 对比 | 细节、耗时、伪影是否改善 | 增加计算是否值得,而不是越多越好 |
| 推荐范围内降低与提高 CFG | 条件遵循、颜色、边缘变化 | 是否已经过度引导 |
| 图生图低与高 denoise 对比 | 主体保留与场景变化 | 可接受的修改范围 |
| 开关结构控制 | 轮廓与布局是否更稳定 | 结构条件是否解决当前问题 |
| 加载 LoRA 前后对比 | 风格变化、细节偏差 | 学到的是目标风格还是过拟合样本 |
记录生成耗时和最终选用率。10 张都很好看但没有一张保留正确商品形状,业务验收仍是失败;不要只看审美分数。
# 面试问答
1. Stable Diffusion 是怎样根据文字生成图片的?参考答案
它先把文字编码成条件,再从随机噪声开始,在压缩后的图像空间里逐步生成,最后由 VAE 解码成可见图片。比如我写橘猫和蓝色沙发,这些条件会影响生成方向,不是从图库里直接找一张现成照片。模型、采样参数和随机种子不同,结果也会变化。
2. Prompt、ControlNet 和 LoRA 有什么区别?参考答案
Prompt 描述我想要什么,ControlNet 约束画面结构,LoRA 调整模型擅长生成的模式。比如做固定角色海报,Prompt 写场景,ControlNet 控制姿势,LoRA 帮助保持角色风格。三者可以组合,但都不能替代最终的外观和版权检查。
3. 为什么固定 Seed,图片还可能不同?参考答案
Seed 只固定随机过程的一个入口。模型权重、采样器、步数、分辨率、节点实现和计算环境也会改变结果。所以我要复现一次生成,会保存整个工作流和模型版本,而不只是记录一个 Seed。