LAMA Inpaint:大型掩模修复

本文介绍了LaMa方法,一种利用快速傅里叶卷积解决大缺失区域修复问题的技术。文章详细阐述了其主要方法、修补网络设计、感受野扩展、损失函数以及动态掩码生成策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、大掩模修复(LaMa)简介

  1. LaMa方法的提出背景:现代图像修复技术主要受阻于大缺失区域、复杂几何结构和高分辨率图像,主要受阻原因是修复网络和损失函数都缺乏有效的感受野。
  2. LaMa方法的核心思想:使用快速傅立叶卷积 fast Fourier convolutions (FFCs)来增大感受野,最终形成large mask inpainting (LaMa)。
  3. LaMa的主要组成部分:
    • 一种新的使用快速傅里叶卷积的修补网络,具有图像范围感受野,傅里叶卷积可以视为self-attention的轻量级替代;
    • 一个高感受野感知loss;
    • large training masks,能发挥前两个组件的潜力。

二、大掩模修复(LaMa)的主要方法

目标: 修复一幅被未知像素m的二值遮罩遮罩的彩色图像x
方法:

  1. 遮罩后的图像被表示为x⊙ m,m与x⊙ m堆叠在一起,产生一个四通道输入张量:x′=stack(x⊙ m、 m)
  2. 使用一个前馈修复网络fθ(·),以x′为例,修复网络以完全卷积的方式处理输入,并产生修复的三通道彩色图像ˆx=fθ(x′)。
  3. 训练是在从真实图像和合成生成的mask中获得的(image、mask)对数据集上进行的。
    在这里插入图片描述

三、快速傅里叶卷积的修补网络

FFC基于一个channel-wise fast Fourier transform (FFT),具有覆盖整幅图像的感受野,因此允许网络在 early layers 使用全局上下文,从而实现正确修复大mask。

在这里插入图片描述
图像与mask组成pair对输入网络并经过下采样后,进入FFC残差块。在FFC的处理过程中,会将输入tensor基于通道分为2部分分别走2个不同的分支:

  • 使用传统卷积的局部分支,负责提取局部信息;
  • 使用 real FFT 来获取全局上下文的全局分支,负责提取全局信息;
  • 最后将局部信息和全局信息进行交叉融合,再基于通道进行拼接,得到最终的输出结果。

四、损失函数

总的损失,包括GAN的损失,生成器感知损失,判别器感知损失,判别器梯度惩罚。
在这里插入图片描述

  1. GAN的损失

  2. 生成器感知损失
    在这里插入图片描述

  3. 判别器感知损失
    在这里插入图片描述

  4. 判别器梯度惩罚
    在这里插入图片描述

五、训练中的动态掩膜生成

  • 作者认为掩膜的生成类似于数据增强,对模型的效果非常重要。作者采取了多种大掩膜生成方式,但也同时注意避免生成大于原始图像50%的掩膜;
  • 每个训练样本 x′ 都是真实照片与合成生成的mask的叠加;
  • 大掩模生成策略:统一使用从多边形链中提取的样本,该多边形链由高随机宽度(宽遮罩)和任意纵横比的矩形(长方体遮罩)展开。
    在这里插入图片描述

参考:
深度学习-Resolution-robust Large Mask Inpainting with Fourier Convolutions基于傅里叶卷积的对分辨率鲁棒的掩模修复
Lama:《Resolution-robust Large Mask Inpainting with Fourier Convolutions》解读及实操
Resolution-robust Large Mask Inpainting with Fourier Convolutions 阅读笔记
图像修复之lama

### Python 实现图像去水印的技术方法 #### OpenCV 和 NumPy 库的应用 利用OpenCV和NumPy库可以实现基础的图像去水印功能。这些库提供了强大的图像处理能力,使得开发者能够针对特定需求定制化开发解决方案[^1]。 ```python import cv2 import numpy as np def remove_watermark_opencv(image_path, output_path): image = cv2.imread(image_path) # 创建掩模,假设已知水印位置 mask = np.zeros(image.shape[:2], dtype=np.uint8) # 手动标记或自动检测水印区域并填充到mask中... result = cv2.inpaint(image, mask, inpaintRadius=3, flags=cv2.INPAINT_TELEA) cv2.imwrite(output_path, result) ``` 这种方法对于简单的场景可能有效,但对于复杂情况下的表现并不理想[^2]。 #### 基于像素阈值判断法 另一种方式是通过设定RGB通道内的上下限来识别疑似水印部分,并将其替换为白色或其他指定颜色。此方法适用于那些水印具有明显区别特征的情况: ```python import numpy as np def judge_wm(img, low=180, high=250): low_bound = np.array([low, low, low]) high_bound = np.array([high, high, high]) mask = (img > low_bound) & (img < high_bound) \ & (np.abs(img - img.mean(-1, keepdims=True)).sum(-1, keepdims=True) < 10) img[mask] = 255 return img ``` 然而,当水印的颜色与背景非常相似时,上述算法的效果会大打折扣[^4]。 #### Lama Cleaner 开源项目 为了获得更好的效果,特别是面对复杂的实际应用场景,推荐使用专门设计用于高质量图像修复的任务型软件——Lama Cleaner。该工具集成了先进的机器学习模型,在处理各种类型的损坏包括但不限于水印方面表现出色。用户只需几行命令即可完成安装部署过程[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值