OpenVINO批量图像推理报错及分类结果获取方法咨询
OpenVINO批量推理相关问题解答
你当前触发报错的核心原因是:BlobMap存储的键值对中,键应该填写模型输入层的名称(也就是你代码中提前获取的input_name变量),而你错误使用了图片路径作为键,OpenVINO找不到对应名称的输入层,因此抛出NOT_FOUND错误。
1. 多张图像批量推理的实现步骤
- 第一步:设置模型批量大小:读取网络后调用
network.setBatchSize(2),参数值和你要处理的批量图像数量保持一致即可。如果你的模型支持动态批量,也可以通过动态调整输入张量维度实现,静态批量设置对新手更友好。 - 第二步:创建对应维度的输入Blob:输入层维度为[N, C, H, W]格式时,N就是你设置的批量大小,你需要创建一个匹配该维度的输入Blob。
- 第三步:填充批量数据:把两张预处理后的图像数据,分别拷贝到输入Blob的第0、第1个batch对应的内存位置中。
- 第四步:绑定输入执行推理:调用
inferRequest.SetBlob(input_name, 你创建的批量输入Blob)绑定输入,后续正常执行推理即可,不需要往BlobMap里插入多个图片的Blob。
2. 分类任务的输出存储位置
是的,GetBlob()返回的输出变量中已经包含了所有你需要的分类结果数据。分类模型的输出一般是维度为[批量大小, 类别总数]的张量,每一行对应一个输入样本的所有类别的置信度数值,你可以直接从该Blob的内存缓冲区中读取原始数据。
3. ClassificationResult工具类的使用说明
不需要强制调用该类获取结果。ClassificationResult是OpenVINO封装的工具类,作用是简化分类结果的解析逻辑,你可以根据自己的需求选择是否使用:
- 如果你使用该类,需要注意参数配置:构造函数第三个参数是批量大小,第四个参数是取topK的结果,你示例代码中的
2和3就是表示解析2个样本、每个样本取top3的分类结果。 - 如果你不想用该类,也可以直接手动遍历输出Blob的内存缓冲区,找到每个样本对应置信度最高的下标(即为类别ID)和对应的置信度数值,完全可以实现相同的效果。
内容的提问来源于stack exchange,提问作者Albi
相关产品推荐
相关产品推荐

