← 返回题目列表

扩散模型如何实现 Inpainting 和 Outpainting?

高频 中等 第 2 / 25 题 更新于 2026/09/25
InpaintingOutpaintingMask局部重绘
学习 AI 实战项目

简化版

Inpainting 在遮罩区域重新生成内容,同时尽量保留未遮罩区域;Outpainting 则先扩展画布,把新增区域当作待生成 Mask,并利用原图边缘作为上下文补全。

实现时通常把带噪 latent、原图 masked latent 和 Mask 一起送入专用模型,或在每个去噪步骤把未编辑区域重新融合回来。质量关键在于 Mask 语义、羽化边界、上下文范围和 Prompt。硬边界容易出现接缝,Mask 太大则会丢失结构约束。

局部编辑的难点不只是“遮住哪里”,还包括“边界如何连续、未编辑区域如何真正保持”。

详细版

设 m=1 表示要重绘,m=0 表示保留。一个常见的逐步融合是:

z_orig_t = add_noise(z_orig, ε, t)
z_t = m ⊙ z_generated_t + (1-m) ⊙ z_orig_t

这样未编辑区域在每个时间步都回到与当前噪声级别匹配的原图 latent,而不是只在最后粗暴粘贴。专用 Inpainting U-Net 还可能输入 9 通道:4 通道噪声 latent、4 通道 masked-image latent 和 1 通道 Mask。

设置优点风险
硬二值 Mask边界明确容易出现色差和接缝
羽化 Mask过渡自然编辑范围可能外溢
小 Mask保留内容多上下文不足,难重建完整对象
大 Mask生成自由度大身份、透视和构图容易漂移

例如把 Mask 向外膨胀 8~32 像素,再羽化 4~16 像素,常比精确贴着对象边缘更自然,但这些数值需按分辨率和目标域验证。

完整版教学

一、Inpainting 的输入有哪些

基础输入包括原图、Mask、Prompt 和随机种子。Pipeline 会把原图编码为 latent,把被遮区域置空或加噪,再用周围上下文生成。

original image -> VAE -> original latent ----┐
mask -----------------> resize to latent -----┼-> inpaint denoiser
masked image -> VAE -> masked latent ---------┤
prompt -> text encoder -----------------------┘

Mask 的坐标、插值和黑白语义必须确认,反转一次就会重绘错误区域。

二、为什么要给模型 masked image

只有 Mask 和噪声时,模型知道哪里要生成,却缺少未遮区域的低层视觉信息。masked-image latent 提供颜色、纹理和布局上下文。

专用 Inpainting 模型在训练中见过这种通道组合,通常比把普通文生图模型直接用于遮罩任务更能保持边界。

三、未编辑区域为什么仍可能变化

整张图进入 VAE 时会产生有损重建;若整幅 latent 都参与去噪,未遮区域也可能漂移。即使 latent 被锁定,最终 Decoder 的卷积感受野也可能在边界附近传播变化。

要求像素级保持时,最可靠做法是解码后用原始像素与羽化 Mask 合成,但要处理颜色与光照接缝。

“未遮区域视觉相同”和“未遮区域像素完全相同”是两个不同验收标准。

四、Mask 膨胀和羽化分别解决什么

紧贴对象轮廓的 Mask 可能保留旧对象边缘,造成残影。先膨胀能把旧边缘纳入重绘,羽化则让新旧内容平滑混合。

操作作用过度使用的后果
膨胀清除旧轮廓和阴影改动过多背景
腐蚀缩小编辑范围残留旧对象
高斯羽化平滑颜色纹理接缝边界发糊、内容外溢

Mask 处理应按输出分辨率定义,不能把 512 图的固定像素参数直接用于 4K 图。

五、Denoising Strength 如何影响局部编辑

低强度主要修改纹理,难以替换对象结构;高强度允许彻底重画,但与周边身份和透视更容易不一致。专用 Inpainting Pipeline 中具体映射仍由 Scheduler 决定。

替换小物体可从中高强度开始,修复皮肤瑕疵则用低强度。应固定 Seed 扫描曲线,而不是依赖通用默认值。

六、Outpainting 与 Inpainting 有什么关系

Outpainting 先把原图放到更大画布,新增区域设为 Mask,再做 Inpainting。难点是新增区域没有外侧上下文,模型必须延续原图的透视、光照和语义。

可分多次向外扩展,每次保留重叠带;一次扩展过大时,远端内容容易与原图失去联系。

七、如何保持构图和透视连续

Prompt 应描述完整场景,而不只是新增对象。深度、边缘或透视线控制可帮助延续几何;参考适配器可保持风格和人物身份。

扩图前还可对原图边缘做镜像或模糊填充,给 VAE 提供较平滑初值,但不能让填充纹理成为错误结构条件。

八、多轮编辑为什么会累计退化

每轮都重新编码、解码整图,会累计 VAE 色偏和细节损失。新的接缝还可能成为下一轮模型的错误上下文。

应保留最高质量原图和编辑历史,尽量只重编码必要区域;多轮完成后可统一做色彩匹配,而不是每轮反复压缩成有损格式。

九、怎样评测局部编辑

评测需拆成三个区域:Mask 内编辑成功、边界带融合质量、Mask 外保持程度。

inside:  Prompt 对齐、对象正确、伪影率
border:  梯度连续、色差、接缝人评
outside: LPIPS/SSIM 或像素差、身份和结构保持

对 Outpainting 还要评估整体构图、重复纹理和远端语义合理性。

十、常见故障如何排查

Mask 外全变:检查语义是否反转、是否每步融合原 latent;边缘有光圈:检查羽化和颜色空间;对象残影:增加膨胀;新增区域重复:减小单次扩展或增加结构条件。

同时确认 Mask Resize 使用最近邻还是灰度插值。二值 Mask 被错误平滑可能产生意外半透明编辑区。

十一、常见误区与追问

  • 误区:Mask 画得越精确越好。 太贴边会保留旧轮廓,通常需要适当膨胀和羽化。
  • 误区:Mask 外一定逐像素不变。 VAE 和全图解码可能改变未编辑区域。
  • 误区:Outpainting 是把空白边缘直接文生图。 它需要利用原图重叠上下文保持连续。
  • 误区:一次扩得越大越省事。 上下文影响会随距离减弱,透视和语义更容易漂移。
  • 误区:普通文生图模型与专用 Inpainting 模型效果等价。 专用模型通常训练过 Mask 和 masked latent 通道。
  • 追问:怎样做到背景完全不动? 最终像素级合成原图,并仅在羽化边界允许混合。
  • 追问:怎样替换整个人又保姿态? Mask 重绘结合 Pose/Depth ControlNet 和身份参考条件。

十二、加强记忆

三输入:原图上下文、Mask、文本/结构条件;逐步融合:未编辑 latent 要与当前噪声级别对齐;边界处理:膨胀清旧轮廓,羽化消接缝。扩图策略:小步扩展、保留重叠、维持透视与光照;三区评测:Mask 内、边界带、Mask 外分别验收。