前置
RePaint
RePaint 的核心思想是在每个逆向时间步内多次执行「条件去噪 - 掩码混合 - 重新加噪」,让未知区域有更多机会与已知区域协调。这里默认逆向模型显式感知 inpainting 条件:掩码和已知区域会作为额外输入参与每一次去噪。
给定原始数据 和掩码 ,其中掩码值为 的位置表示已知区域,值为 的位置表示未知区域。算法流程如下:
首先,对原始数据执行前向扩散并取出已知区域,得到每个时间步的带噪状态 。然后从终点先验 初始化未知区域,并将已知区域替换为 。每一次逆向去噪都以 和已知区域作为条件;去噪后,再通过掩码混合把已知区域恢复为对应时间步的带噪状态:
如果当前 repainting 轮次还没有结束,则再将混合后的样本从 重新加噪到 ,继续进行下一轮条件去噪与局部修正。
算法
完整流程如下:
RePaint inpainting 采样算法
输入:原始数据 ,已知区域掩码 ,显式条件化的逆向采样器 ,前向扩散算子,终点先验 ,总时间步数 ,repainting 次数
输出:修复后的数据
-
预计算已知区域在各时间步的前向扩散状态:
-
未知区域从终点先验开始,已知区域使用第 步带噪状态:
-
对 执行逆向去噪。对每个 ,再对 执行 repainting:
若 且 ,则重新加噪:
-
返回 。
注意事项
- 掩码必须与数据形状一致;如果原始掩码只在较粗粒度上定义,需要先广播到每个被扩散的分量。
- 逆向模型每一步都接收掩码和已知区域条件。 可以取干净条件 ;如果模型按当前噪声尺度组织条件,也可以取对应的 。
- 已知区域在中间时间步不应恢复为干净的 ,而应恢复为对应时间步的 。
- 对连续时间 SDE/ODE 扩散模型,可以把 理解为数值求解器选定的离散时间网格。
- repainting 次数 控制局部协调强度。较大的 通常能改善已知区域和未知区域的衔接,但会线性增加采样开销。
- 如果数据在训练前做了归一化、中心化、裁剪或坐标变换,inpainting 采样时必须使用同一套预处理和反变换。