LaMa 图像修复完整指南:从安装到出图的大掩码修复实践
【免费下载链接】lama🦙 LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama
LaMa 图像修复是一个开源项目,专门处理图片中大面积缺损的自动补全:你只需给一张原图和一张掩码(白色标出要消除区域、其余为黑色的同尺寸图),它就能把缺口自然地填上。做水印去除、路人消除、素材修复的工程师,都能直接拿它上手。
LaMa 是什么:大掩码图像修复的一句话定位
LaMa 是一个只训练在 256×256 上、却能稳定修复约 2K 分辨率图像的开源模型,发表于 WACV 2022。
"大掩码"指的是被消除的区域可以非常大。官方 thick 掩码配置里,单张图的掩码面积上限就是整张图的 50%(max_tamper_area: 0.5)。普通修复模型处理这种大洞会糊掉,LaMa 的核心卖点就是这类场景。
上图是项目仓库自带的一张高分辨率示例图。LaMa 对这类远超训练分辨率的输入仍然能正常修复,这是 README 里明确标注的特性。
⚡ LaMa 快速上手指南:从安装到出图的最短路径
整个流程四步:克隆仓库、装依赖、放模型、跑推理。
第 1 步:克隆仓库
git clone https://gitcode.com/GitHub_Trending/la/lama
第 2 步:装依赖(以 Python 虚拟环境为例)
# 先装指定版本 PyTorch,再装项目其余依赖 pip install torch==1.8.0 torchvision==0.9.0 pip install -r requirements.txt也可以用 Conda:conda env create -f conda_env.yml。更省事的方式是用官方 Docker 镜像,见 docker/ 目录。
第 3 步:下载模型
按 README.md 里的说明下载 big-lama 预训练模型(官方最强权重,基于 Places2 + Places Challenge 训练),解压到项目根目录,得到big-lama文件夹。
第 4 步:准备数据并出图
把原图和掩码放在同一文件夹,掩码文件命名成[图片名]_mask[编号][后缀],例如cat.png配cat_mask001.png。后缀名要在 configs/prediction/default.yaml 里改img_suffix。然后运行:
# 运行推理:模型路径 + 输入目录 + 输出目录 export TORCH_HOME=$(pwd) && export PYTHONPATH=$(pwd) python3 bin/predict.py model.path=$(pwd)/big-lama indir=$(pwd)/input outdir=$(pwd)/output输出目录里会生成修复后的图片。想要更平滑的高清结果,在命令后追加refine=True开启二次精修。
原理一句话讲透:傅里叶卷积如何看懂整张图
一句话:普通卷积像只看得见手边一小块的修补匠,傅里叶卷积像能听全曲谱的调音师,它先看图的全局,再修局部。
把一张图想成一首歌。普通卷积一次只能听相邻几个音,窟窿一大,它手里没有足够的"旋律信息",只能瞎补。傅里叶卷积先把图拆解成"频率域的和弦":低频是和弦走向(整体布局、明暗分布),高频是吉他泛音(纹理、边缘细节)。它在频率域上直接改写这些"音符",再还原回图片,所以即使半个图都空了,它依然握着全局上下文。
实现可以看 ffc.py 里的 FFC 模块。在 big-lama.yaml 中,生成器的残差块把 75% 的通道(ratio_gin: 0.75)放在全局频率域里运算,这就是它对大掩码稳定的来源。
损失函数也值得知道一句:感知损失是拿"人眼看着像不像"来衡量、而不是逐像素比数字的损失。LaMa 同时用了 L1(只约束已知区域,权重 10)、特征匹配(权重 100)、ResNet 感知损失(权重 30)和 GAN 对抗损失(r1,权重 10),分别管保真、结构、观感和真实感。
上图展示了仓库中分割掩码的生成效果:颜色越丰富的区域,说明掩码生成器对图内结构识别得越细。训练时的随机掩码就是按这类方式批量造出来的。
🎛 实用调参技巧:分辨率、掩码大小与 batch size 具体数值
建议先跑通默认配置,再按下面三处微调。
分辨率怎么定
训练分辨率固定 256×256,推理不限。默认推理会自动把图像边长补到 8 的倍数(pad_out_to_modulo: 8)。开启精修时,default.yaml 里px_budget: 1800000表示精修会把图像缩放到"高×宽 ≤ 180 万像素"(约 1342×1342),最多 3 个尺度、每尺度 15 次迭代。你的图小于这个值就保持原尺寸;超过 2K 的图,建议先缩到 2K 再送进去,显存和耗时都更友好。
掩码大小怎么选
掩码有三档预设,在 configs/data_gen/ 下:random_thin_*(细窄)、random_medium_*(中等)、random_thick_*(大块),各有 256/512 两种尺寸。粗看差别:thick 的块状掩码最大边长 300px、面积可占到 50%,适合消除大物体;thin 更细碎,适合去线、去水印。生成掩码用:
# 训练时用命令行覆盖配置,把 batch size 调成 4 python3 bin/train.py -cn lama-fourier location=my_dataset data.batch_size=4batch size 与显存
官方训练配置默认batch_size: 10,对应 256 分辨率。如果你换 512 分辨率训练,或显存只有 8GB,建议从 2~4 起步,再逐步上调。总训练轮数默认 40 个 epoch,自动保留 val 指标最好的 5 个 checkpoint(见 trainer 配置)。默认精度是 32 位,显存紧张时可以把配置里的precision改成 16 开混合精度。
上图是仓库中掩码生成流程的内存占用曲线,峰值约 250MB。也就是说造掩码这一步本身不吃内存,瓶颈在后面的训练和推理。
🧩 生态与周边工具:基于 LaMa 图像修复的第三方项目
LaMa 是模型层,社区在它上面长出了不少开箱即用的工具。挑 4 个常见的:
| 项目 | 用途 | 适用场景 |
|---|---|---|
| lama-cleaner | 自带 Web 界面的图片消除服务,可自建 | 团队内部上线一个消除工具 |
| CoreMLaMa | 把 LaMa 转成 Apple Core ML 格式 | iPhone、Mac 上端侧推理 |
| simple-lama-inpainting | 一个 pip 包,几行代码调用 LaMa | 在自己的 Python 业务里快速集成 |
| Inpaint-Anything | SAM 分割 + LaMa 修复 | 用一句话框出目标再消除,免手画掩码 |
手画掩码嫌麻烦的话,Inpaint-Anything 这类"先分割、后修复"的组合最省事。
小结:下一步建议
建议你先下载 big-lama 权重,用自己的 3~5 张图把上面的推理命令跑通,这是成本最低的体验方式。效果不满意时,优先加refine=True开精修,再调掩码大小。如果你的业务集中在人脸或某一类场景,可以用 CelebA-HQ 数据按lama-fourier-celeba配置微调一个专用模型。
【免费下载链接】lama🦙 LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考