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域针对彩燥进行特殊处理的一系列算法。 关于噪声产生的原因在前面关于降噪的文章和视频中已经做…

C/S架构学习之基于TCP的本地通信(客户机)

基于TCP的本地通信(客户机):创建流程:一、创建字节流式套接字(socket函数): int sock_fd socket(AF_LOCAL,SOCK_STREAM,0);二、创建客户机和服务器的本地网络信息结构体并填充客户机和服务器本…

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就是我们平时听到的钩子&…

【ATTCK】MITRE和CISA共同推出OT攻击模拟平台

一、MITRE和CISA共同推出OT攻击模拟平台 MITRE公司和美国网络安全和基础设施安全局(CISA)近日发布Caldera for OT,该平台可模拟针对工业操作系统(OT)的攻击。CALDERA是一套开源自动化攻击模拟平台,应用于MI…

ubuntu下迁移home目录至新的分区教程详解

ubuntu下迁移home目录至新的分区教程详解 前言 首先声明一下,因为此教程涉及到用户重要资料数据,所以操作前: 数据无价,请一定要先备份!数据无价,请一定要先备份!数据无价,请一定…

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…

监控视频片段合并完整视频|FFmpeg将多个视频片段拼接完整视频|PHP自动批量拼接合并视频

关于环境配置ffmpeg安装使用的看之前文章 哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频 <?php date_default_timezone_set("PRC"); header("Content-type: text/html; charsetutf-8"); set_time_limit(0);// 遍历获取文件 functi…

微服务面试题

微服务面试题 文章目录 微服务面试题微服务微服务面试题 微服务 微服务是一种软件开发的方法&#xff0c;它将一个大型的应用程序分解为多个小型的、独立的服务&#xff0c;每个服务都有自己的功能、技术栈和数据库。微服务之间通过网络协议&#xff08;如 HTTP、消息队列等&a…

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

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

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

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