使用OpenVINO部署Stable Diffusion传入初始图时遇精度不匹配错误
解决Stable Diffusion OpenVINO传入初始图像时的精度不匹配错误
问题分析
你遇到的RuntimeError: [ PARAMETER_MISMATCH ] Failed to set input blob with precision: I64, if CNNNetwork input blob precision is: FP64错误,核心是传入UNet模型的某个标量参数类型为64位整数(I64),但模型要求该输入为64位浮点数(FP64)。无初始图像时运行正常,说明带初始图像的推理分支中,某个参数的类型处理逻辑存在遗漏。
解决步骤
定位问题参数
打开stable_diffusion_engine.py,找到第188行附近调用self.unet.infer_new_request的代码,检查传入的参数字典,重点关注和初始图像相关的标量参数(比如timestep或类似控制变量),确认其数据类型是否为int64。强制转换参数精度
将该参数转换为float64类型后再传入模型。例如:# 假设问题参数是timestep,原代码可能直接传入整数 timestep = np.array(timestep, dtype=np.float64) # 然后将转换后的参数传入推理请求 noise_pred = result(self.unet.infer_new_request({ "sample": latents, "timestep": timestep, # 其他参数... }))验证模型输入要求
用OpenVINO命令行工具查看UNet模型的输入信息,确认所有输入的精度要求:mo --input_model path/to/your/unet/model.xml --print_all_inputs_and_outputs输出会明确每个输入的精度,确保所有传入参数的类型与之匹配。
检查初始图像预处理
确认初始图像的预处理流程(尺寸缩放、归一化、通道转换等)完全符合模型要求,错误的预处理可能间接导致后续参数类型不匹配。
补充说明
这个问题并非模型与输入图像不兼容,而是代码分支中类型转换的遗漏——无初始图像时,相关参数的类型可能已经被正确转换为FP64,但带初始图像的分支未做同样处理。
内容的提问来源于stack exchange,提问作者Igor Deruga
相关产品推荐
相关产品推荐

