# 只改一小块为什么这么难：遮罩管到哪，重绘幅度管改多少

从噪声起点讲清局部重绘的两个旋钮，以及没被圈到的区域为什么会跟着变

> 局部重绘 · 遮罩 · 重绘幅度 · 扩散模型 · 约 6 分钟 · 10 月 18 日

## 本篇要点

1. 遮罩决定哪里能动，重绘幅度决定能动多少：后者决定从噪声表哪一档开始去噪，幅度 0 不动、幅度 1 等于无视原图重新生成。
2. “能改多少”和“能保住多少原始结构”是同一根滑杆的两头，想保留脸型又大幅改表情注定失败，因为参数机制不允许。
3. 遮罩的精度被潜空间的 8 倍下采样限制成 8 像素一格，所以圈准的上限是格子；更有效的做法是把遮罩扩一圈，让接缝落在背景或阴影里。
4. 没被遮罩的区域会变，主要有四个原因：流程只做了整图图生图再贴回、编码解码往返有损、模型要在边界附近对齐光照与质感、小目标在整图分辨率下不够用而需要裁剪重绘。
5. 专用重绘模型以“遮罩区被抹掉后的图”加遮罩作为条件，从纯噪声走完全程，因此不需要重绘幅度滑杆；它被训练成生成自然过渡，也比通用模型更容易改动遮罩外。
6. 把改动锁在原地的关键动作：先分清“修”还是“换”再定幅度、遮罩留余量、小目标开只重绘遮罩区并给足填充边距、提示词只写遮罩内该出现的内容、最后做像素级贴回并尽量从原图分叉。
7. 遮罩占画面大半时（换背景、扩图），局部重绘退化为整体构图与风格一致的问题，这套办法不再适用。

---

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

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

## 两个旋钮，各管一件事

遮罩（mask）是一张与原图同尺寸的黑白图，白的重画，黑的保留[1]。它管的是**哪里能动**。

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

$$z_{\text{start}} = a\,z_0 + b\,\epsilon$$

$z_0$ 是原图编码后的结果，$\epsilon$ 是噪声；走得越靠前，噪声越大，$b$ 越大、$a$ 越小，原图留下的痕迹越少[3]。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

## 边界

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

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

## 术语表

- 遮罩（mask）：一张与原图同尺寸的黑白图，白色标出可以重画的地方，黑色标出必须保留的地方，它管的是“哪里能动”。
- 重绘幅度（denoising strength）：决定把原图打散到噪声表的哪一档再往下走，从而同时决定“能改多少”和“能保住多少原结构”。
- 潜空间（latent space）：模型实际运算的压缩表示，常见模型把图压小 8 倍，所以一个格子对应原图 8×8 像素，遮罩的边界精度也止于此。
- 像素级合成（composite）：最后一步只把遮罩内的结果贴回原图，遮罩外的像素直接来自原文件，用来避免解码往返带来的整体偏色与细节漂移。
- 填充边距（padding）：在“只重绘遮罩区”模式里，裁剪时围绕遮罩多带的一圈周边像素，决定模型能看到多少环境、以及目标能分到多少分辨率。

## 来源

1. [Diffusers 文档：Inpainting — 遮罩黑白约定、重绘幅度定义、只重绘遮罩区与专用权重的取舍](https://huggingface.co/docs/diffusers/using-diffusers/inpaint)
2. [Runware 文档：Image Inpainting — 重绘幅度的实际表现区间与提示词只需描述遮罩内内容](https://runware.ai/docs/learn/image-inpainting)
3. [Inpainting & Image Editing 笔记 — 重绘幅度对应的噪声起点公式、羽化扩边建议与像素级合成](https://andrewaltimit.github.io/Documentation/docs/ai-ml/inpainting-editing.html)
4. [diffusers 源码：Flux Fill pipeline — 以“遮罩抹掉后的图”加遮罩作为条件、默认全强度去噪](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/flux/pipeline_flux_fill.py)

---

原文：https://pangzhengboyin.com/articles/local-inpainting-mask-and-denoise-strength-8ee01ee6

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
