OpenVINO推理时将图片转FP16出现字符串转浮点数错误如何解决
问题解答
报错根因
你当前的写法是直接将图片路径字符串传入np.array()尝试转浮点格式,并没有实际读取图片的像素数据,因此触发了字符串无法转换为浮点数的报错。你之前使用随机数时传入的是已经生成的数值数组,替换真实图片时需要先完成图片读取、预处理操作,再生成符合要求的数值数组。
正确处理步骤
- 先使用图片读取工具加载本地图片得到像素数组
- 按照模型输入要求完成尺寸调整、通道转换、维度重排、归一化等预处理操作
- 最后将预处理完成的数组转为FP16格式即可
适配OpenVINO 2021.4的示例代码
import cv2 import numpy as np from openvino.inference_engine import TensorDesc, Blob # 1. 读取本地图片 img = cv2.imread(r"C:\MyImagePath\XXX.png") # 2. 缩放至模型要求的输入尺寸 img = cv2.resize(img, (224, 224)) # 3. 通道转换:OpenCV默认读取为BGR格式,若模型训练用的是RGB格式需做转换,可按需调整 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 4. 维度重排:从HWC(高、宽、通道)格式转为模型要求的NCHW(批次、通道、高、宽)格式 img = img.transpose(2, 0, 1) img = np.expand_dims(img, axis=0) # 5. 预处理归一化,和模型训练时的预处理逻辑保持一致即可,可按需调整 img = img / 255.0 # 6. 转为FP16格式 processed_input = img.astype(np.float16) # 后续推理逻辑和之前一致 tensor_description = TensorDesc(precision="FP16", dims=(1, 3, 224, 224), layout='NCHW') input_blobs = Blob(tensor_description, processed_input)
注意事项
如果你的模型训练阶段有自定义预处理逻辑(比如减均值、乘缩放系数等),需要在转FP16之前补充对应操作,避免推理结果出现偏差。
内容的提问来源于stack exchange,提问作者TseHsien
相关产品推荐
相关产品推荐

