{
  "title": "实践：纯 CPU 图片擦除三模型实测——LaMa / MI-GAN / Telea 的选型与工程细节",
  "url": "/posts/practice-erase-cpu-benchmark/",
  "permalink": "https://hackcv.com/posts/practice-erase-cpu-benchmark/",
  "date": "2026-08-23",
  "lastmod": "2026-08-23",
  "author": "hackcv",
  "description": "Intel Mac 纯 CPU + ONNX Runtime 实测 LaMa/MI-GAN/Telea：速度恒定特性、crop vs resize 策略、掩码膨胀羽化，以及三档选型矩阵——全部真实测量。",
  "categories": ["研究简报"],
  "tags": ["AI","图像擦除","ONNX Runtime","LaMa","MI-GAN","实践"],
  "cover": "https://picsum.photos/seed/%E5%AE%9E%E8%B7%B5%E7%BA%AF-cpu-%E5%9B%BE%E7%89%87%E6%93%A6%E9%99%A4%E4%B8%89%E6%A8%A1%E5%9E%8B%E5%AE%9E%E6%B5%8Blama-/-mi-gan-/-telea-%E7%9A%84%E9%80%89%E5%9E%8B%E4%B8%8E%E5%B7%A5%E7%A8%8B%E7%BB%86%E8%8A%82/1200/675",
  "readingTime": 1,
  "wordCount": 275,
  "content": "\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e一句话结论\u003c/strong\u003e：纯 CPU 能做生产级图片擦除。\u003cstrong\u003eLaMa 2.1s/张质量最高做终稿、MI-GAN 0.8s 做快速预览、OpenCV Telea \u0026lt;50ms 处理纯色背景\u003c/strong\u003e，三者在同一进程内按场景切换。两个关键工程结论：① 推理耗时\u003cstrong\u003e几乎不随输入分辨率线性增长\u003c/strong\u003e（2.1s/0.8s 恒定）；② \u003cstrong\u003e局部裁剪（crop）显著优于整图缩放（resize）\u003c/strong\u003e，能保留山体等高频细节。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"背景与动机\"\u003e背景与动机\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e场景\u003c/strong\u003e：去水印、去杂物、去文字，机器只有 CPU（Intel Mac x86_64，12 核 / 16GB），无 NVIDIA GPU\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e硬约束\u003c/strong\u003e：PyTorch 官方从 2.3 起\u003cstrong\u003e不再发布 macOS x86_64 wheel\u003c/strong\u003e——GPU 路线与 PyTorch 路线都断，唯一可行是 \u003cstrong\u003eONNX Runtime（CPU 推理）\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e排除项\u003c/strong\u003e：扩散模型（SD Inpainting / BrushNet / FLUX）在 CPU 上 30s~数分钟，Intel Mac 不可用，直接排除\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"三模型实测\"\u003e三模型实测\u003c/h2\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e模型\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e来源\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e大小\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e实测耗时\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e特点\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e适用\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003eLaMa\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eWACV 2022（IOPaint 默认）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e~198 MB\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e2.1 s\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e大掩膜、纹理重建最强\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e通用擦除、建筑/自然纹理、终稿\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003eMI-GAN\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eICCV 2023（Picsart）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e~27 MB\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e0.8 s\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e快、轻，细纹理略糊\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e快速预览、移动端\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003eTelea/NS\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eOpenCV 内置\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e0 MB\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003cstrong\u003e\u0026lt;50 ms\u003c/strong\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e扩散插值、简单背景\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e纯色背景、水印\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e关键观察：耗时不随分辨率线性增长\u003c/strong\u003e——LaMa 稳定 2.1s、MI-GAN 稳定 0.8s（在常规尺寸范围内）。因为模型内部对输入做了固定尺寸处理，分辨率变化主要影响预处理而非推理主体。这让\u0026quot;先小图预览、后大图出图\u0026quot;的工作流成本很低。\u003c/p\u003e\n\u003ch2 id=\"工程细节决定擦除质量的关键设计\"\u003e工程细节（决定擦除质量的关键设计）\u003c/h2\u003e\n\u003ch3 id=\"1-后端抽象--自动策略选择\"\u003e1. 后端抽象 + 自动策略选择\u003c/h3\u003e\n\u003cp\u003e三模型统一抽象为独立后端（\u003ccode\u003eeraser/backends/\u003c/code\u003e：\u003ccode\u003elama.py\u003c/code\u003e / \u003ccode\u003emigan.py\u003c/code\u003e / \u003ccode\u003eclassic.py\u003c/code\u003e），共享同一掩膜输入与后处理管线。\u003ccode\u003epipeline.py\u003c/code\u003e 的 \u003ccode\u003e_pick_strategy\u003c/code\u003e 按\u003cstrong\u003e输入尺寸 + 掩膜大小\u003c/strong\u003e自动选择：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecrop（局部裁剪）\u003c/strong\u003e：按掩膜 bounding box 裁出局部区域推理，保留原图高频细节\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eresize（整图缩放）\u003c/strong\u003e：整图压到模型输入尺寸，速度快但\u003cstrong\u003e山体、织物等高频纹理被压糊\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e实测对比：crop 明显优于 resize（细节保留更完整）。\u003c/p\u003e\n\u003ch3 id=\"2-大图分块overlap--ramp-羽化拼接\"\u003e2. 大图分块：overlap + ramp 羽化拼接\u003c/h3\u003e\n\u003cp\u003e超长边图片分块推理后拼接（\u003ccode\u003eeraser/tiling.py\u003c/code\u003e）：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e块大小 \u003ccode\u003etile\u003c/code\u003e + 相邻块\u003cstrong\u003e重叠 \u003ccode\u003eoverlap\u003c/code\u003e 像素\u003c/strong\u003e（步长 = tile − overlap，末块贴边保证不越界不留缝）\u003c/li\u003e\n\u003cli\u003e重叠区用 \u003ccode\u003e_ramp\u003c/code\u003e 斜坡权重（线形过渡）混合，避免块间接缝——这是\u0026quot;大图擦除看不出分块痕迹\u0026quot;的关键\u003c/li\u003e\n\u003cli\u003e多块掩膜推理结果再经 \u003ccode\u003e_merge_boxes\u003c/code\u003e（按 IOU 合并）统一处理，避免同一物体被拆成多块重复擦\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"3-掩膜后处理膨胀--羽化\"\u003e3. 掩膜后处理：膨胀 + 羽化\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 掩膜膨胀 12px（覆盖边缘残留）+ 羽化 5px（柔和过渡）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epython erase.py -i photo.jpg -m mask.png -o out.png --model lama --dilate \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e --feather \u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e膨胀\u003c/strong\u003e：掩膜必须比实际物体略大，否则擦除边界留残影——\u003ccode\u003e--dilate 12\u003c/code\u003e 是安全值\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e羽化\u003c/strong\u003e：硬边界会产生可见接缝，羽化让过渡自然\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"4-三档切换的总成本--0\"\u003e4. 三档切换的总成本 ≈ 0\u003c/h3\u003e\n\u003cp\u003e同一掩膜、同一进程内切换模型：预览用 MI-GAN（0.8s 看构图），满意后 LaMa 出终稿（2.1s），简单水印自动降级 Telea——三档总体验 ≈ 2s。\u003c/p\u003e\n\u003ch2 id=\"实测数据\"\u003e实测数据\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 环境：Python 3.13 + onnxruntime，模型 models/ 下\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epython erase.py -i photo.jpg -m mask.png -o out.png --model lama --strategy crop    \u003cspan style=\"color:#75715e\"\u003e# 2.1s\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epython erase.py -i photo.jpg -m mask.png -o out.png --model migan --strategy resize \u003cspan style=\"color:#75715e\"\u003e# 0.8s\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epython erase.py -i photo.jpg -m mask.png -o out.png --model telea --dilate \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e --feather \u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# \u0026lt;50ms\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e指标\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eLaMa\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eMI-GAN\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eTelea\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e耗时（1024² 掩膜）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e2.1 s\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e0.8 s\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e0.05 s\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e纹理细节保留\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e最高\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e略糊\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e简单背景可用\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e大掩膜（\u0026gt;1/4 图）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e优\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e中\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e差\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"适用边界\"\u003e适用边界\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e适合\u003c/strong\u003e：通用物体擦除、水印/字幕、无 GPU 的本地工具链、批量处理\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e不适合\u003c/strong\u003e：超大半图掩膜（需语义补全时建议专用模型）；毫秒级批处理场景建议 GPU\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e取舍\u003c/strong\u003e：不追扩散模型——CPU 场景下 LaMa 的 2.1s 与扩散的 30s+，质量差距不足以弥补 15 倍等待\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"复现要点\"\u003e复现要点\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e模型来源：IOPaint 官方 ONNX 权重（LaMa big_lama_dyn、MI-GAN）\u003c/li\u003e\n\u003cli\u003e线程配置：onnxruntime 默认线程即可，12 核 CPU 下已满负荷；批量处理可开多进程并行\u003c/li\u003e\n\u003cli\u003e参考实现：项目 README 有 smoke/pipeline/benchmark 三组对比图可对照\u003c/li\u003e\n\u003c/ul\u003e\n",
  "summary": " 一句话结论：纯 CPU 能做生产级图片擦除。LaMa 2.1s/张质量最高做终稿、MI-GAN 0.8s 做快速预览、OpenCV Telea \u0026lt;50ms 处理纯色背景，三者在同一进程内按场景切换。两个关键工程结论：① 推理耗时几乎不随输入分辨率线性增长（2.1s/0.8s 恒定）；② 局部裁剪（crop）显著优于整图缩放（resize），能保留山体等高频细节。\n背景与动机 场景：去水印、去杂物、去文字，机器只有 CPU（Intel Mac x86_64，12 核 / 16GB），无 NVIDIA GPU 硬约束：PyTorch 官方从 2.3 起不再发布 macOS x86_64 wheel——GPU 路线与 PyTorch 路线都断，唯一可行是 ONNX Runtime（CPU 推理） 排除项：扩散模型（SD Inpainting / BrushNet / FLUX）在 CPU 上 30s~数分钟，Intel Mac 不可用，直接排除 三模型实测 模型 来源 大小 实测耗时 特点 适用 LaMa WACV 2022（IOPaint 默认） ~198 MB 2.1 s 大掩膜、纹理重建最强 通用擦除、建筑/自然纹理、终稿 MI-GAN ICCV 2023（Picsart） ~27 MB 0.8 s 快、轻，细纹理略糊 快速预览、移动端 Telea/NS OpenCV 内置 0 MB \u0026lt;50 ms 扩散插值、简单背景 纯色背景、水印 关键观察：耗时不随分辨率线性增长——LaMa 稳定 2.1s、MI-GAN 稳定 0.8s（在常规尺寸范围内）。因为模型内部对输入做了固定尺寸处理，分辨率变化主要影响预处理而非推理主体。这让\u0026quot;先小图预览、后大图出图\u0026quot;的工作流成本很低。\n"
}
