LaMa 图像修复实战指南:如何 5 条命令跑出第一个修复结果
【免费下载链接】lama🦙 LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama
LaMa(Large Mask Inpainting with Fourier Convolutions,WACV 2022)是一个基于傅里叶卷积的图像修复项目:给它一张原图和一张掩码,它负责填出掩码内的像素。模型官方在 256×256 上训练,可以泛化到约 2k 的图像。如果你的需求是照片去物、破损修补,或者想复现和微调大掩码修复模型,这个项目提供预训练权重和完整的训练、评估管线。
第一次上手:5 条命令跑出第一个修复结果
先克隆仓库并建环境,conda 和 virtualenv 两条路线的命令都写在 README 的 Environment setup 一节。最短路径是:
git clone https://gitcode.com/GitHub_Trending/la/lama && cd lama # 克隆仓库并进入项目 conda env create -f conda_env.yml && conda activate lama # 创建并激活 Python 环境然后下载预训练模型。官方推荐 big-lama(在 Places Challenge 数据上训练,适合大场景),压缩包的下载入口列在 README 里,按其说明下载并解压,把big-lama目录放在项目根目录。同一个数据包里还有示例集 LaMa_test_images,解压后是一组现成的"原图+掩码",可直接当输入。
再跑推理。两个环境变量必须导出,否则脚本会因找不到依赖而报错:
export TORCH_HOME=$(pwd) && export PYTHONPATH=$(pwd) # 必需的环境变量 python3 bin/predict.py model.path=$(pwd)/big-lama indir=$(pwd)/LaMa_test_images outdir=$(pwd)/output # 开始推理跑完后 outdir 里就是修复结果。没有 GPU 就在命令末尾加device=cpu,速度变慢但能跑;想要零安装环境,docker/2_predict.sh可直接拉镜像执行推理。
看懂输入与输出:原图、掩码、结果的文件对应关系
输入目录只有一条规则:掩码是文件名带mask的 PNG,原图由掩码文件名去掉_maskXXX再拼上图片后缀得到。例如:
image1.png:原图image1_mask001.png:掩码,与原图同尺寸,白色区域是要修复的部分- 输出:outdir 下生成与掩码同名的
image1_mask001.png,输出后缀可用out_ext改,默认.png
上图是仓库 countless 掩码目录里的示例输入照片,关键在文件名配对而不是画面内容。原图后缀读自 configs/prediction/default.yaml 的img_suffix,默认.png。如果你的原图是.jpg,需要在命令后追加dataset.img_suffix=.jpg,否则掩码找不到对应原图,这批数据会被跳过。图像进入网络前会被填充到 8 的倍数(pad_out_to_modulo: 8),不需要你手动对齐尺寸。
掩码可以手绘,也可以用仓库脚本生成。由语义分割生成时,掩码内容大致长这样:
三个关键开关:掩码类型、refine、device
掩码生成配置——决定你测什么场景。configs/data_gen/ 下有 6 个文件,两个维度:细/中/粗(thin/medium/thick)× 256/512 画布。起步用random_medium_512.yaml:输出 512×512 裁剪图加中等大小的洞;thick 适合大面积缺失测试,所有配置都把掩码面积限制在图像 50% 以内(max_tamper_area: 0.5)。用法:
python3 bin/gen_mask_dataset.py $(pwd)/configs/data_gen/random_medium_512.yaml raw_images/ out/ --ext jpg # 批量生成图片和掩码refine=True——质量与速度的交换。默认关闭。打开后走多尺度细化:每个尺度迭代 15 次(n_iters: 15),最多 3 个下采样层级(max_scales: 3),图像会被自动缩放进 180 万像素预算(px_budget: 1,800,000)。大图的最终版建议打开,边缘和纹理更干净;批量跑测试集时保持关闭。
device——无 GPU 的兜底。默认cuda。加device=cpu用 CPU 推理,512×512 的图像单张从几秒到几分钟不等,验证流程够用;正式跑批再回 GPU。
卡住时怎么办:常见现象对照表
| 现象 | 原因 | 对策 |
|---|---|---|
| 输入目录里部分数据没被处理 | 扫描规则是*mask*.png,原图由掩码文件名反推 | 掩码命名成name_maskXXX.png,与原图同目录 |
| 输出全白或整张图都被重画 | 掩码全白,或原图后缀不匹配导致配错对 | 检查img_suffix是否与原图后缀一致 |
| CUDA 报错或显存不足 | 无 GPU 或大图占显存 | 加device=cpu,或换 256 画布的掩码配置 |
| 大图边缘发虚、有接缝 | 没走细化阶段 | 追加refine=True |
| 提示找不到模型 | model.path指向的目录结构不对 | 指向解压后含config.yaml和models/的顶层目录;自训模型用model.checkpoint=last.ckpt或 epoch 号 |
另外注意:模型在 256×256 上训练,官方说明可泛化到约 2k;远超 2k 的原图建议先降采样或分块再修,效果才有保障。
深入方向:仓库里值得读的目录
- 傅里叶卷积核心:saicinpainting/training/modules/ffc.py,FFC 层是论文的主要贡献
- 训练入口与配置:
bin/train.py+ configs/training/ 下的lama-fourier、big-lama等入口 - 指标评估:
bin/evaluate_predicts.py输出 FID/SSIM/LPIPS,对应实现见 saicinpainting/evaluation/losses/ - 数据准备脚本:fetch_data/,Places 和 CelebA-HQ 的下载、切分、掩码生成
- 交互教程:根目录 LaMa_inpainting.ipynb,按步骤走一遍完整修复流程
下一步可以直接做一件事:用random_medium_512给你自己的几张图生成掩码,先跑一次bin/predict.py,再对同一批输入追加refine=True跑一次,对比两组输出,基本就能建立对这个项目参数取舍的直观感觉。
【免费下载链接】lama🦙 LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考