大数跨境

CVPR2026 SOTA|InpaintAny通用图像修复实战!任意物体无痕擦除、大区域语义补全、纹理无缝融合

CVPR2026 SOTA|InpaintAny通用图像修复实战!任意物体无痕擦除、大区域语义补全、纹理无缝融合 AI与计算机视觉
2026-10-13
2
导读:拍合照不小心多了个路人,截图里有一行水印,老照片缺了一角——图像修复就是干这个的:把你不想要的东西抹掉,让画面

拍合照不小心多了个路人,截图里有一行水印,老照片缺了一角——图像修复就是干这个的:把你不想要的东西抹掉,让画面看起来像从来没有过一样。

说起来简单,但做过这个方向的同学都知道,小面积修复很容易,一旦要补的区域大了、形状复杂了,结果就完全失控。今天分享的这篇 CVPR2026 论文 InpaintAny,提出了一个不挑掩码形状、不挑图像类型的通用修复框架,在 LaMa、Places2 等基准上刷新了 SOTA,而且推理速度比扩散模型快了一个数量级。

一、图像修复为什么这么难

很多人第一次接触这个任务会觉得不就是"把缺的地方补上嘛",但真做起来才发现,难点根本不在"补",而在"补得合理"。

1.1 小区域 vs 大区域:难度天差地别

如果要修复的区域只有几个像素,那就是个纹理插值问题,PatchMatch 这类传统方法就能搞定。但一旦掩码面积超过图像的 20%,你面对的就不再是"插值"问题了——你需要脑补出图像应该长什么样。这时候模型必须理解语义:这里应该是一面墙?一扇窗?还是一片天空?

1.2 传统 CNN 方法的天花板

从 DeepFillv2 到 LaMa,CNN 修复模型已经做到了相当不错的水平。但它们有一个共同的硬伤:感受野有限。卷积核再大也覆盖不了整张图,遇到需要全局上下文推理的大区域修复,就会出现"局部合理但整体崩坏"的情况——比如补出来的窗户形状是对的,但透视关系和旁边的墙完全对不上。

1.3 扩散模型:效果好但太慢

后来大家把扩散模型搬过来做修复,效果确实上了一个大台阶。但问题也很明显:一次修复要跑几十步去噪,一张图等十几秒甚至半分钟,根本没法做到实时交互。而且扩散模型对掩码形状很敏感——稍微不规则一点,修复质量就明显下降。

1.4 掩码泛化性被严重低估

这是最容易被忽略的一点。大部分论文训练和测试用的都是随机生成的矩形或笔刷掩码,但真实场景里的掩码形状千奇百怪——可能是一个人、一辆车、一行文字,边缘还歪歪扭扭。模型在测试集上刷得再高,换个真实掩码形状就崩,这是很多修复方法落地时遇到的第一个坑。

二、InpaintAny 的三个核心设计

InpaintAny 的整体思路可以总结为:用一个轻量 backbone 做基础修复,再用一个轻量化的扩散先验模块做大区域语义补全,全程不需要针对掩码做任何特殊处理。

2.1 掩码无关的统一特征编码

传统方法在输入时会把掩码(mask)作为额外通道拼进去,告诉模型"哪里需要修"。但这种做法有个问题——模型学到的是"看到这个形状就补那里",换个形状就懵了。

InpaintAny 的做法不一样:它把掩码信息和图像特征在特征空间融合,而不是在输入空间。具体来说:

•掩码嵌入模块:把任意形状的掩码编码成一个全局向量,代表"需要修复的区域有多大、在什么位置"。

•空间注意力引导:用这个全局向量去调制 backbone 的特征图,让网络自动关注需要修复的区域。

这样做的好处是:不管掩码是矩形、不规则还是任意形状,模型的处理流程完全一样。论文里做了一个很有意思的实验——用矩形掩码训练,直接拿去修任意形状的物体,性能下降不到 2%。这就是掩码无关编码的威力。

2.2 扩散先验的"蒸馏加速"

大区域语义补全确实需要扩散模型那种全局生成能力,但一步步去噪太慢了。InpaintAny 的做法是:用一个小的预训练扩散模型当"老师",蒸馏出一个一步前馈的"学生"网络。

具体过程:

•第一阶段:在大规模图像上预训练一个轻量扩散模型,学习"从噪声生成合理图像"的能力。

•第二阶段:把扩散模型的多步去噪过程压缩成一次前向推理,让学生网络直接预测最终修复结果。

•第三阶段:在修复数据集上做联合微调,把扩散先验和 CNN 修复能力融合起来。

最终效果是:学生网络只有 25M 参数,一次前向就能出结果,速度比原始扩散模型快 30 倍,而 FID 指标只差了 1.2——对于大多数应用场景来说完全可以接受。

2.3 边缘一致性双重约束

修复效果好不好,人眼第一眼看的不是中心区域,而是修复边界——边缘接不接得上,有没有明显的"补丁感"。InpaintAny 在训练时加了两个专门针对边缘的损失:

•边界感知损失:在掩码边界两侧各取一条窄带,计算这两条带之间的梯度连续性。如果边缘处亮度或颜色跳变太大,就给一个惩罚。

•感知一致性损失:用预训练的 VGG 特征,比较修复区域边界内外的高层特征是否一致。这保证了不只是像素级接得上,语义层面也要连贯。

消融实验显示,去掉边界感知损失后,用户主观评分下降了 15%——大家一眼就能看出哪里是修过的。

三、技术架构拆解

InpaintAny 的整体 pipeline 分三个阶段,从粗到精:

阶段

做什么

关键模块

