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

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

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

本次复现的论文是图像修复领域较火的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)

在这里插入图片描述

  传统的卷积在网络的前几层并不能获得很大的感受野,这将浪费很多计算空间来对感受野进行建模,而且较小的感受野缺失全局的信息,于是作者使用了快速傅里叶卷积来获得全局的感受野。快速傅里叶卷积原论文地址:快速傅里叶卷积论文FFC用傅里叶变换到频域,在频域内做卷积,然后再逆变换回去。FFC包含四个部分:局部-->局部局部-->全局全局-->局部全局-->全局,前三部分都是使用标准3x3卷积实现的,只有最后一部分是使用频域变换。频域变换由两部分组成:Fourier Unit (FU)Local Fourier Unit (LFU)

Fourier Unit (FU)

伪代码如下图所示:
在这里插入图片描述
作者给出的伪代码介绍的非常清楚,其实就是先做傅里叶变换,在频域对实部和虚部做卷积,然后再逆变换回去。内部的卷积层是1×1卷积。

Local Fourier Unit (LFU)

在这里插入图片描述
目的是捕捉半全局信息,做法是将input feature map分为4个patch,分别使用FU即可。这样影响的是四分之一空间内的特征关联。就相当于是局部的nonlocal,想法合理。LFU 计算量比FU大,因为通道数多。实验说明在分类实验中,LFU还是很有用的。

三、FFC中local和global通道划分比例

在这里插入图片描述
FFC原论文实验中给出了效果最好的比例,ratio=0.5,在LaMa模型中作者也使用的是ratio=0.5。

四、训练策略

在ImageNet上做预训练,也可以在自己的数据集上进行训练,只需要修改config.py中的类别个数即可。目前学习率还有各种超参数我都是默认使用的Swin Transformer的超参,在ImageNet上做预训练开销太大,超参也没时间调。如果想训练自己的数据集,可以把学习率和优化器的参数适当调大一点。
代码开源地址:https://github.com/RooKichenn/General-lama-backbone

### 关于Lama模型训练复现的方法教程 #### 一、环境准备 为了成功复现并训练Lama模型,需先搭建合适的开发环境。这包括安装Python及其依赖库,如PyTorch等机器学习框架。由于Meta已经提供了llama系列模型的预训练权重[^2],可以直接利用这些资源而不需要重新收集大规模的数据集。 #### 二、获取预训练模型与配置文件 访问官方发布的链接下载所需的LLaMA架构及相关预训练参数。确保所使用的版本是最新的稳定版,并仔细阅读附带文档中的说明指南,以便更好地理解各个组成部分的功能以及如何调整设置以适应特定需求。 #### 三、数据处理 对于Stanford Alpaca而言,其采用了OpenAI的text-davinci-003作为教师模型生成了大量的指令跟随样本来构建自己的训练集合[^1]。然而,在尝试重现类似的流程时,可能需要根据实际情况创建适合当前项目的定制化语料库。如果目标是模仿Alpaca的做法,则可以考虑采用相似的技术路线——即通过现有的高性能语言模型来辅助生产高质量的教学材料;当然也可以探索其他途径获得适当的数据源。 #### 四、微调过程 一旦拥有了足够的标注数据之后,便可以通过迁移学习的方式对基础模型进行进一步优化。具体来说就是基于已有的大型预训练模型(比如这里提到的7B规模),针对具体的任务场景做针对性改进。此阶段涉及到超参的选择、损失函数的设计等多个方面的工作。值得注意的是,整个过程中消耗的成本相对较低,例如在云端租用GPU实例完成一次完整的迭代大约只需要花费几十美元不等。 #### 五、评估与部署 经过充分训练后的模型应当接受严格的性能测试,确保能够在预期的应用领域内达到理想的精度水平。最后一步则是将最终成果打包成易于分发的形式,方便他人使用或集成到更大的系统当中去。 ```bash # 安装必要的软件包 pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 # 下载预训练模型 wget http://link_to_meta_pretrained_model_weights.zip unzip meta_pretrained_model_weights.zip -d ./models/ # 加载预训练模型并开始微调... python train.py --model_path=./models/pretrained.pth ... ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值