公司动态

如何用LaMa图像修复把破损照片一键补全?零基础实操指南

📅 2026/8/18 15:15:21
如何用LaMa图像修复把破损照片一键补全?零基础实操指南
如何用LaMa图像修复把破损照片一键补全零基础实操指南【免费下载链接】lama LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama朋友翻出一张30年前的全家福人脸处裂了一道大缝他问我这还能救吗我盯着那道裂缝想了半分钟——普通修图工具只会把裂缝边缘抹糊而今天要介绍的 LaMa 图像修复项目专治这种大范围缺失的疑难杂症。它是 WACV 2022 的论文开源实现核心卖点一句话只用 256×256 的小图训练却能在大到 2K 分辨率的图片上高质量补全。这篇文章带你从零跑通它并搞懂它凭什么敢这么狂。先花10秒判断这个工具适不适合你你的需求LaMa 表现备注去掉照片里乱入的路人/电线杆⭐⭐⭐⭐⭐经典场景效果惊艳修复破损老照片的大裂缝⭐⭐⭐⭐⭐大面积掩码正是它的强项恢复周期性纹理百叶窗、砖墙⭐⭐⭐⭐⭐论文里的招牌实验实时修图Web端逐帧处理⭐⭐需配合量化/TensorRT 优化视频逐帧修复⭐⭐无时序一致性保证会闪文字/logo 的语义化重写⭐只做纹理推测不理解内容一句话总结LaMa 是填坑高手不是创作高手。它擅长把缺失区域用周围上下文合理地补出来但不理解画面里该不该有文字、该不该有人。5分钟跑通最小可用路径Docker 版最快的路永远是 Docker——仓库已经把所有依赖打包好了你只差模型和一张带掩码的图。# 1. 克隆仓库 git clone https://gitcode.com/GitHub_Trending/la/lama cd lama # 2. 下载预训练权重big-lama 是综合表现最好的模型 curl -LJO https://huggingface.co/smartywu/big-lama/resolve/main/big-lama.zip unzip big-lama.zip # 3. 准备输入图片和掩码同名同目录 # 图片叫 example.png掩码就叫 example_mask001.png ls input_dir/ # example.png # example_mask001.png # 4. 一条命令跑推理GPU版 bash docker/2_predict_with_gpu.sh \ $(pwd)/big-lama \ $(pwd)/input_dir \ $(pwd)/output没有 GPU 就换bash docker/2_predict.sh ... devicecpu大图上会慢但能跑。掩码怎么来configs/data_gen/下有现成的随机掩码生成配置用仓库自带的脚本就能批量造python3 bin/gen_mask_dataset.py \ configs/data_gen/random_thick_512.yaml \ input_dir/ \ output_dir/ \ --ext jpg输出目录里每个xxx_crop000.png都会配一个xxx_crop000_mask000.png命名规则和推理端正好对得上这就是开箱即用的设计。核心机制拆解傅里叶卷积到底牛在哪先讲直觉。假设你面前有一面被砸了个大洞的砖墙人类修复时会怎么做你会先退后几步观察整面墙的砖缝走向再推测洞口位置该长什么样。退后几步看全局这个动作就是傅里叶卷积干的事。普通卷积就像凑到墙跟前拿小刷子一点点补——它只看得到局部几像素的上下文天然近视。而 LaMa 的生成器在saicinpainting/training/modules/ffc.py里做了一个关键动作把特征图从空间域变换到频域再处理。# 摘自 saicinpainting/training/modules/ffc.py 的 FourierUnit fft_dim (-2, -1) # 对高、宽两个维度做FFT ffted torch.fft.rfftn(x, dimfft_dim, normself.fft_norm) # 图像 - 频域 ffted torch.stack((ffted.real, ffted.imag), dim-1) # 拆成实部虚部 ffted self.conv_layer(ffted) # 在频域上做1x1卷积学到调频 ffted torch.fft.irfftn(ffted, sx.shape[-2:], dimfft_dim, normself.fft_norm) # 再变回来为什么在频域做卷积就能退后几步看全局因为频域里的每一个频率分量天然携带整张图的信息——低频对应整体明暗走向高频对应边缘纹理细节。对频域做一次 1×1 卷积等于一次性调整所有位置的全局特征感受野直接拉满再也不是近视眼了。这就是它面对大掩码还能保持纹理连贯的根本原因。另一个精妙设计藏在FFCFast Fourier Convolution模块里它把通道拆成两半ratio_gin0.75表示 75% 的通道走频域全局路径剩下 25% 走普通卷积局部路径两路结果相加再输出见configs/training/generator/ffc_resnet_075.yaml。局部细节和全局结构并行工作互不干扰——这就是鱼和熊掌兼得的实现方式。掩码/分割可视化LaMa 图像修复需要像素级的掩码输入分割思路和掩码生成在仓库的工具链中是相通的真实场景拆解给电商产品图去杂物假设你运营一个家具电商摄影师在样品间拍了张沙发图角落混进了补光灯和线缆要批量清理。完整闭环如下第一步生成掩码。手动抠太累先用检测模型定位杂物或者干脆用随机掩码脚本bin/gen_mask_dataset.py先跑一版看效果。注意configs/data_gen/random_thick_512.yaml里的参数max_width: 250、max_len: 450控制笔刷的粗细长短杂物大就把这两个值调大。第二步推理。用上面5分钟跑通里的预测命令configs/prediction/default.yaml里有个值得注意的参数pad_out_to_modulo: 8——它会把输入 pad 到 8 的倍数再送进网络避免边缘裁剪输出时自动还原这个细节保证了任意尺寸的图都能跑。第三步质量评估。别用肉眼打分跑一遍仓库的指标脚本python3 bin/evaluate_predicts.py \ configs/eval2_gpu.yaml \ eval_src/ \ inference/random_thick_512 \ metrics.csv它一口气算 SSIM、LPIPS、FID脚本在bin/evaluate_predicts.py用数字说话方便你对比不同模型/参数。第四步针对性调优。发现沙发的布纹被补糊了这是高频纹理丢失可考虑开refineTrue让后处理精修器多跑几轮迭代configs/prediction/default.yaml里refiner.n_iters: 15代价是推理时间翻倍但纹理细节通常有明显回升。这才是闭环——不是跑完一次就完事。最容易踩的4个坑我全都踩过坑1输出图比输入图小一圈现象修复结果尺寸不对边缘被裁。根因图片不是 8 的倍数pad_out_to_modulo的 padding 没有正确还原。解法先确认configs/prediction/default.yaml里pad_out_to_modulo存在且用的是官方bin/predict.py它自带 unpad 逻辑见bin/predict.py第 87-90 行。坑2掩码命名不对一条数据都没跑现象日志显示 dataset 为空。根因推理端要求掩码名为图片名_maskXXX.png且与图片同目录。解法别手工改名直接用bin/gen_mask_dataset.py生成或用bin/mask_example.py先看格式示例。坑3训练时显存直接爆掉现象CUDA out of memory。根因big-lama.yaml用的生成器是 18 个残差块的大模型。解法改用lama-fourier配置9 块见configs/training/generator/ffc_resnet_075.yaml并把 batch_size 调小python3 bin/train.py -cn lama-fourier data.batch_size4或打开混合精度trainer: any_gpu_large_ssim_ddp_final里的precision: 16。坑4训练loss很稳修复效果却一塌糊涂现象指标不错但视觉上糊。根因只盯着单一指标。解法configs/training/big-lama.yaml里那组 loss 权重是作者调好的配方——feature_matching: 100结构一致性resnet_pl: 30感知质量l1(known区域): 10像素精度三个维度缺一不可别轻易砍。掩码处理工具链的内存曲线LaMa 图像修复生态里的配套工具如 countless 计数同样注重内存效率峰值约250MB高频问题 FAQQLaMa 能用来做实时抠图/消除吗A直接推理在消费级 GPU 上单张 512² 图大约几百毫秒到 1 秒级达不到 60fps 实时。仓库里有bin/to_jit.py可导出 TorchScript配合 TensorRT 量化能显著提速适合做成异步任务而非实时流。Q我自己有数据怎么训练专属模型A按 README 准备train/val_source/visual_test_source/eval_source四个目录用bin/gen_mask_dataset.py为验证集生成固定掩码再写一个 location 配置指向你的目录最后python3 bin/train.py -cn lama-fourier locationmy_dataset。注意验证集掩码必须固定否则没法公平对比模型。Q训练要多久要多大的卡A官方在 8×V100 上训练 Big-LaMa个人复现用单卡 24GB 跑lama-fourier256²、batch 4-8大约一到两周能收敛到可用水平。想快速验证流程先用小数据集跑通再上全量。Q为什么我的照片修复出来有色差A大概率是掩码边缘太硬。试试在掩码上做轻微膨胀羽化或者用random_thin_256.yaml这类更贴近真实划痕的掩码配置重新生成。下一步你可以做的3件事今天就跑通一次推理下载big-lama权重 一张自己的照片用画笔随便涂几笔存成掩码看看 5 分钟里能不能得到一张让你惊讶的修复图——这是建立信心的最快方式。在bin/目录挖一遍宝side_by_side.py做对比图、analyze_errors.py分析失败案例、make_checkpoint.py整理可发布模型这些工具脚本本身就是一套生产工具箱。用你自己的数据集微调一版哪怕只有 200 张行业图从lama-fourier预训练权重继续训练而不是从零开始往往几百轮迭代就能让模型懂你的业务场景这是从玩家到工程实践的分水岭。LaMa 最打动我的不是那篇 WACV 论文而是它小模型干大事的工程态度——256 的训练尺寸、2K 的推理表现这种分辨率鲁棒性意味着你不需要为每种分辨率各训一个模型。如果你也在做图像处理相关的产品把它放进工具箱里大概率不会让你失望。【免费下载链接】lama LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考