图生图(Image-to-Image):给 AI 一张底图,它怎么在上面改而不是重画

我第一次用 Stable Diffusion 的 img2img 功能时,脑子里冒出一个非常朴素的困惑:我给它一张照片,它先往上撒一层噪点,然后再一点点把噪点去掉,最后出来的图居然跟原图大结构差不多,但风格、细节全变了——这听起来就像把一碗汤弄脏了再滤干净,结果汤变成了可乐。为什么不是直接得到一张全新的图?

a blue object with wavy shapes on a black background

后来我才搞明白,这个“加噪—降噪”的过程,恰恰是解锁图像编辑的关键。它不是魔法,而是一个设计极为精巧的条件生成技巧。要理解它,得先回到扩散模型最底层的训练逻辑。

扩散模型学到的不是“画图”,而是“去噪”

扩散模型——比如 DDPM——在训练时做了一件很反直觉的事:把一张清晰的图逐步加噪,直到完全变成纯噪声,然后训练一个神经网络,让它学会从任意噪声状态下恢复出清晰的图像。这个网络其实是在学“给定一个带噪图和当前噪声程度,预测出噪声本身是什么”。

你可能会想,这跟改图有什么关系?关键在于:当网络学会去噪时,它同时学会了一种对图像结构的“理解”。因为只有在知道图像原本是什么样的情况下,它才能准确分离出噪声。这意味着,如果你给网络一个有点噪声的图,它不仅能把它变清晰,还能在变清晰的过程中,根据自己的“审美”(由训练数据和提示词引导)补全细节。

我在读论文时就卡在这里:为什么它不会直接复现原图?原因在于,去噪网络不是做“逆运算”,它每一步都带有一定的随机性,而且训练时从未要求它精确还原,只要求它让去噪后的图像符合“清晰图像”的分布。所以,给同一个带噪图,网络每次可能往不同的方向去清晰化——这就给编辑留出了空间。

图生图的核心操作:在噪声的中间站下车

文生图是从纯噪声开始,一步步去噪生成全新图像。而图生图不同:它先把输入图像编码到潜在空间(如果是 Stable Diffusion 这类潜在扩散模型),然后只加一部分噪声,而不是完全加满。比如扩散模型总步数是 50,我可能只加到第 30 步的状态,然后从那个状态开始去噪。

这个“加噪程度”就是 denoising strength(去噪强度)。它是整个图生图里最核心的参数:

  • 强度设为 0:不加噪,去噪过程直接输出原图(几乎一模一样)。
  • 强度设为 1:完全加满噪声,等同于文生图,生成结果完全不受原图约束。
  • 强度在 0.3-0.7 之间:保留原图的大结构,但纹理、颜色、光照会根据提示词变化。

我第一次调节这个参数时,以为它只是控制“改变量”,结果发现一个更微妙的现象:低强度下,大轮廓不变,但表面材质可以完全换掉。比如把一张照片转成水彩画,强度 0.4 时,人脸还是那张脸,但笔触、色彩全变了。这其实是因为扩散模型在去噪时,会优先恢复低频信息(整体形状、布局),然后才填充高频细节(纹理、边缘)。如果噪声加得不够多,低频信息没有被完全破坏,网络就会顺着这些残留的低频结构去“脑补”细节,而脑补的方向由提示词控制。

这个机制完美解释了“改而不重画”:原图的结构信息藏在了噪声之下,像一层半透明的底稿,去噪网络会照着底稿的轮廓画,但上色和笔触可以自由发挥

潜在空间里的操作:为什么要把图先压缩再折腾

Stable Diffusion 这类模型并不直接在像素空间上加噪,而是先用一个 VAE 编码器把图像压缩到潜在空间(尺寸缩小 8 倍),在潜在空间里加噪、去噪,最后再用解码器还原。这个设计不只是为了省显存——它让图生图更加“语义化”。

因为潜在空间里的每个位置,对应的是图像中一个区域的抽象特征,而不是像素。在这里加噪,破坏的是语义级的结构,所以同样强度的噪声,在潜在空间里能引发更本质的改变。比如你给一张猫的照片加噪强度 0.5,像素空间里可能只是变模糊,但潜在空间里可能猫的姿势都变了。这解释了为什么图生图经常能改变物体的姿态,甚至局部形状,而不仅仅是覆盖一层滤镜。

我最早误解了这一点,以为 img2img 就是“在像素上加噪再降噪”,结果发现用 Stable Diffusion 时,即使强度不高,生成结果也可能和原图差异很大。后来看了 LDM 论文 才明白,潜在空间里的噪声操作让模型有了更大的“编辑自由度”。

为什么有时候底图的结构会崩掉

图生图有一个让人头疼的毛病:你明明想保留原图的构图,但生成结果却把人物位置移动了,或者把桌子变成了椅子。这背后是扩散模型的一个本质局限:它没有“硬约束”

去噪网络在每一步都会根据当前噪声图和提示词,预测出下一步更清晰的图像。如果提示词很强(比如“一只猫坐在沙发上”),而原图里猫在椅子旁边,网络可能会在去噪过程中逐渐把猫“挪”到沙发上去,因为它在训练数据中看到猫和沙发共现的概率远高于猫和椅子。这个过程是渐进的,没有明确的边界,所以无法保证结构绝对不变。

