keras转onnx,TensorFlow转tf.keras.models.load_model,onnx精度转换

参考:

https://blog.csdn.net/Deaohst/article/details/126864267

转onnx

别直接转onnx。

先转PB:

import tensorflow as tfmodel_path = './models/model.h5'                    # 模型文件
model = tf.keras.models.load_model(model_path)
model.save('tfmodel', save_format='tf')

再转onnx:

 python -m tf2onnx.convert --saved-model ./tfmodel/ --output ./models/model.onnx --opset 12 --verbose

转化成功:
在这里插入图片描述

将原结果和onnx推理结果比对:
原结果:
{‘drawings’: 0.00619311910122633, ‘hentai’: 0.00011550176714081317, ‘neutral’: 0.992009162902832, ‘porn’: 0.0008918801322579384, ‘sexy’: 0.0007902580546215177}}
onnx推理代码和推理结果:

import cv2
import numpy as np
import onnxruntimeIMAGE_DIM = 299  # required/default image dimensionalitydef load_single_image(image_path, image_size, verbose=True):try:if verbose:print(image_path, "size:", image_size)# Load image using OpenCVimage = cv2.imread(image_path)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # Convert to RGBimage = cv2.resize(image, (image_size, image_size))# Preprocess the imageimage = image.astype(np.float32) / 255.0return np.expand_dims(image, axis=0), image_pathexcept Exception as ex:print("Image Load Failure: ", image_path, ex)return None, None# Load ONNX model
onnx_model_path = './models/model.onnx'
ort_session = onnxruntime.InferenceSession(onnx_model_path)# Example usage:
image_path_to_load = "images/20230903000800.jpg"
loaded_image, loaded_image_path = load_single_image(image_path_to_load, IMAGE_DIM)if loaded_image is not None:# Perform inferenceinput_name = ort_session.get_inputs()[0].nameoutput_name = ort_session.get_outputs()[0].nameinput_data = loaded_image# Run the ONNX modelresult = ort_session.run([output_name], {input_name: input_data})print(result[0].tolist())

images/20230903000800.jpg size: 299
[[0.004163397941738367, 0.00018479839491192251, 0.9918997287750244, 0.0020591376814991236, 0.0016930525889620185]]

结果不是很吻合,但也大差不差了。

转fp16 onnx

安装:

pip install onnxmltools

执行脚本:

import onnxmltools
# 加载float16_converter转换器
from onnxmltools.utils.float16_converter import convert_float_to_float16
# 使用onnxmltools.load_model()函数来加载现有的onnx模型
# 但是请确保这个模型是一个fp32的原始模型
onnx_model = onnxmltools.load_model('./models/model.onnx')
# 使用convert_float_to_float16()函数将fp32模型转换成半精度fp16
onnx_model_fp16 = convert_float_to_float16(onnx_model)
# 使用onnx.utils.save_model()函数来保存,
onnxmltools.utils.save_model(onnx_model_fp16, './models/model_fp16.onnx')

推理结果:

