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]]
相关文章:

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.sa…...

高可用架构设计
1. 引言 软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,本篇讨论高可用 高可用技术的重要性在于保证系统的连续可用性,提高系统的稳定性和可靠性。它可以应对高并发和大规…...

qemu 之 uboot、linux 启动
目录 编译uboot、kernel 编译启动从 uboot 中引导启动 linux注参考 本文主要说明 arm64 在 qemu 上的相关启动。 编译 使用的是 qemu-8.1.1 版本,编译命令如下: ../configure --cc/usr/local/bin/gcc --prefix/home/XXX/qemu_out --enable-virtfs --enable-slir…...

C语言--每日五道选择题--Day8
第一题 1、下列程序的输出是( ) #include<stdio.h> int main() {int a[12] {1,2,3,4,5,6,7,8,9,10,11,12};int *p[4];int i;for(i0;i<4;i){p[i]&a[i*3];}printf("%d\n",p[3][2]);return 0; } A: 上述程序有错误 B: 6…...

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

ultrascale+mpsoc系列的ZYNQ中DDR4参数设置说明
ultrascalempsoc系列的ZYNQ中DDR4参数设置说明 标题1 概述标题2 讲述平台标题3 ZYNQ的DDR设置界面参数标题4 DDR参数界面说明如下 标题1 概述 本文用于讲诉ultrascalempsoc系列中的ZYNQ的DDR4的参数设置与实际硬件中的DDR选型之间的关系,为FPGA设计人员探明道路。 …...
maven-六类属性
Maven的六类属性_maven内置属性-CSDN博客 系统变量指的是java系统的变量,环境变量指的系统变量和用户变量 java系统仅针对java程序,环境变量是全局的。两者都可以传进java进程。 参考 01.java环境变量(env)和系统属性…...

微服务概念
微服务 微服务是什么 In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource A…...

响应式摄影科技传媒网站模板源码带后台
模板信息: 模板编号:540 模板编码:UTF8 模板颜色:黑白 模板分类:摄像、婚庆、家政、保洁 适合行业: 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手…...

探索C#事件(Event)的强大应用
摘要 在现代软件开发中,对象之间的通信和交互是一个常见而重要的问题。为了解决这个问题,C#作为一种面向对象的编程语言提供了一种强大的特性:事件(Event)。事件可以帮助开发人员实现对象间的松耦合,提高代…...

学习c#的第四天
目录 C# 变量 C# 中的变量定义与初始化 接受来自用户的值 C# 中的 Lvalues 和 Rvalues 不同类型变量进行运算 静态变量 局部变量 C# 常量 整数常量 浮点常量 字符常量 字符串常量 定义常量 扩展知识 Convert.ToDouble 与 Double.Parse 的区别 静态常量和动态常…...

解析JSON字符串:属性值为null的时候不被序列化
如果希望属性值为null及不序列化,只序列化不为null的值。 1、测试代码 配置代码: mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 或者通过注解JsonInclude(JsonInclude.Include.NON_NULL) //常见问题2:属性为null&a…...
短视频短剧小程序系统:用技术丰富你的碎片时间
在当今快节奏的生活中,人们的休闲时间变得越来越碎片化。短视频短剧小程序系统正是利用这一现象,通过技术手段为人们提供了丰富多样的娱乐内容,让碎片时间变得更加充实。 一、短视频短剧小程序系统的技术特点 高效加载与流畅播放࿱…...

服务器数据恢复—磁盘出现坏道掉线导致raid5阵列崩溃的数据恢复案例
服务器数据恢复环境: 某品牌服务器中有一组16块SAS接口硬盘组建的raid5磁盘阵列。 服务器故障&检测: 服务器raid5阵列中有2块硬盘掉线,上层服务器应用崩溃,导致服务器数据丢失。丢失的数据主要是4个1.5TB大小的卷中的数据&am…...

Android R.fraction
来源 我是在看Android10原生代码,绘制状态栏蓝牙电量相关类中第一次看到R.fraction的,如类BatteryMeterDrawable <fraction name"battery_button_height_fraction">10%</fraction> mButtonHeightFraction context.getResources(…...

C语言精华题目锦集1
第一题 test.c文件中包括如下语句,文件中定义的四个变量中,是指针类型的是()【多选】 #define INT_PTR int* typedef int* intptr; INT_PRT a,b; int_ptr c,d;A:a B:b C:c D:d #define是宏定义,此时在程序中IN…...

头歌答案Python——JSON基础
目录 编辑 Python——JSON基础 第1关:JSON篇:JSON基础知识 任务描述 第2关:JSON篇:使用json库 任务描述 Python——XPath基础 第1关:XPath 路径表达式 任务描述 第2关:XPath 轴定位 任务描述…...

TDengine 与煤科院五大系统实现兼容性互认,助力煤矿智能化安全体系搭建
近日,涛思数据与煤炭科学技术研究院(以下简称煤科院)已完成数个产品兼容互认证工作,经双方共同严格测试,涛思数据旗下物联网、工业大数据平台 TDengine V3.X 与煤炭科学技术研究院旗下煤矿复合灾害监测监控预警系统、煤…...

231030期就业班开班咯!我在前方护航,让你稳稳入职
就业哪家强?还得看优橙! 11月9日,231030期就业班的小伙伴结束了为期8天的基础班学习,正式进入了就业班。优橙教育也为新一批就业班的同学举办了开班典礼。 典礼环节中不仅有多彩的抽奖活动,也有丰富的超值礼品,旨在鼓…...
小白学安全-漏洞编号的理解 CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD
1、以CVE开头,如CVE-1999-1046这样的 CVE的英文全称是“Common Vulnerabilities&Exposures”公共漏洞和暴露。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字,能够帮助用…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...