Lama:《Resolution-robust Large Mask Inpainting with Fourier Convolutions》训练、推理实战记录

这篇博客介绍了如何在Lama模型训练中更改预设的mask生成方式,包括在saicinpainting项目中定义新的mask类、更新配置文件以调用自定义mask,并分享了数据准备和模型微调的步骤。作者提醒注意库版本的匹配,并提供了预训练权重的下载链接。

记录一下Lama模型的训练、infe踩坑,以及如何更改预设的mask生成方式。
一、环境
简单提一下,一定要按照作者给的requirements.txt里的库版本安装,hydra-core和pytorch-lightning最新版本在此项目代码上均会报错无法运行。

二、预训练模型微调
lama的训练全部是以配置文件.yaml的方式进行的,所以针对不同数据集的预训练模型所使用的yaml也是不同的。总体上作者是在PLACES和CelebA上进行了预训练,同时也包含了Big-Lama、Lama-fourier等多种模型细节的配置。就以在Places-Challenge效果最好的Big-Lama为例,在预训练权重上使用自己的数据和mask进行微调。
1、定义自己的mask生成方式
假如训练中不想使用原本预设的mask生成方式,想要根据自己的任务进行生成(例如在特定位置以特定形状进行生成mask)。
在saicinpainting/training/data/masks.py中首先参照作者方式构建自己的mask生成类。例如RandomSuperresMaskGenerator类是执行make_random_superres_mask函数返回一个矩阵mask,代表覆盖区域。
在这里插入图片描述

之后在同文件中的get_mask_generator函数中增添自己的类对应的kind。
在这里插入图片描述

最后在saicinpainting/training/data/datasets.py的make_default_train_dataloader函数中通过指定get_mask_generator对应的kind参数实现自定义mask类的调用。这个在训练过程中可以在config中指定
2、数

### 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") ``` ###
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值