粗修复阶段

快速生成一个粗糙的修复结果

轻量 U-Net backbone,输出低分辨率粗图,先把大结构定下来

语义补全阶段

用扩散先验补全大区域语义

蒸馏后的一步扩散模块,负责"这里应该是什么内容"

细节精修阶段

修复边缘和纹理细节

边缘感知精修网络,专门处理边界过渡和高频纹理

几个工程上值得注意的设计:

•多尺度处理:粗修复在 256×256 分辨率做,精修在 512×512 做,平衡速度和细节。

•掩码退化增强:训练时对掩码做随机膨胀、腐蚀、高斯模糊,模拟真实场景中掩码边缘不精确的情况,提升鲁棒性。

•推理时间:512×512 图像在单张 RTX 3090 上约 0.08 秒,完全可以做到交互式修复。

四、和主流方法的横向对比

论文在两个标准基准上做了对比:LaMa(合成掩码)和 Places2(自然场景)。

方法

LaMa FID↓

Places2 FID↓

参数量(M)

单图耗时(ms)

DeepFillv2

27.3

32.1

45

120

LaMa

23.8

28.5

54

180

SD-Inpaint

18.2

22.4

860

8000

InpaintAny

19.5

23.1

25

80

可以看到,InpaintAny 的 FID 比扩散模型(SD-Inpaint)略高一点,但参数量只有后者的 3%,速度快了 100 倍。和传统 CNN 方法(DeepFillv2、LaMa)比,FID 低了 4-8 个点,提升非常明显。这个 trade-off 其实很合理——大多数落地场景需要的是"足够好且够快",而不是"极致好但慢到没法用"。

五、快速上手:核心推理流程

下面是 InpaintAny 推理的核心代码框架,帮大家快速理解整体流程:

python
InpaintAny 推理核心逻辑
import torch
import torch.nn as nn

class InpaintAny(nn.Module):
    def __init__(self):
        super().__init__()
        self.coarse_net = CoarseUNet()           # 粗修复
        self.semantic_net = DistilledDiffusion()  # 蒸馏扩散先验
        self.refine_net = EdgeAwareRefine()      # 边缘精修

    def forward(self, image, mask):
        # image: [1,3,H,W] 0~1, mask: [1,1,H,W] 1=需要修复

        # 1. 粗修复:快速生成低分辨率结果
        coarse = self.coarse_net(image, mask)

        # 2. 语义补全:扩散先验填充大区域
        semantic = self.semantic_net(coarse, mask)

        # 3. 细节精修:优化边缘和纹理
        result = self.refine_net(semantic, image, mask)

        # 只输出修复区域,保留原始未掩码部分
        output = image * (1 - mask) + result * mask
        return output

# 使用示例
model = InpaintAny()
model.load_state_dict(torch.load("inpaintany.pth"))
model.eval()

with torch.no_grad():
    img = load_image("photo.jpg")        # 原始图片
    mask = load_mask("mask.png")         # 二值掩码,1表示要擦除的区域
    result = model(img, mask)
    save_image(result, "restored.jpg")

实际使用的时候,可以用鼠标在交互界面上画一下要擦除的区域,模型实时给出修复结果。推理速度够快,交互体验会很流畅。

六、毕设/竞赛拓展方向

图像修复这个方向做毕设或者竞赛都非常合适——Demo 效果直观,容易出图,而且落地场景多。分享几个有潜力的拓展点:

6.1 视频对象擦除

把单帧修复扩展到视频,核心难点是时序一致性——每一帧单独修完,拼起来会闪烁。加上光流约束或者时序一致性损失,做一个"视频里随意擦除移动物体"的工具,演示效果会非常震撼。

6.2 老照片修复+上色联合

老照片修复是一个很具体的落地场景:划痕修复 + 褪色上色 + 破损补全,三件事一起做。可以专门收集一组老照片数据集,做一个端到端的老照片复原系统,工程价值和社会价值都有。

6.3 针对特定场景定制

通用修复模型在某些专业场景下表现一般——比如医学影像修复、遥感图像修复、人脸修复。针对某一个垂直场景,收集专属数据做微调,效果提升会很明显。比如做"医学 CT 图像伪影修复",创新性和实用价值都很高。

6.4 交互式修复工具开发

很多人做算法只做到"输出一个结果"就停了,但如果能把它做成一个完整的交互式工具——支持笔刷选择、局部重绘、参数调节——那就是一个可以直接展示的产品级 Demo。答辩的时候现场擦除一个物体,效果立竿见影。

七、写在最后

图像修复这个方向有点特别——它的评价标准非常主观。PSNR、FID 这些指标当然要测,但最终好不好看,人眼说了算。这也是为什么很多论文指标刷得很高,实际用起来总觉得"差了点意思"。

InpaintAny 给我的启发是:不要盲目追大模型、追扩散。扩散模型效果好,但代价是速度和部署成本。能不能把扩散的"语义先验"蒸馏出来,让一个轻量网络也具备这种全局理解能力?这个思路其实可以推广到很多生成式任务上。

做毕设的同学如果选这个方向,我建议不要一上来就堆扩散模型。先把基础 CNN 修复做扎实,理解清楚掩码、边缘、语义这几个核心问题,再考虑要不要引入生成式先验。基础打牢了,后面加什么都是顺水推舟。

大家如果有具体的复现问题或者想讨论某个拓展方向,欢迎评论区交流。

【声明】内容源于网络
0
0
AI与计算机视觉
专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
内容 128
粉丝 0
AI与计算机视觉 专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
总阅读2.1k
粉丝0
内容128