一句话定义
Inpainting 在掩码指定区域内重新生成内容、区域外保持原样;outpainting 是把画布向外扩、用同样的机制补全新增区域,两者共享「掩码约束下的条件去噪」这一原理。
为什么重要
它是修手指、换背景、扩画布等高频操作的机制层答案,也集中体现了扩散模型「局部性不好管」的特有难题——为什么会出现接缝、为什么掩码一大就变成整图重画、专用 inpainting 模型与「普通模型+掩码」差在哪。这些问题的答案全在「潜码混合」这个工程细节里。
前置知识
kp-012(img2img 的加噪-去噪框架);kp-003(潜码与像素的对应)。
核心概念
- 掩码(mask):标记重绘区域的二值图,工具中可羽化(边缘渐变)。
- 潜码混合(latent blending):每步去噪后,把掩码外区域强制替换回「参考图加噪后的对应值」。
- 专用 inpainting 通道:部分模型的 U-Net 输入层扩到 9 通道(潜码 4 + 掩码 1 + 被掩码潜码 4),训练时即见过掩码任务。
- 羽化(feathering):掩码边缘做渐变过渡,抑制接缝。
- 外扩(outpainting):扩画布后以新增区域为掩码生成,原图区域作约束。
原理与机制
朴素做法(LDM 论文方案,无专用模型时可用):对参考图整图按 kp-012 加噪到 t₀,然后每步去噪后执行混合:
zt−1 ← (1 − m) ⊙ zreft−1 + m ⊙ zgent−1, m 为掩码(潜码分辨率下)
掩码外永远跟随「参考图自己的加噪轨迹」,掩码内自由生成。这个混合是双刃剑:好处是区域外严格保真;代价是混合点在两个「原本不相识」的轨迹之间硬切换,接缝处上下文不连续,大掩码时更显突兀。专用 inpainting 模型的改进:把掩码与被掩码内容作为额外输入通道送进网络(SD1.5/SDXL 均有 inpainting 版本),训练时就学会「围着破洞补画、边缘自然衔接」,接缝质量显著更好。羽化则在掩码边缘给出过渡带,让「跟随」与「生成」在几像素内渐进换手,是零成本消除硬边的标准手段。outpainting 把原图视为「必须保持的掩码外区域」、新增画布为掩码内区域,机制完全同构;难点在生成区域只与半边上下文相邻,常需在提示词与分块策略上补偿。
公式与推导
本节公式即混合式(上)。值得推导的性质:掩码外区域因逐步被拉回参考轨迹,其等效「重绘幅度」为 0;掩码内区域等效幅度等于 img2img 的 s——inpainting = 掩码加权的 img2img。混合发生在潜码层(每步),而像素层混合(只在最后替换像素)会导致色彩统计不连续,是劣质实现的接缝来源。
图示
直观类比
像修墙师傅补墙洞:不拆整面墙(掩码外原样),只把洞周围铲出斜坡(羽化),新灰浆(生成内容)与旧墙在斜坡上交接。普通模型补洞是「凭感觉抹平」,专用模型是「持证上岗、专门学过怎么把新料接进旧墙面」。
实例或案例
- 修手:对画错的手打掩码,专用 inpainting 模型 + 明确提示词(如「open palm, five fingers」)重绘,配合小羽化,接缝几乎不可见。
- 大画幅外扩:把 1024×1024 扩到 1536×1024,新增三分之一由 outpainting 补出;提示词需重申全局场景以避免新增区域与原图风格脱节。
- 反例:用普通模型 + 大掩码 + 无羽化重绘半张脸,边界出现明显色阶——三重误区叠加的典型现场。
常见误区
- 误区一:接缝 = 模型差。多数接缝来自「像素层混合」或无羽化的实现选择,换专用模型/开羽化即大幅缓解。
- 误区二:掩码越大越自由。掩码超过画面约四成后,掩码内缺少可锚定的上下文,效果趋近整图重绘,不如直接 img2img。
- 误区三:inpainting 可以无限小改。掩码小于潜码单格(8×8 像素)尺度时约束失效,极小掩码不产生有效编辑。
自测题
- 写出潜码混合公式并解释羽化的作用。
答案要点:z ← (1−m)⊙z_ref + m⊙z_gen 每步执行;羽化让掩码边缘渐变换手,抑制硬接缝。
- 专用 inpainting 模型改了网络哪一处?
答案要点:输入通道扩为潜码 4 + 掩码 1 + 被掩码潜码 4 = 9 通道,训练即含掩码任务。
- 为什么超大掩码效果反而差?
答案要点:掩码内缺乏上下文锚定,生成退化为无约束重绘。
与其他知识点的关系
kp-014 的 ControlNet 提供另一种「控制区域内容」的思路(结构约束而非掩码替换);kp-025 收录接缝与羽化缺失的失败案例;kp-024 提到大图 inpainting 的分辨率分段实践。
延伸阅读
RePaint(CVPR 2022)给出无需专用模型的迭代混合方案,是「掩码混合」思想最清晰的学术表述;LDM 论文 4.3 节的 inpainting 实验。