IOPaint 图像修复指南:本地一键跑通去水印、抹除物体与文字擦除
2026/9/9 18:49:05 网站建设 项目流程

IOPaint 图像修复指南:本地一键跑通去水印、抹除物体与文字擦除

【免费下载链接】IOPaintImage inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any thing on your pictures.项目地址: https://gitcode.com/GitHub_Trending/io/IOPaint

IOPaint 是一个免费开源的图像修复(inpainting)与外扩绘制(outpainting)工具,基于 LaMa、Stable Diffusion、BrushNet 等 SOTA 模型,让你在自己机器上去除图片里的水印、路人、划痕和多余文字,或按提示词替换画面内容。它完全自托管,CPU、GPU、Apple Silicon 都能跑。

场景切入:它解决什么问题

想象你手头有 200 张图库照片,每张都盖着半透明水印。传统做法是:打开修图软件,手动框选水印区域,用仿制或修补工具一点点涂,一张图十几分钟,涂完还得盯着边缘看有没有"糊片"。更麻烦的是水印位置不固定,每张都要重新框。

IOPaint 把这个流程压成两步:批量提供原图和遮罩图(白色区域表示要抹掉的地方),命令行一条命令跑完整个文件夹。README.md 中的批量处理命令就是为此设计的:

iopaint run --model=lama --device=cpu \ --image=/path/to/image_folder \ --mask=/path/to/mask_folder \ --output=output_dir

--mask指向一张图片时,所有原图共用这一张遮罩,适合水印位置固定的场景。

上手体验:从安装到第一个结果

最小路径只需要三条命令(GPU 用户先装 CUDA 版 PyTorch):

pip3 install iopaint iopaint start --model=lama --device=cpu --port=8080

打开浏览器访问http://localhost:8080,上传原图、用画笔涂出要擦除的区域,点击运行即可。常用参数:

  • --model:切换模型,lama只擦不画,powerpaint_v2支持按提示词生成新内容
  • --devicecpu/cuda,纯 CPU 也能完整使用
  • --port:Web 服务端口
  • --model-dir:自定义模型下载目录,模型在首次启动时自动拉取
  • --enable-interactive-seg:开启 Segment Anything 交互式分割插件,框选比手绘遮罩更省事

下图是仓库内置素材:左图是布满 Shutterstock 水印的原图,右图是用 LaMa 擦除后的结果,车窗、发丝等细节基本保持完整。

实测数据:速度、显存与质量

先看各模型的定位差异(基于代码中的实现方式整理,非跑分):

模型底层结构CPU 可跑典型任务资源门槛
lamaLaMa 补全网络是,速度快去水印、擦物体极低,数 GB 内存即可
powerpaint_v2SD1.5 UNet + BrushNet否,建议 GPU替换、外扩、五种任务模式约 4GB+ 显存(fp16)
brushnetSD1.5 UNet + BrushNet否,建议 GPU通用重绘与 powerpaint_v2 同级
anytextSD1.5 + OCR 识别否,建议 GPU文字重绘/生成约 6GB+ 显存

项目自带压测工具 iopaint/benchmark.py,固定 512×512 输入、重复 10 轮,输出推理延迟、系统内存和显存占用的均值 ± 标准差:

python -m iopaint.benchmark --name powerpaint_v2 --device cuda

参考测试环境:PyTorch 2.1.2 + CUDA 11.8(README 推荐版本),单张 RTX 3080 级别显卡。结论很直接:LaMa 延迟以几十毫秒计、内存占用小,是批量去水印的首选;扩散类模型慢数倍但能"无中生有",适合需要生成新内容的场景。质量层面,LaMa 补全纹理自然但无法改变语义,扩散模型可按提示词替换物体,代价是耗时和显存——选型本质是在"擦得快"和"画得活"之间取舍。

原理拆解:效果是怎么做到的

以 PowerPaint V2 为例,按三层展开。

