You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用StableDiffusionInpaintPipeline遇输入格式错误问题求助

问题排查与解决方案

针对你使用StableDiffusionInpaintPipeline时遇到的格式错误,即使传入的是PIL.Image.Image仍报错,可按以下步骤逐一排查:

1. 确认输入的实际类型

你目前只打印了图像的尺寸和模式,未明确输出类型。在调用pipeline前添加类型打印代码,确认是否真的是PIL.Image.Image:

print(f"Image type: {type(image_pil)}, Mask type: {type(mask_pil)}")

如果输出不是<class 'PIL.Image.Image'>,说明图像/掩码转换过程中出现了隐式类型变更,需检查Image.fromarray的转换逻辑。

2. 检查尺寸合规性

大部分Stable Diffusion修复模型要求输入尺寸为8的倍数(如512×512、768×768),且掩码尺寸必须与原图完全一致。添加断言检查:

# 检查图像尺寸是否为8的倍数
assert image_pil.size[0] % 8 == 0 and image_pil.size[1] % 8 == 0, "图像宽高必须是8的倍数"
# 检查掩码与图像尺寸匹配
assert mask_pil.size == image_pil.size, "掩码尺寸必须与原图完全一致"

3. 验证掩码的二值属性

修复任务要求掩码必须是纯二值图像(仅包含0和255两个值,0为保留区域,255为修复区域)。添加代码验证:

mask_np = np.array(mask_pil)
print(f"掩码唯一值: {np.unique(mask_np)}")
assert set(np.unique(mask_np)).issubset({0,255}), "掩码必须是纯二值图像(仅0和255)"

如果掩码存在其他数值,需检查cv2.resize或赋值逻辑是否引入了中间值。

4. 确认Pipeline实例正确性

确保你初始化的是专门的修复Pipeline,而非普通生成Pipeline:

from diffusers import StableDiffusionInpaintPipeline

# 正确初始化修复Pipeline示例
pipeline = StableDiffusionInpaintPipeline.from_pretrained(
    "runwayml/stable-diffusion-inpainting",
    torch_dtype=torch.float16
).to("cuda")

若误用普通的StableDiffusionPipeline,即使传入掩码也会触发格式错误。

5. 修复变量作用域隐患

你的代码中img = img.convert("RGB")位于if base64_img is not None代码块外,若base64_img为None会直接导致变量未定义错误。调整代码逻辑:

if base64_img is not None:
    img_data = base64.b64decode(base64_img)
    img = Image.open(io.BytesIO(img_data))
    print("Recieved image of size: ", img.size)
    img = img.convert("RGB")  # 将转换逻辑移入if块内
else:
    raise ValueError("base64_img 不能为空")

内容的提问来源于stack exchange,提问作者Ammar Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:22:39