Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenVino转换模型不返回与原始模型相同的分数值(Sigmoid)

OpenVino转换模型不返回与原始模型相同的分数值(Sigmoid)
EN

Stack Overflow用户
提问于 2021-12-31 20:12:57
回答 1查看 374关注 0票数 6

我已经将Keras模型转换为与OpenVino一起使用。最初的Keras模型使用sigmoid返回从0到1的分数,用于二进制分类。将模型转换为与OpenVino一起使用后,两个类的分数都接近0.99,但其中一个类的分数似乎略低。

例如,test1.jpg和test2.jpg (来自相反的类)的分数分别为0.00320357和0.9999。

使用OpenVino,相同的图像分别得到0.9998982和0.9962392的分数。

编辑*一种怀疑是输入数组仍然被OpenVino模型所接受,但在某种程度上被改变了形状或“置乱”,因此永远不匹配第一类?换句话说,如果你给它随机的噪音,分数也将永远是0.9999。也许我必须让OpenVino模型接受原始形状(1,180,180,3),而不是(1,3,180,180),这样我就不必强制输入到与原始模型所接受的形状不同的形状了?但这很奇怪,因为我在为openvino创建xml和bin时指定了形状:

代码语言:javascript
运行
AI代码解释
复制
python3 /opt/intel/openvino_2021/deployment_tools/model_optimizer/mo_tf.py --saved_model_dir /Users/.../Desktop/.../model13 --output_dir /Users/.../Desktop/... --input_shape=\[1,180,180,3]

但是,我从错误消息中得知,推理机由于一些未知的原因而期望(1,3,180,180)。这就是问题所在吗?另一种怀疑是原始模型被冻结的方式有问题。我正在探索冻结原始模型( case模型转换为pb)的不同方法,以防问题与此相关。

我检查了一下,以确保Sigmoid激活函数正在OpenVino实现中使用(与Keras模型相同的激活),它看起来是这样的。那么,为什么这些值不一样呢?任何帮助都将不胜感激。

OpenVino推断的代码是:

代码语言:javascript
运行
AI代码解释
复制
import openvino
from openvino.inference_engine import IECore, IENetwork 
from skimage import io
import sys
import numpy as np
import os

def loadNetwork(model_xml, model_bin):

    ie = IECore() 

    network =  ie.read_network(model=model_xml, weights=model_bin)

    input_placeholder_key = list(network.input_info)[0]
    input_placeholder = network.input_info[input_placeholder_key]

    output_placeholder_key = list(network.outputs)[0]
    output_placeholder = network.outputs[output_placeholder_key]

    return network, input_placeholder_key, output_placeholder_key

batch_size = 1
channels = 3
IMG_HEIGHT = 180
IMG_WIDTH = 180

#loadNetwork('saved_model.xml','saved_model.bin')

image_path = 'test.jpg'

def load_source(path_to_image):
    image = io.imread(path_to_image)
    img = np.resize(image,(180,180))
    return img

img_new = load_source('test2.jpg')

#Batch?

def classify(image):
    device = 'CPU'
    network, input_placeholder_key, output_placeholder_key = loadNetwork('saved_model.xml','saved_model.bin')
    ie = IECore() 
    exec_net = ie.load_network(network=network, device_name=device)
    res = exec_net.infer(inputs={input_placeholder_key: image})
    print(res)
    res = res[output_placeholder_key]
    return res

result = classify(img_new)
print(result)
result = result[0]
top_result = np.argmax(result)
print(top_result)
print(result[top_result])

其结果是:

代码语言:javascript
运行
AI代码解释
复制
{'StatefulPartitionedCall/model/dense/Sigmoid': array([[0.9962392]], dtype=float32)}
[[0.9962392]]
0
0.9962392
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-04 21:40:16

一般来说,Tensorflow是唯一具有NHWC形状的网络,而其他大多数使用NCHW。因此,OpenVINO推理机能够满足大多数网络的需要,并使用NCHW布局。为了与推理机一起工作,必须将模型转换为NCHW布局。

将本机模型格式转换为IR涉及到模型优化器执行必要的转换以将形状转换为推理机(N、C、H、W)所要求的布局的过程。使用

