照片里的杂物怎么“一键消失“?LaMa图像修复模型完整上手指南
照片里的杂物怎么一键消失LaMa图像修复模型完整上手指南【免费下载链接】lama LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama你有没有过这样的经历精心构图的照片里偏偏闯入一个路人、一根电线杆或者地上躺着一袋垃圾。用老式修复工具涂抹掉它们结果不是留下一团马赛克糊就是把背景的纹理搅成一锅粥。问题出在哪传统修复模型最怕的就是大块遮挡——遮挡面积一大模型只能在空洞边缘猜猜出来的内容自然失真。LaMaLarge Mask Inpainting大规模掩码图像修复正是冲着这个痛点来的。它是 WACV 2022 的一篇论文级开源项目核心卖点一句话就能讲清楚只用 256×256 的小图训练却能对高达 2K 分辨率的图片做出像样的修复尤其擅长栅栏、砖墙这类周期性纹理的补全。如果你在找一款能扛大活的图像修复方案这篇文章会带你从原理走到实战。一、它凭什么敢接大活把卷积搬进频域先解释一个反直觉的设计为什么传统模型修大块遮挡会翻车LaMa 不会普通卷积神经网络修图时相当于一个人戴着眼罩只靠近旁几格像素来推断远处该填什么。遮挡一变大周围已知像素离空洞中心太远信息传导就断了。LaMa 的做法是把图像整个切到频域里去处理——核心代码在saicinpainting/training/modules/ffc.py里面那个FourierUnit做了三件事ffted torch.fft.rfftn(x, dim(-2, -1)) # 1. 空间域 - 频域 ffted torch.stack((ffted.real, ffted.imag), dim-1) ffted self.conv_layer(ffted) # 2. 在频域里做 1x1 卷积 output torch.fft.irfftn(ffted, sx.shape[-2:]) # 3. 频域 - 空间域为什么这招有效打个比方传统卷积是只看眼前一勺菜决定加多少盐而频域变换等于先把整锅菜扫一遍再下判断。在频域里任意一个点都携带了整幅图像的全局周期信息——所以当 LaMa 面对一排被截断的栅栏或一堵缺角的砖墙时它能看出这个花纹是重复的然后用规律把缺口补齐而不是瞎糊一团。这就是论文里反复强调的FFCFast Fourier Convolution架构空间域负责局部细节频域负责全局结构两者并行再融合。上图是项目里的一张语义分割可视化图不同色块代表不同语义区域。它说明了一个事实LaMa 在做掩码生成时是可以结合语义信息的而不仅仅是按矩形框去遮。二、修复质量靠什么兜底一份损失函数配方光有频域卷积还不够LaMa 的修复质量还依赖一套多路损失函数的组合。打开configs/training/big-lama.yaml你会看到这样一份配方losses: l1: weight_known: 10 # 已知区域逐像素对齐权重拉高 adversarial: kind: r1 weight: 10 # 对抗损失让输出看起来真实 feature_matching: weight: 100 # 特征匹配约束高层语义一致 resnet_pl: weight: 30 # 感知损失用预训练网络衡量像不像简单解读一下这四味药的分工L1 损失只管已知区域别被改坏所以只给了已知区权重缺失区权重为 0对抗损失是造假者与鉴定师的博弈逼着生成结果逼近真实照片的分布特征匹配损失把生成图和原图分别送入一个判别网络比对中间层特征防止结构崩坏**感知损失resnet_pl**则用 ImageNet 预训练网络来算感知距离肉眼观感比像素差更贴合人类感受。这份配方藏在configs/training/下的各个 yaml 里想调参的同学可以直接改权重比例后面我们会讲到怎么覆盖它。三、三步跑通你的第一次推理纸上谈兵到此为止下面从零开始把 LaMa 跑起来。建议在 Linux NVIDIA 显卡的环境下操作整体流程分三步。第一步装环境。项目提供了三种环境方案对比如下方案一句话评价适合场景Docker零配置拉镜像即用生产环境、团队协作Conda依赖隔离干净调试方便本地研发、反复实验venv最轻量但依赖易冲突快速验证、临时跑通以 Conda 为例先把仓库拉下来git clone https://gitcode.com/GitHub_Trending/la/lama cd lama conda env create -f conda_env.yml conda activate lama export TORCH_HOME$(pwd) export PYTHONPATH$(pwd)第二步准备模型和数据。预训练模型big-lama按项目 README 里的指引下载并解压。图片和掩码的摆放有固定规矩掩码文件要命名为原图名_maskXXX后缀且和原图放同一目录例如photo1.png photo1_mask001.png photo2.png photo2_mask002.png掩码mask就是你要抹掉的区域白色部分会被修复黑色部分保持原样。你可以用bin/gen_mask_dataset.py自动生成随机掩码也可以自己用画图工具涂。第三步执行推理。python3 bin/predict.py \ model.path$(pwd)/big-lama \ indir$(pwd)/LaMa_test_images \ outdir$(pwd)/output如果你只有 CPU把devicecpu追加在命令末尾即可想用 Docker 跑则直接执行bash docker/2_predict_with_gpu.sh $(pwd)/big-lama $(pwd)/LaMa_test_images $(pwd)/output。几分钟后output目录里就会出现修复后的图片。常见报错速查报错现象大概率原因解决办法CUDA out of memory显卡显存不够调小输入图尺寸或换devicecpu找不到掩码文件命名不符合_maskXXX规则检查图片与掩码同名、同目录输出全是黑色/原样img_suffix配置和实际后缀不符在configs/prediction/default.yaml里改dataset.img_suffix四、三个进阶技巧从能跑到跑得专业跑通一次只是起点。下面三个技巧能让你把 LaMa 用出老手的感觉。技巧一用自己的数据微调而不是硬用通用模型。通用模型修人像没问题但如果你处理的是商品图、医学影像这类特殊领域建议走一遍自定义训练。流程是先给素材生成固定掩码再配置数据路径最后开训。# 1. 为验证集生成 thick 类型掩码 python3 bin/gen_mask_dataset.py \ configs/data_gen/random_thick_512.yaml \ my_dataset/val_source/ my_dataset/val/random_thick_512/ --ext jpg # 2. 新建 location 配置指向你的数据目录 # 把 data_root_dir / out_root_dir / tb_dir 三项填进 # configs/training/location/my_dataset.yaml # 3. 启动训练-cn 指定模型配置location 指向你的数据 python3 bin/train.py -cn lama-fourier locationmy_dataset data.batch_size10注意configs/data_gen/里有random_thin_256、random_medium_512、random_thick_512等不同掩码模板分别对应细/中/粗三种遮挡难度测试集一般三种都做一遍。技巧二高清大图记得开精修模式。想要 2K 级修复效果可以在预测命令里加一个开关python3 bin/predict.py refineTrue model.path$(pwd)/big-lama \ indir$(pwd)/LaMa_test_images outdir$(pwd)/outputrefineTrue会启用configs/prediction/default.yaml里的 refiner一个多层图像金字塔精修器默认迭代 15 轮对高分辨率结果的边缘细节有明显改善代价是推理时间变长。项目还自带内存分析脚本下图展示了一次 3D 场景处理的内存占用曲线稳定在 300–400MB 左右——这让开发者对显存规划有了直观参考。技巧三命令行覆盖配置少改文件。LaMa 基于 Hydra 配置系统几乎所有参数都能在命令行覆盖不必动 yaml 文件。比如想把批量大小改成 4、开启混合精度训练python3 bin/train.py -cn lama-fourier locationmy_dataset \ data.batch_size4 \ trainer.kwargs.precision16训练器配置在configs/training/trainer/any_gpu_large_ssim_ddp_final.yaml默认监控val_ssim_fid100_f1_total_mean这个综合指标来挑选最佳 checkpoint你也可以改成只关注 SSIM 或 FID。调参时用python3 bin/train.py -cn big-lama run_titlemy-test这种覆盖写法能省下大量改文件的功夫。五、什么时候选 LaMa什么时候绕道选型前先泼一盆冷水LaMa 不是万能橡皮擦。它适合大面积遮挡、周期性纹理、背景相对简单的修复但如果遮挡区域涉及复杂的新物体生成——比如要在空房间里凭空画一张沙发——那不是修复模型的职责得交给生成式模型。一张表帮你快速判断场景用 LaMa说明删掉路人、杂物、电线✅ 很合适背景多为自然纹理修复后几乎无痕修老照片划痕、破损✅ 合适小掩码场景L1 权重已保证已知区不被破坏栅栏、砖墙、布料花纹补全✅ 强项频域对周期结构是降维打击凭空生成全新物体❌ 不合适需要文生图/生成式模型实时视频逐帧修复⚠️ 需评估推理速度取决于显卡可考虑量化加速下一步行动今天就可以动手。按第三节的流程跑通一张你自己的照片——先选一张背景简单的图用画图工具涂一个白色大色块当掩码运行一次bin/predict.py把修复结果和原图放一起对比你会直观感受到大掩码修复和普通工具的差距。最后送你一句从这份代码里读出来的经验修复难题的解法往往不在多画几笔而在换个坐标系看问题——LaMa 把图像从空间域搬到频域大块遮挡的难题就这么被绕了过去。这就是优秀开源项目的魅力一个巧妙的视角转换胜过十倍的算力堆砌。【免费下载链接】lama LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考