前面几篇讲怎么把想要的东西要出来。这一篇处理另一种情况:图已经九成对了,只差一小块——手崩了,桌边多了个不该在的人。你会很自然地想只改这一块,然后把整张图重跑一遍,其他九成全变了。

局部重绘就是为这件事准备的,但它常常不听话:只圈了一小块,颜色整体偏了;接缝处糊一圈;改完发现耳环少了一个。下面把两个旋钮的职责拆开,再解释没被圈到的地方为什么会跟着变。

两个旋钮,各管一件事

遮罩(mask)是一张与原图同尺寸的黑白图,白的重画,黑的保留1。它管的是 哪里能动。

重绘幅度(denoising strength)管的是 能动多少。它不是模糊的“力度”,机制更具体:扩散模型从一团纯噪声开始一步步去噪出图,重绘幅度决定你从噪声表上的哪一档开始走——把原图按那一档的噪声水平打散,再从那里往下走:

zstart=a z0+b ϵz_{\text{start}} = a\,z_0 + b\,\epsilon

z0z_0 是原图编码后的结果,ϵ\epsilon 是噪声;走得越靠前,噪声越大,bb 越大、aa 越小,原图留下的痕迹越少3。

幅度为 0 什么都不做;幅度为 1 起点是纯噪声,遮罩区跟原图彻底无关,等于在这块地方重新生成一张图。“能改多少”和“能保住多少原始结构”是同一根滑杆的两头,不可能只要一边——这就是为什么想保留脸型只换表情时,把幅度拉到 0.9 一定失败。

经验上,修瑕疵、补细节、换质感用 0.3–0.5;换掉一个物体、填入原本没有的东西用 0.75–1.03。区间会随模型平移,但“修”和“换”分属低高两段这个关系是稳定的。

遮罩说的“哪里”,精度只有一格

模型不在像素上工作。它先把图压进潜空间,常见模型是 8 倍下采样,512×512 的图进去只剩 64×64 个格子。所以遮罩在它眼里是被量化成 8 像素见方的格子——落在同一格里的像素只能一起动或一起不动。边缘通常还会做几像素的羽化(常见 4–16 像素)3,边界更“松”。

所以“圈准”的上限是圈准到格子。实操上更划算的是反过来:遮罩比要改的东西略大一圈,把接缝推到背景、衣服褶皱、阴影里,而不是压在轮廓或物体边缘上。

没被圈到的地方,为什么也变了

四层原因,从流程最外层往里。

一、有的流程根本没有真的做局部。 它拿整张图做一次图生图,事后再把“该保留的部分”贴回去。图一旦整张跑过,所有像素都已经动过了。

二、编码解码这一圈本身有损。 图先进 VAE 压成潜空间、再解回像素,不完全可逆,颜色、细微纹理、锐度都会轻微漂移。如果工具把解码后的整张结果直接给你,没被遮罩的像素也走了一趟。可靠的流程会在最后做像素级合成:只有遮罩内的像素取自生成结果,遮罩外直接来自原文件3。颜色整体偏了一点,多半就是少了这一步。

三、边界是软的,而模型要负责接缝。 模型里没有“区域”这个概念,它是在潜空间上算的;遮罩外的内容是它必须对齐的上下文——光照方向、色温、噪点质感。为了不让补进去的东西突兀,它会在边界附近一起调整。更麻烦的是,专门为局部重绘训练的权重被有意训练成“生成自然的过渡”,代价就写在文档里:这类权重比通用权重 更容易改动你没遮罩的区域1。你想要的自然过渡和你要的“外面一点别动”,在它是同一件事的两面。

四、小目标在整图分辨率下不够用。 一张 1024 像素宽的图里,一颗眼睛只占几十像素,能用的格子太少。所以好用的工具都有“只重绘遮罩区”的模式:把遮罩连同一圈周边裁出来,放大到模型习惯的尺寸上重绘,再缩回去贴好1。代价是模型只能看到那一圈填充边距(padding,常见 32–128 像素)3;边距太小,它看不到环境,补出来的东西颜色和光线对不上,看着像“贴上去的一块”。

为什么有些工具没有这根滑杆

专用重绘模型的训练输入是“遮罩区被抹掉、只剩空白”的图,遮罩本身作为额外条件一起喂进模型24。它从第一步就知道该填哪儿、周围什么样,可以直接从纯噪声走完全程,不需要你把起点往回拨——这类工具通常不暴露重绘幅度,你只给遮罩和一句话2。

再往后是连遮罩都不给的指令编辑:模型自己决定动哪里。省事,但“改哪”这个决定也交出去了,它可能顺手改到你没打算动的地方。

把改动锁在原地的操作顺序

  1. 先判断这次是“修”还是“换”,据此定幅度。这一步错了,后面调提示词救不回来。
  2. 遮罩留余量,多扩几像素,让接缝落在背景或阴影里;边缘给一点羽化。
  3. 小目标开“只重绘遮罩区”,填充边距给足;边距不够时在提示词里补一句环境。
  4. 提示词只写遮罩里该出现什么。模型已经看到周围2,复述整张图反而可能把它往别处引。
  5. 最后像素级贴回,遮罩外用原文件。
  6. 一次只改一处,从原图分叉;在已经改过的图上反复重绘,微小的漂移会累加。

一个具体例子:桌面照里多了一只水杯,要拿掉。遮罩圈住杯身 和它投在桌面上的影子——影子是杯子存在过的证据,只抹掉杯身会留下一个没有主人的暗块,模型又没权限去改它。幅度给到 0.8 左右,提示词写“空桌面,木纹自然延续,同样的侧光,没有物体”,开只重绘遮罩区、边距 64 像素左右。填进去的东西靠上下文推出来,你要说清的只是补进来的是什么。

边界

遮罩特别大时——换背景、向外扩图——这套办法就退化了:能当上下文用的周围只剩一小圈,“局部”和“整体”的区别消失,主要矛盾变成整张图的构图与风格一致。

一句话收尾:遮罩管到哪,重绘幅度管能动多少,而“没被圈到的地方也在变”通常是流程问题(整图跑过、解码贴回),不是模型不听话。分清楚是机制限制还是流程疏漏,才知道该调滑杆还是该换工具。