如何使用uint8类型numpy数组运行ONNXRuntime会话?
ONNXRuntime输入uint8数组报错的解决办法
你的报错原因很明确:你使用的ONNX模型输入节点定义的数据类型是tensor(float),但你传入了tensor(uint8)类型的numpy数组,类型不匹配导致ONNXRuntime拒绝执行。
解决办法分两种场景:
场景1:可以修改或重新导出模型
- 重新导出ONNX模型时,将输入节点的数据类型指定为
uint8,这样就能直接传入uint8数组 - 或者在模型的输入层后添加一个
Cast算子,自动将uint8类型转换为模型需要的float类型,这样外部输入依然可以用uint8
场景2:无法修改现有模型
在传入ONNXRuntime会话前,手动将uint8数组转换为float类型,同时根据模型的训练要求完成归一化处理:
import numpy as np import onnxruntime as ort # 加载目标模型 sess = ort.InferenceSession("your_model.onnx") # 模拟uint8格式的输入数据(比如图像像素) uint8_input = np.random.randint(0, 256, size=(1, 3, 224, 224), dtype=np.uint8) # 转换为模型要求的float32类型,同时做归一化(如果训练时是这么处理的) float_input = uint8_input.astype(np.float32) / 255.0 # 运行推理会话,替换成你模型的输入节点名称 outputs = sess.run(None, {"input_node_name": float_input})
注意:如果你的模型训练时输入没有做0-1归一化,直接转成float32即可,不需要除以255.0。
内容的提问来源于stack exchange,提问作者happychild
相关产品推荐
相关产品推荐