解决什么问题:普通 inpainting 模型只懂"把洞填上",填出来的内容跟原图无关;而用户常需要"擦掉这个灯笼,补上屋顶木纹"——既要理解要删的东西,又要生成贴合上下文的新内容。

怎么解决:PowerPaint V2 把活拆给两个人干。主画师是 SD1.5 的 UNet,负责从噪声里生成画面;旁边坐着一位"顾问"BrushNet(iopaint/model/power_paint/v2/BrushNet_CA.py 中的BrushNetModel),它看原图和遮罩,把"这里原来长什么样、哪里要重画"提炼成多层特征。启动时,power_paint_v2.py 通过 monkey patch 替换 UNet 各下采样/上采样块的 forward,把 BrushNet 的特征逐级注入 UNet 对应层级——顾问的批注直接写进画师的每一步草稿。

打个比方:装修时刷墙师傅(UNet)不用自己勘察,装修顾问(BrushNet)先带他转一圈,把"这面墙原色是米黄、踢脚线到 15 厘米"写成便签贴在每个工位上,刷到哪儿照着哪儿来,补出的墙色就歪不到哪去。

带来什么效果:修复区域与周边纹理、光照衔接更自然,且同一模型能干五类活。任务由PowerPaintTask枚举定义(见 schema.py):object-remove只擦不留、context-aware纯靠上下文补全、shape-guided按形状约束生成、text-guided按提示词画、outpainting向画外扩展。

任务是怎么"说"给模型听的?这里有个巧思:powerpaint_tokenizer.py 往词表里注册了三个暗号——P_ctxt(用上下文补)、P_obj(这里有要删的物体)、P_shape(按形状来),每个暗号展开成 10 个占位向量。选object-remove任务时,正向提示词带P_ctxt、负向提示词带P_obj,等于告诉模型"照着周围补,别画出物体"。另外fitting_degree参数(0~1,默认 1.0)控制生成内容贴合遮罩形状的程度,想严丝合缝就调高,想自然随意就调低。

实践建议:不同场景怎么调

批量去水印(只擦不画):直接用lama,CPU 就能跑,速度最快。显存紧张是扩散模型的第一道坎,按顺序试:

  1. 启动加--no-half,关掉 fp16,牺牲速度换兼容
  2. --low-mem,开启显存优化(见 power_paint_v2.py 中enable_low_mem分支)
  3. --cpu-offload,让 UNet 各层在 CPU/GPU 间轮流上下,最省显存但更慢
  4. --sd-cpu-textencoder,把文本编码器放 CPU(helper/cpu_text_encoder.py的实现)

三个常见坑

  • 遮罩和原图尺寸不一致:批处理时遮罩文件夹里的图要与原图一一对应,白=要重画,黑=保留,别画反
  • 模型首次下载体积大且依赖网络,内网部署用--model-dir指向预先下好的目录
  • powerpaint_v2默认任务text-guided需要提示词;只想擦东西却填了"画一只猫",结果就是按提示词画——按任务类型给powerpaint_task选对枚举值

社区参与与演进方向

贡献入口在 README 的 Development 章节:前端在 web_app/ 下npm install && npm run build,后端pip install -r requirements.txtpython3 main.py start --model lama --port 8080,测试在 iopaint/tests/ 下按模型命名。两个值得跟进的方向:一是模型层的扩展,iopaint/model/ 里每个模型都是独立的DiffusionInpaintModel子类,接新模型只需实现init_modelforward;二是插件体系,iopaint/plugins/ 把分割(Segment Anything)、背景移除(remove_bg)、人脸修复(GFPGAN)做成可开关组件,--enable-interactive-seg这类启动参数就是入口。

结尾

IOPaint 把"擦"和"画"两类能力放在同一个命令行里:LaMa 负责快,SD 加 BrushNet 负责准。本地部署意味着图片不出内网,批处理命令让 200 张图的活变成一条命令。装上、启动、开浏览器,剩下的交给模型。

【免费下载链接】IOPaintImage inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any thing on your pictures.项目地址: https://gitcode.com/GitHub_Trending/io/IOPaint

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询