要解决这个问题,就得用上更硬核的控制手段,比如 ControlNet。它给去噪网络额外输入一张“引导图”——比如原图的边缘检测图、深度图、或者人体姿态图——然后告诉网络:无论你怎么改,必须严格对齐这些线条或深度。这样,即使噪声强度很高,结构也不会漂移。这相当于给底图结构加了一把锁,只允许改变纹理、颜色等“表面属性”。

ControlNet 的思路其实是对图生图机制的补充:img2img 是用噪声强度来“软约束”结构,ControlNet 是用条件图来“硬约束”结构。两者可以结合,达到既保留关键结构,又能大幅改变风格的效果。

一个常见的误解:图生图是不是“先识别再修改”

很多人以为 AI 图生图时,会先理解图像内容(比如“这是一张风景照,有山有水”),然后根据理解去重绘。但实际流程完全不是这样。扩散模型没有任何显式的识别步骤,它只是:

  1. 把整张图编码成潜在表示。
  2. 往这个表示上加噪,得到一张“脏了”的潜在图。
  3. 让去噪网络看着这张脏图和提示词,逐步预测出干净的潜在图。

整个过程是端到端的像素级操作,没有“理解”这个中间层。但神奇的是,网络在训练中隐含地学会了“理解”,因为只有理解图像内容,它才能更好地去噪。所以,它是在去噪的同时完成了“理解”和“重绘”,两者不可分割。

这个认知转变让我重新审视了参数的含义:denoising strength 不是“理解多少”,而是“允许改变多少”。你给 0.3 的强度,就是在说“你只能改 30% 的信息”,剩下的 70% 必须保留。网络会自己判断哪些信息更重要(通常是大结构),然后优先保留它们。

图生图能做什么,不能做什么

现在,图生图已经成为 Stable Diffusion 生态里最常用的功能之一,但它有明显的边界:

  • 适合:风格迁移、局部细节替换、光照调整、纹理重塑、低分辨率修复。这些任务需要保留整体结构,只改变表面属性。
  • 不适合:精确的物体移除、内容替换、大幅度构图改变。因为这些操作要求结构硬约束,而 img2img 的软约束无法保证。比如你想把照片里的路人抹掉,用 img2img 可能会在路人位置生成一团奇怪的纹理,而不是干净的背景。

对比 InstructPix2Pix 这类专门为编辑设计的模型,它通过训练数据明确学习了“根据指令修改图像”,能更精准地执行局部修改,但泛化性不如 img2img+提示词。而 ControlNet 则弥补了结构保持的短板。这些技术不是互相替代,而是构成了一个工具箱:img2img 是最简单、最自由的编辑入口,ControlNet 是结构锁,InstructPix2Pix 是指令式编辑

我现在的习惯是:先想清楚这次编辑要保留什么、改变什么。如果只是换个风格,img2img 一个参数就够;如果必须保留边缘,就上 ControlNet;如果要按指令修改局部,就用 InstructPix2Pix。理清“约束类型”,比死记参数更重要。

常见疑问

为什么有时候加噪强度 0.4 就完全变了样,有时候 0.7 还跟原图很像?

因为模型对“结构”的定义取决于训练数据。如果原图的内容在训练数据中很少出现,或者提示词给出的方向与训练数据强相关,网络可能会在早期去噪步骤就大幅偏离原图结构。另外,不同的采样器(如 DDIM、Euler)对噪声的敏感度也不同,这会影响实际变化程度。

图生图可以用来无痕改图吗?

很难。因为即使强度很低,像素级细节也会被重绘,导致与原图存在细微差异。如果要求完全一致的区域不变,需要结合 inpainting(局部重绘)技术,只对选定区域加噪和去噪,其他区域直接复制原图像素。

为什么不用 GAN 做图生图,而要用扩散模型?

其实 GAN 也能做,比如 Pix2Pix 就是经典的图像翻译模型,但需要一个成对的数据集训练。扩散模型的好处是,它可以用同一个预训练模型,仅通过调整噪声强度,就实现从“完全保留”到“完全重画”的连续编辑,而且不需要成对数据。这得益于扩散模型训练的通用性。

噪声强度到底怎么选?

没有固定公式,只能通过实验。但一个经验是:想保留大结构,强度从 0.3 开始试;想保留构图但改变纹理,用 0.5-0.6;想重新构图,用 0.7-0.8。同时,提示词的引导强度(CFG scale)也要配合,CFG 太高会让颜色过饱和、对比过强,太低则生成结果可能忽略提示词。

图生图是扩散模型最优雅的应用之一,它用极简的机制——加噪再降噪——实现了一种连续的、可控的图像编辑方式。但优雅背后,是概率带来的不确定性。理解它的“软约束”本质,才能用好它,而不是被它诡异的行为带偏。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/122.html

(0)
上一篇 2026年8月16日 上午12:05
下一篇 2026年8月16日 上午12:07

相关推荐