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

Keras转ONNX接入OpenVINO推理报动态形状不支持错误如何解决

OpenVINO加载动态形状模型报错解决

报错核心原因

你使用的旧版IECore是OpenVINO 2022版本前的传统Inference Engine接口,该接口原生不支持带动态维度的输入。你导出的ResNet50 ONNX模型输入形状为(?,256,256,3),批次维度为动态值,直接调用load_network就会触发该运行错误。

解决方案

你可以根据自己的使用场景二选一:

  • 方案1:固定输入批次维度,兼容原有旧API逻辑
    如果你不需要动态调整推理批次大小,可以在加载网络后手动将动态维度reshape为固定值,不需要更换API,修改后的代码如下:
    model = keras.models.load_model('/resnet50.h5')
    onnx_model, _ = tf2onnx.convert.from_keras(model, opset=16)
    onnx.save(onnx_model, '/t1_model.onnx')
    
    ie = IECore()
    net = ie.read_network("/t1_model.onnx")
    input_name = list(net.input_info.keys())[0]
    output_name = list(net.outputs.keys())[0]
    
    # 核心修改:将动态批次维度替换为实际推理用的固定大小,示例为单批次推理
    net.reshape({input_name: (1, 256, 256, 3)})
    
    net.input_info[input_name].precision = 'FP32'
    net.outputs[output_name].precision = 'FP32'
    exec_net = ie.load_network(network=net, device_name='CPU')
    
    后续如果需要更换批次大小,重新调用reshape设置对应维度值、重新加载网络即可。
  • 方案2:切换官方推荐的新版OpenVINO API,原生支持动态形状
    报错提示的ov::Core::compile_model是OpenVINO 2022及之后版本的主流API,原生支持动态输入形状,不需要手动固定维度,同一模型可以直接适配不同批次的推理输入,适配代码如下:
    import numpy as np
    import onnx
    import tf2onnx
    from tensorflow import keras
    import openvino as ov
    
    # 模型转ONNX的逻辑无需修改
    model = keras.models.load_model('/resnet50.h5')
    onnx_model, _ = tf2onnx.convert.from_keras(model, opset=16)
    onnx.save(onnx_model, '/t1_model.onnx')
    
    # 核心:用新版ov.Core替换旧版IECore
    core = ov.Core()
    # 一步完成模型读取、优化、加载,自动适配动态输入
    compiled_model = core.compile_model(model="/t1_model.onnx", device_name="CPU")
    input_layer = compiled_model.input(0)
    output_layer = compiled_model.output(0)
    
    # 推理示例:支持任意合法批次大小输入,无需重复加载模型
    # 单批次推理
    input_1 = np.random.randn(1, 256, 256, 3).astype(np.float32)
    res_1 = compiled_model(input_1)[output_layer]
    # 4批次推理可直接传入对应形状数据
    input_4 = np.random.randn(4, 256, 256, 3).astype(np.float32)
    res_4 = compiled_model(input_4)[output_layer]
    
    注意:新版API会自动完成输入输出精度适配,不需要手动设置FP32精度,也不需要拆分read_network、load_network两步操作。

内容的提问来源于stack exchange,提问作者진유훈

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:15:43