1、介绍
Differential Diffusion(差异扩散)是 Stable Diffusion 社区提出的一种特殊推理方法,目标是:
- 让生成结果尽可能接近原图,但只改变你想要修改的部分,并保持其他部分几乎不变。
- 简单来说,它是一种“更聪明的 inpainting / 图像微调”方式。
2、该节点思想
普通的 img2img / inpaint 有两个问题:
- 噪声引入过多 → 即使只想改局部,其他地方也会被重绘,结果整体变动很大。
- 细节丢失 → 细节和风格可能偏离原始图像。
差异扩散 的思路是:
- 对原图做一次扩散过程,得到“原图的噪声轨迹”。
- 对目标生成也做扩散,但在每一步把生成结果和原图的噪声轨迹做差异约束,保证尽量不改动没必要修改的区域。
3、在 ComfyUI 的应用
在 ComfyUI 里,Differential Diffusion 节点通常用于:
- 局部精修:比如只调整角色表情、衣服、光照,而背景完全不动。
- 迭代优化:可以多次微调图像,而不会越改越崩。
- 风格统一:生成多张图片时,保持角色一致、场景一致。
它比普通 inpainting 更适合 精细调整,特别是在你想保留大部分原始图像时。
4、使用场景
- 人脸修复:只微调五官,不影响背景。
- 插画改色:只改衣服颜色,保持线条一致。
- 大图拼接:只补缝隙部分,保证拼接无痕。
- 动画帧一致性:保持角色形象稳定,只做细微变化。
5、普通扩散与差异扩散流程对比
普通扩散:
1.加噪声:把原图加上随机噪声
2.去噪循环:一步步预测噪声 → 得到干净图像
3.最终输出:解码成图片
这种方式,每一步只要跑一次 UNet 推理。
差异扩散:
差异扩散在上面的基础上,加了这些额外操作:
1.预先对原图做一次扩散 → 得到原图的噪声轨迹(也就是“原图在每一步该长什么样”)
2.在每一步去噪时:
- 不只预测当前噪声
- 还要和原图的噪声轨迹做对比
- 再按权重合并两者,让生成结果“靠近原图”
也就是说,每一步都要多做一次对比和插值运算,有时甚至要多跑一遍 UNet 来获取参考噪声。
注意:
1.显存占用更高:因为要同时计算原图和新图的噪声轨迹。
2.生成速度更慢:多了一步差异计算。
3.参数敏感:差异权重太高,几乎没变化;太低,效果和普通 img2img 差不多。