images/20230903000800.jpg size: 299
[[0.004119873046875, 0.00018489360809326172, 0.99169921875, 0.002071380615234375, 0.001697540283203125]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入了解springmvc响应数据

目录 一、前后端分离开发与混合开发 1.1 混合开发模式 1.2 前后端分离模式【重点】 二、页面跳转控制 2.1 通过JSP实现页面跳转 2.2 转发与重定向 三、返回JSON数据 3.1 导包与配置 3.2 使用ResponseBody 四、返回静态资源 4.1 为什么无法直接查询静态资源 4.2 配置…

应用在便携式多媒体播放器中的音频Codec芯片

便携式多媒体播放器(PMP,Portable Media Player),也就是通常人们所说的MP4。PMP的主要优点是:携带方便,能够直接播放高品质音/视频文件;也可以浏览图片,以及作为移动硬盘使用;此外,P…

使用matlab实现图像信号的色彩空间转换

利用matlab对图像信号进行读取,并对RGB空间进行转换,如转换到HSI空间等。 下面的这个代码是在使用了rgb2hsi()方法失败后,进行修改的。 rgb2hsi(img)这个方法可以将RGB图像转换为HIS图像;但是爆出了 Untitled5(line 5)hsi rgb2h…

Facebook广告被暂停是什么原因?Facebook广告账号被封怎么办?

许多做海外广告投放的小伙伴经常遇到一个难题,那就是投放的Facebook广告被拒或 Facebook 广告帐户被关闭赞停的经历,随之而来的更可能是广告账户被封,导致资金的损失。本文将从我自身经验,为大家分享,Facebook广告被暂…

哈希竞猜游戏开发源码部署方案

随着互联网技术的发展,越来越多的人开始关注网络安全问题,而哈希算法作为一种重要的加密技术,在网络安全领域得到了广泛应用。其中,哈希竞猜游戏作为一种新型的网络安全挑战赛,也受到了越来越多人的关注。本文将介绍哈…

ISP算法——UVNR

ISP算法——UVNR 概念简介 UVNR也就是经过CSC只有在YUV域对UV两个色域进行降噪,在有些方案里也叫CNR(chroma noise reduction)。主要就是在YUV域针对彩燥进行特殊处理的一系列算法。 关于噪声产生的原因在前面关于降噪的文章和视频中已经做…

Rust写的爬虫代码抓取精美的图片

Rust是一种系统级编程语言,它的设计目标是安全、并发和高效。Rust的爬虫库非常丰富,例如scraper、select、reqwest等等。这些库提供了许多功能,例如HTML解析、HTTP请求、异步处理等等,使得Rust成为一个非常适合编写爬虫的语言。 以…

Outlook如何删除邮箱账户

Outlook如何删除邮箱账户 说明: 最近有用户询问到“我的Outlook登陆了很多个邮箱账号,不知道怎么退出”接下来将具体操作步骤加以说明 操作指引: 1、首先打开Outlook该软件,然后点击“文件” 2、点击账户设置下拉菜单 3、在下拉…

windows HOOK学习(一)

了解HOOK 一:HOOK是什么?二:HOOK的分类三:HOOK的原理?四:为什么全局钩子HOOK必须写到DLL中?五:HOOK的类型 一:HOOK是什么? hook就是我们平时听到的钩子&…

PCA(主成分分析)数据降维技术代码详解

引言 随着大数据时代的到来,我们经常会面临处理高维数据的问题。高维数据不仅增加了计算复杂度,还可能引发“维度灾难”。为了解决这一问题,我们需要对数据进行降维处理,即在不损失太多信息的前提下,将数据从高维空间…

NFTScan | 11.06~11.12 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.11.06~ 2023.11.12 NFT Hot News 01/ 《辛普森一家》提及 NFT 及区块链,相关 NFT 地板价涨至 0.35 ETH 11 月 6 日,据 Coindesk 报道,美国时间周…

thinkphp8 数据库的连接

账号:root 密码:自己设置 http://localhost:888/index.php当出现这个并且能登陆就算成功了。 回到项目config/database.php .env 里面(如果已经.example.env 改成了.env,则改下边,db_name改成你的数据库表名) 多个…

HTTP服务器——tomcat的安装和使用

文章目录 前言下载tomcattomcat 文件bin 文件夹conf 文件lib 文件log 文件temp 文件webapps 文件work 目录 如何使用 tomcat 前言 前面我们已经学习了应用层协议 HTTP 协议和 HTTP 的改进版——HTTPS,这些协议是我们在写与服务器相关的代码的时候息息相关的&#x…

STM32两轮平衡小车原理详解(开源)

一、引言 关于STM32两轮平衡车的设计,我想在读者阅读本文之前应该已经有所了解,所以本文的重点是代码的分享和分析。至于具体的原理,我觉得读者不必阅读长篇大论的文章,只需按照本文分享的代码自己亲手制作一辆平衡车&#xff0c…

响应式摄影科技传媒网站模板源码带后台

模板信息: 模板编号:540 模板编码:UTF8 模板颜色:黑白 模板分类:摄像、婚庆、家政、保洁 适合行业: 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手…

[WSL] 安装hive3.1.2成功后, 使用datagrip连接失败

org.apache.hadoop.ipc.RemoteException:User: xxx is not allowed to impersonate anonymous 下载driver-hive-jdbc-3.1.2-standalone 解决 修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项 <property><name>hadoop.proxyuser.你的用户名.hosts…

跨越编程界限:C++到JavaSE的平滑过渡

JDK安装 安装JDK 配置环境变量&#xff1a; Path 内添加 C:\Program Files\Java\jdk1.8.0_201\bin 添加 JAVA_HOME C:\Program Files\Java\jdk1.8.0_201 添加 CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 第一个Java程序 HelloWorld.java public class…

Linux之gdb

gdb就是一个Linux的调试工具&#xff0c;类似与vs里面的调试 可执行程序也有格式&#xff0c;不是简单的二进制堆砌

Excel函数-将A1中的字符串剔除B1中的字符串

比如A2中是类型单位&#xff0c;B2中是单位&#xff0c;在C2中体现A2-B2的结果&#xff0c;即大米 公式&#xff1a;SUBSTITUTE(A2,B2,“”) SUBSTITUTE函数功能&#xff1a;将字符串中的部分字符用新字符替换&#xff0c;替换序号忽略说明进行全部替换 结构&#xff1a;SUB…

SSM德庆县乡村教育图书管理系统-计算机毕设 附源码 24668

SSM德庆县乡村教育图书管理系统 摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在德庆县乡村教育图书管理的要求下&…