简介:本文给出一套可复现的图像修复控制网络方案评测流程,涵盖测试环境、版本记录、功能与质量指标、显存与延迟测量及异常输入检查。读者可据此在自己的硬件上测出可比较的数据,再做选型判断。本文不预设性能结论,只提供方法与记录模板。
图像修复控制网络方案的表现受模型版本、采样参数、掩码质量和硬件影响很大。同一套权重换一组采样器,边缘效果可能明显不同。因此评测前要先固定口径,保证别人能复现你的数字。本文给出的是测量方法和记录模板,不包含未经验证的性能数字。
每次测试至少记录以下信息:
可用 pip show diffusers torch 与 nvidia-smi 导出这些信息,并保存到测试报告附录中。
下面的脚本使用 Hugging Face 的 diffusers 库,加载 ControlNet 的 inpaint 权重。运行前请在 Hub 页面核对仓库 ID 与许可证,仓库可能调整。
import numpy as npimport torchfrom PIL import Imagefrom diffusers import ControlNetModel, StableDiffusionControlNetInpaintPipelinedef make_inpaint_condition(image, mask):img = np.array(image.convert("RGB")).astype(np.float32) / 255.0m = np.array(mask.convert("L")).astype(np.float32) / 255.0img[m > 0.5] = -1.0 # 待修复像素置为 -1return torch.from_numpy(img.transpose(2, 0, 1)[None])controlnet = ControlNetModel.from_pretrained("lllyasviel/control_v11p_sd15_inpaint", torch_dtype=torch.float16)pipe = StableDiffusionControlNetInpaintPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5",controlnet=controlnet, torch_dtype=torch.float16).to("cuda")size = (512, 512)image = Image.open("input.png").convert("RGB").resize(size)mask = Image.open("mask.png").convert("L").resize(size) # 白色为待修复区域control = make_inpaint_condition(image, mask)gen = torch.Generator("cuda").manual_seed(42)out = pipe(prompt="修复提示词", image=image, mask_image=mask,control_image=control, num_inference_steps=30,guidance_scale=7.5, generator=gen).images[0]out.save("output.png")
代码要点如下。掩码中白色区域为待修复区域,原图与掩码的尺寸必须一致。控制图由 make_inpaint_condition 生成。固定 seed 后,同一输入可以复现同一输出。
| 维度 | 指标 | 测量方法 | 说明 |
|---|---|---|---|
| 修复区域质量 | LPIPS、人工评分 | 有参考图时计 |