此外,大多数TensorFlow模型都是按照RGB顺序对图像进行训练的。在这种情况下,使用推理机样本的推理结果可能是不正确的。默认情况下,推理机样本和演示程序期望输入具有BGR通道顺序。如果您培训您的模型使用RGB订单,则需要手动重新安排示例或演示应用程序中的默认通道顺序,或者使用使用通道参数的模型优化工具重新转换您的模型。

我建议您通过使用Hello分类Python示例推断您的模型来验证这一点,因为这是用于测试模型功能的正式示例之一。

您可以参考这个"用于深层神经网络的Intel数学内核库“来更深入地解释输入形状。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70546922

复制
相关文章
OpenVINO运行Tensorflow模型
请先阅读我的上一篇文章《Visual Studio 2017 配置OpenVINO开发环境》,在VS2017中配置好OpenVINO环境。
superhua
2019/11/20
2.6K1
C++实现yolov5的OpenVINO部署
本文编辑的时间是2020年12月3日,官方最新的releases是v3.1,在v3.0的版本中,官网有如下的声明
BBuf
2020/12/22
2.8K0
C++实现yolov5的OpenVINO部署
C++实现yolov5的OpenVINO部署
本文编辑的时间是2020年12月3日,官方最新的releases是v3.1,在v3.0的版本中,官网有如下的声明
计算机视觉
2021/01/12
2.1K0
C++实现yolov5的OpenVINO部署
OpenVINO中的图象修复模型与示例演示
在OpenVINO的公开模型库中有一个图象修复的模型的,它支持使用mask作为参考,实现对输入的修复。模型来自:
OpenCV学堂
2021/12/29
7470
OpenVINO中的图象修复模型与示例演示
最新发布 | OpenVINO扩展模块支持原生Pytorch模型转换与ARM CPU加速
OpenVINO刚刚不久之前发布了新版本OpenVINO2021.3版本,其中最引入关注的是有了OpenVINO扩展模块,github的地址如下:
OpenCV学堂
2021/04/21
1.8K0
最新发布 | OpenVINO扩展模块支持原生Pytorch模型转换与ARM CPU加速
颜色模型与转换
本小节中将介绍几种OpenCV 4中能够互相转换的常见的颜色模型,例如RGB模型、HSV模型、Lab模型、YUV模型以及GRAY模型,并介绍这几种模型之间的数学转换关系,以及OpenCV 4中提供的这几种模型之间的变换函数。
小白学视觉
2019/11/18
1.9K0
详解OpenVINO 模型库中的人脸检测模型
OpenVINO的模型库中有多个人脸检测模型,这些模型分别支持不同场景与不同分辨率的人脸检测,同时检测精度与速度也不同。下面以OpenVINO2020 R04版本为例来逐一解释模型库中的人脸检测,列表如下:
OpenCV学堂
2020/10/27
1.3K0
详解OpenVINO 模型库中的人脸检测模型
OpenVINO部署加速Keras训练生成的模型
大家好,今天给大家分享一下如何把Keras框架训练生成模型部署到OpenVINO平台上实现推理加速。要把Keras框架训练生成的h5模型部署到OpenVINO上,有两条技术路线:
OpenCV学堂
2021/04/21
3.3K1
OpenVINO部署加速Keras训练生成的模型
使用OpenVINO加速Pytorch表情识别模型
OpenVINO自带的表情识别模型是Caffe版本的,这里使用的模型是前面一篇文章中训练生成的pytorch全卷积网络,模型基于残差网络结构全卷积分类网络。
OpenCV学堂
2020/07/13
1.7K0
YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
YOLOv5在OpenVINO上的部署,网上有很多python版本的代码,但是基本都有个很内伤的问题,就是还在用pytorch的一些库做解析,C++的代码有个更大的内伤就是自定义解析解释的不是很清楚,所以本人阅读YOLOv5的pytorch代码推理部分,从原始的三个输出层解析实现了boxes, classes, nms等关键C++代码输出,实现了纯OpenVINO+OpenCV版本的YOLOv5s模型推理的代码演示。下面就是详细的系统环境与各个部分解释,以及代码实现与演示图像。
CV君
2021/01/25
9510
YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
YOLOv5在OpenVINO上的部署,网上有很多python版本的代码,但是基本都有个很内伤的问题,就是还在用pytorch的一些库做解析,C++的代码有个更大的内伤就是自定义解析解释的不是很清楚,所以本人阅读YOLOv5的pytorch代码推理部分,从原始的三个输出层解析实现了boxes, classes, nms等关键C++代码输出,实现了纯OpenVINO+OpenCV版本的YOLOv5s模型推理的代码演示。下面就是详细的系统环境与各个部分解释,以及代码实现与演示图像。
OpenCV学堂
2021/01/18
2.3K0
设计模式~原始模型模式
通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是原始模型模式的用意。
Vincent-yuan
2020/08/13
4020
设计模式~原始模型模式
【数值模型系列】WPS概述
主要的程序为geogrid.exe、ungrib.exe、metgrid.exe,输入到这些程序的配置在“namelist.wps”中,每个主要程序都有一个独立的配置模块(分别命名为“&geogrid”、“&ungrib”、“&metgrid”,这些模块以“/”分隔),并且三个程序配置模块共有一个共享模块(名为“&share”)供每个程序读取。
自学气象人
2023/06/20
3770
【数值模型系列】WPS概述
如何基于OpenVINO加速飞桨模型推理?
OpenVINO是英特尔基于自身现有的硬件平台开发的一种工具套件,主要用于快速开发高性能计算机视觉及深度学习视觉的应用程序和解决方案,从而实现人类视觉模拟、自动语音识别、自然语言处理和推荐系统任务。该工具套件基于最新一代的人工神经网络,包括卷积神经网络、递归网络和基于注意力的网络,可扩展跨英特尔硬件的计算机视觉和非视觉工作负载,从而最大限度地提高性能。基于OpenVINO,可提升应用程序在CPU计算设备上的推理速度。
用户1386409
2021/11/17
1.1K0
如何基于OpenVINO加速飞桨模型推理?
OpenVINO + UNet模型部署,实现道路裂纹检测
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 UNet模型 这个模型来自我之前的文章,基于CrackForest数据集训练生成的模型,如何训练道理裂纹数据集,生成UNet模型并导出为ONNX看这里,这个系列文章就可以知道: 轻松学Pytorch – 构建UNet实现道路裂纹检测 https://mp.weixin.qq.com/s/xeUdW2l71RsHe1Zdzr5a7Q 然后我把模型转换ONNX格式了,然后我用OpenVINO+ONNX做个部署演示。之前
OpenCV学堂
2022/05/05
2.4K1
OpenVINO + UNet模型部署,实现道路裂纹检测
设计模式~原始模型模式(二)
为做到深复制,所有需要复制的对象需要实现 java.io.Serializable接口。
Vincent-yuan
2020/08/17
3510
设计模式~原始模型模式(二)
重磅!英特尔开源了OpenVINO模型训练框架
OpenVINO提供了大量的预训练模型,对车牌、车辆检测SSD模型,车辆属性识别、车牌识别模型、人脸检测、表情识别等模型,都提供模型重新训练与部署的扩展通道,通过tensorflow object detection框架集成与pytorch框架集成, 支持如下的模型重新训练,
OpenCV学堂
2019/06/21
3.4K1
重磅!英特尔开源了OpenVINO模型训练框架
深度学习算法优化系列十四 | OpenVINO Int8量化文档翻译(Calibaration Tool)
在2020年以前,OpenVINO(这里以OpenVINO2019年最新的一个版本为例)的Int8量化工具实现在openvino_2019.3.379\deployment_tools\tools\calibration_tool,因为文档比较难读,所以做个翻译记录在这里,便于使用OpenVINO的量化工具上手。要做Int8量化首先需要将你需要部署的模型Caffe/Pytorch/Tensorflow转化为OpenVINO的IR中间模型。此文档的原因为文档为openvino_2019.3.379\deployment_tools\tools\calibration_tool\README.md。
BBuf
2020/02/27
1.3K0
python 类型转换与数值操作
7.repr(x )                将对象 x 转换为表达式字符串
用户7886150
2021/01/22
1.1K0
MxNet预训练模型到Pytorch模型的转换
预训练模型在不同深度学习框架中的转换是一种常见的任务。今天刚好DPN预训练模型转换问题,顺手将这个过程记录一下。
sparkexpert
2019/05/26
2.3K0

相似问题

OpenVINO不能转换Mixer模型

141

转换TensorFlow模型时出现OpenVino模型优化器错误

138

使用OpenVino预训练模型与AWS

13

Tensorflow剪枝模型与原始基线模型大小相同

12

对openvino模型的推断只返回分数

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档