论文复现——LaMa:Resolution-robust Large Mask Inpainting with Fourier Convolutions

本文介绍了LaMa模型的backbone结构,包括快速傅里叶卷积及其组成部分,重点讨论了FFC中的局部与全局通道划分比例。复现代码支持高级训练技巧,并分享了预训练和自定义数据集的训练策略。

本次复现的论文是图像修复领域较火的Lama模型中的backbone,LaMa的backbone用在图像分类任务上也能有很好的效果。
原论文:https://arxiv.org/abs/2109.07161
源代码(用于图像修复的代码):https://github.com/saic-mdal/lama
复现的代码(用于图像分类代码):https://github.com/RooKichenn/General-lama-backbone(支持apex混合精度训练、mixup/cutmix、resume)

一、LaMa整体结构

LaMa整体结构
  从图中可以看出,输入到网络的x'是由真实图像x和掩码m在通道方向上进行拼接构成的,公式为x'=stack(x⊙m, m),拼接完成后,x.shape(3, 224, 224) -->x'.shape(4, 224, 224),进行下采样,在第一层下采样时用了一个7x7的快速傅里叶卷积(FFC),LaMa的backbone整体使用的都是FFC进行卷积,第一层使用大卷积核是为了获得全局的感受野,后两层下采样也是使用的FFC,但是卷积核为3x3,经过下采样后,图像缩小了8倍,但是一般图像分类的模型都是下采样32倍,所以可以添加两个下采样模块,就是在原论文的基础上再下采样4倍,就变成了整体下采样32倍(我复现的是下采样8倍,32倍的还没试过)。下采样完成后,将特征图送入FFC ResNet Blocks,在FFC ResNet Blocks中特征图尺寸是不会变化的,主要目的就是为了让模型学习特征映射,后面的上采样我们不需要,我们只需有backbone,所以不做过多讲解,具体可以去阅读原论文。

二、 快速傅里叶卷积(FFC)

在这里插入图片描述

  传统的卷积在网络的前几层并不能获得很大的感受野,这将浪费很多计算空间来对感受野进行建模,而且较小的感受野缺失全局的信息,于是作者使用了快速傅里叶卷积来获得全局的感受野。快速傅

### LaMaLarge Mask Inpainting)模型对输入图像分辨率的最低要求 LaMa 模型的设计目标之一是能够在高分辨率图像上实现良好的修复效果,即使其训练时仅使用低分辨率图像(256x256)进行学习。根据其方法描述,LaMa 具备“分辨率鲁棒性”(resolution-robust),这意味着它可以在推理阶段处理比训练时更高分辨率的图像[^3]。然而,这并不意味着输入图像可以无限低或没有最低要求。 从技术角度来看,LaMa 使用基于快速傅里叶卷积(FFC)的网络结构来扩展感受野,从而能够处理大范围的遮挡区域和高分辨率图像。尽管训练图像尺寸为 256x256,但该模型在推理过程中能够推广到更高分辨率的图像,例如高达约 2K(2048x2048)的图像[^1]。 关于输入图像的最低分辨率要求,虽然没有明确给出具体的下限数值,但从图像修复任务的一般实践来看,输入图像需要具备足够的内容信息以供模型提取特征并进行有效的修复。通常情况下,图像修复模型的最低输入分辨率建议为 128x128 或更高,以确保模型能够有效捕捉图像结构和纹理信息。因此,可以合理推断 LaMa 的最低输入图像分辨率建议不低于 128x128,否则可能会影响修复质量或导致结构信息缺失[^2]。 ### 示例代码:图像预处理 在使用 LaMa 进行图像修复前,可以对图像进行预处理以确保其符合模型的输入要求: ```python from PIL import Image import numpy as np def preprocess_image(image_path, min_size=128): img = Image.open(image_path).convert('RGB') width, height = img.size if width < min_size or height < min_size: # Resize to minimum size while preserving aspect ratio scaling_factor = min_size / min(width, height) new_size = (int(width * scaling_factor), int(height * scaling_factor)) img = img.resize(new_size, Image.BILINEAR) return np.array(img) image = preprocess_image("path_to_your_image.jpg") ``` ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值