视觉Transformer新范式:Inpaint-Anything中SAM与STTN的跨模态修复架构解析
传统图像修复工具常陷入"要么精度不足,要么操作复杂"的困境——用PS手动涂抹耗时,普通AI工具又难以精准识别修复区域。Inpaint-Anything项目通过融合SAM(Segment Anything Model)与STTN(Spatial-Temporal Transformer Network)两大视觉Transformer模型,构建了一套从静态图像到动态视频的全场景修复解决方案。本文将深入剖析这两种模型的架构设计与协同机制,揭示如何用Transformer技术突破传统修复难题。
SAM:基于点提示的精准分割基石
SAM作为Meta AI提出的通用分割模型,其核心创新在于以点、框、掩码等稀疏提示驱动密集分割。在Inpaint-Anything项目中,SAM承担着"智能选区工具"的角色,通过segment_anything/segment_anything/modeling/sam.py实现三大核心模块的协同:
图像编码器:ViT的多尺度特征提取
SAM采用ImageEncoderViT架构,将输入图像通过卷积投影为16x16像素的图像块嵌入,再经12层Transformer编码为1024维特征向量。这种设计使模型既能捕捉全局语义(如"这是一只猫"),又能保留局部细节(如"猫的胡须位置"),为后续精准分割奠定基础。
提示编码器:稀疏输入的向量化转换
针对用户输入的点提示(如鼠标点击),SAM通过PromptEncoder将其转换为两种嵌入:
- 稀疏嵌入:将点坐标、框坐标转换为可学习向量
- 密集嵌入:通过位置编码为图像每个像素生成空间特征
这种双重编码机制,使得用户只需点击"要修复的物体",模型就能自动生成精确掩码,解决了传统修复中"选区难"的痛点。
掩码解码器:动态生成最优修复区域
MASK解码器采用Transformer解码器结构,接收图像嵌入与提示嵌入,输出3个可能的分割掩码及置信度分数。在example/remove-anything/dog/with_mask.png中可直观看到,即使是毛发这类复杂边缘,SAM也能生成像素级精确的掩码:
STTN:视频修复中的时空注意力机制
当修复对象从静态图像转向动态视频时,单纯的空间修复会导致"帧间闪烁"问题。STTN模型通过sttn/model/sttn.py实现的时空Transformer架构,完美解决了这一挑战:
多尺度补丁注意力:动态捕捉运动特征
STTN创新性地采用四重分辨率补丁(108×60、36×20、18×10、9×5)对视频帧进行分块处理。在MultiHeadedAttention模块中,模型同时计算:
- 空间注意力:同一帧内不同区域的关联性
- 时间注意力:相邻帧间相同物体的运动轨迹
这种设计使视频修复不仅考虑当前帧内容,还能参考前后帧信息,如example/remove-anything-video/surf/removed.gif所示,冲浪者被移除后,海面波纹仍保持自然流动:
编码器-解码器架构:特征级修复流程
STTN的InpaintGenerator由三部分组成:
- 编码器:通过4层卷积将视频帧压缩为256维特征
- Transformer块:8层堆叠的TransformerBlock处理时空依赖
- 解码器:双线性上采样+卷积恢复原始分辨率
这种特征级修复策略,相比像素级直接操作,能更好地保持视频的动态一致性。
跨模态协同:从静态到动态的修复流水线
Inpaint-Anything将SAM的精准分割与STTN的时空建模无缝衔接,形成完整修复链路:
以"移除视频中的行人"为例,流程如下:
- 用户在关键帧点击行人(仅需1-2个点)
- SAM生成example/remove-anything/person/with_points.png所示的初始掩码
- 掩码经时序插值得到视频全帧掩码
- STTN基于掩码完成时空一致性修复,输出example/remove-anything-video/tennis-vest/removed.gif
实践应用:三大核心功能模块
项目提供的脚本文件封装了完整功能,通过简单命令即可调用:
1. 图像移除:remove_anything.py
python remove_anything.py \
--image_path example/remove-anything/dog.jpg \
--points_coords 450 300 \ # 点击狗的位置
--points_labels 1 \ # 1表示前景
--output_dir results/dog_removed
修复效果对比:example/remove-anything/dog/inpainted_with_mask.png
2. 图像替换:replace_anything.py
通过文本提示"a red car",可将图像中的物体替换为指定内容,如example/replace-anything/Replace-man.gif所示。
3. 视频修复:remove_anything_video.py
针对example/video/paragliding/等视频序列,自动完成运动物体的跟踪与移除。
技术突破与行业价值
Inpaint-Anything的Transformer融合架构带来三大突破:
- 操作门槛降低:从"精确选区"变为"点一下即可"
- 修复质量提升:STTN的时空注意力使视频修复PSNR提升1.8dB
- 跨模态兼容性:同一套架构支持图像/视频/3D模型修复
这种技术组合不仅赋能普通用户轻松完成专业级修复,更为内容创作、影视后期、虚拟现实等领域提供了全新工具链。随着weights/mobile_sam.pt等轻量化模型的集成,未来甚至可在移动端实现实时修复。
快速上手与资源拓展
完整项目可通过以下命令获取:
git clone https://gitcode.com/gh_mirrors/in/Inpaint-Anything
cd Inpaint-Anything
pip install -r requirements.txt
更多示例与API文档可参考:
- 官方教程:README.md
- 视频修复示例:example/remove-anything-video/
- 3D修复功能:remove_anything_3d.py
从社交媒体图片美化到电影特效制作,Inpaint-Anything正在重新定义视觉内容修复的技术边界。这套基于Transformer的跨模态架构证明:最强大的AI工具,应当是那些让复杂技术"隐形",却能精准实现用户意图的系统。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





