【模型部署】人脸检测模型DBFace C++ ONNXRuntime推理部署(1)

news2024/9/28 9:22:42

系列文章目录

【模型部署】人脸检测模型DBFace C++ ONNXRuntime推理部署(0)
【模型部署】人脸检测模型DBFace C++ ONNXRuntime推理部署(1)
【模型部署】人脸检测模型DBFace C++ ONNXRuntime推理部署(2)


文章目录

  • 系列文章目录
  • 1 ONNX模型表示
  • 2 模型转换
  • 3 Python环境下的推理
  • 参考资料

上一篇博客中简单介绍了ONNXRuntime推理引擎和DBFace检测模型,这篇博客中将展示如何使用其Python API进行初步验证及推理部署。

1 ONNX模型表示

ONNX(Open Neural Network Exchage)是一个开源机器学习模型数据的存储标准,支持不同的人工智能框架,从而将其训练好的模型转为ONNX中间表示,便于ONNXRuntime进行推理部署。本系列博客均使用Pytorch所训练的模型。

在这里插入图片描述

2 模型转换

Pytorch支持ONNX模型转换,仅需调用torch.onnx.export()即可完成模型转换,并且支持模型中的绝大部分算子,从而能够避免很多自己手写算子的麻烦。具体的算子版本支持情况可以查阅官方文档。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

模型转换完成后,可以使用NETRON工具可视化ONNX模型的输入输出以及算子节点信息,观察模型算子及运算分支是否转换正确。NETRON的可视化节点可以点击查看算子详情,如下图所示。

在这里插入图片描述

3 Python环境下的推理

经过NETRON可视化验证后的模型不一定能得到预想的正确结果,所以我们需要在Python环境下进行推理,确保ONNX模型能得到与Pytorch模型一致的结果。这里需要用到ONNXRuntime的Python API读取并运行模型。
在这里插入图片描述
在这里插入图片描述
onnxruntime.InferenceSession用于获取一个 ONNX Runtime 推理器,其参数是用于推理的 ONNX 模型文件。InferenceSession的 run 方法用于模型推理,其第一个参数为输出张量名的列表,第二个参数为输入值的字典。

在这里插入图片描述
这一语句是比较Pytorch推理结果和ONNXRuntime推理结果的差异,如果该值大于1e-5则报错,说明模型转换失败,推理结果的精度存在偏差,当然你也可以自己设定np.allclose()的精确度参数。

可视化Python ONNXRuntime的推理结果如下,下一篇博客中将介绍如何使用ONNXRuntime的C++ API进行推理,从而大幅提高推理速度,基本达到实际应用需求。

在这里插入图片描述

参考资料

  1. ONNX官方算子支持查询文档
  2. Pytorch对ONNX的算子支持查询文档
  3. ONNX对python的api文档
  4. NETRON可视化工具

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

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

相关文章

深度学习训练营之灵笼人物识别

深度学习训练营之灵笼人物识别原文链接环境介绍前置工作设置GPU导入数据数据查看数据预处理加载数据可视化数据检查数据配置数据集prefetch()功能详细介绍:归一化查看归一化后的数据构建VGG-19网络VGG优点VGG缺点利用官方给到的网络网络结构编译模型训练结果可视化预…

第03讲:GitHub的使用

一、创建远程仓库 访问GitHub官方网站,并创建账号,然后按照以下图示创建项目 复制仓库地址 二、远程仓库的操作 命令作用git remote -v查看当前所有远程地址别名git remote add 别名 远程地址起别名git push 别名 分支推送本地分支上的内容到远程仓库…

vscode+opencv+mingw+cmake配置vscode下的opencv环境

目录介绍安装VsCode安装mingw安装cmake安装opencv,以及其扩展库 opencv_contrib安装python利用cmake生成opencv的Makefile文件cmake命令进行编译,安装配置opencv环境变量配置VSCODE测试DEMO介绍 参考链接:https://www.cnblogs.com/czlhxm/p/…

教育行业回访话术

近些年来,随着知识经济的快速发展,教育市场呈现良好的增长态势。越来越多的人开始通过参加各种培训来提升自己,教育行业竞争十分激烈。 前言 近些年来,随着知识经济的快速发展,教育市场呈现良好的增长态势。而且由于受…

人力资源软件对中小企业的七点重要性

对于中小企业(SMB)来说,员工就意味着一切。你的员工几乎掌握着企业的整体增长和发展,他们可以成就企业,但也能破坏企业的发展。为了提高员工效率,中小型企业需要出色的人力资源管理。员工只有在受到重视和培…

被新手忽视的 自谐振频率点

在MHz的DCDC和RF LNA电路中,被新手忽视的 自谐振频率点Self-Resonant Frequency 计算公式为 下图显示了 1μF,封装为 1206 的陶瓷电容器的阻抗(MLCC有经典的V型阻抗-频率曲线。随着频率升高,寄生电感的影响开始凸显,阻…

Faster RCNN网络源码解读(Ⅴ) --- GeneralizedRCNNTransform图像初始化代码解析

目录 一、代码作用(transform.py) ​编辑 二、代码解析 2.1 GeneralizedRCNNTransform类 2.1.1 初始化函数__init__ 2.1.2 normalize标准化处理 2.1.3 将图像以及bndbox进行缩放resize 2.1.4 batch_images 2.1.5 正向传播 forward 2.1.6 后…

分布式系统共识机制:一致性算法设计思想

分布式系统共识机制:一致性算法设计思想Paxos 算法节点角色算法流程Raft 算法节点角色核心机制leader选举日志复制PBFTHotstuff门限签名核心机制二阶段提交协议三阶段提交协议这次以一个宏观的角度去总结 自己学习过的一致性算法。一致性算法的目标就是让分布式系统…

Java开发 - 树(二叉树,二叉排序树,红黑树)

目录 前言 你好,认识一下,我是树 二叉树与二叉排序树 二叉排序树特点 为什么说二叉排序树查询效率要高于链表呢? 元素的类型 比较器 手写二叉排序树 定义一棵二叉树 增加元素 查询元素 修改元素 删除元素 遍历二叉树 重写toS…

JAVA注解处理API实战

简介 ​ 插件化注解处理(Pluggable Annotation Processing)API JSR 269提供一套标准API来处理Annotations( JSR 175),实际上JSR 269不仅仅用来处理Annotation,它建立了Java 语言本身的一个模型,它把method、package、constructor、type、variable、enum、annotatio…

工业远程I/O模块 CANopen 通讯

1.对象字典OD 对象字典是每个CANopen设备必须具有的功能,它包含了设备所有可以被访问的参数,客户端使用索引(Index)和子索引(Sub-index)来读写对象字典里的参数。 对象字典主要用来设定设备组态及进行非即时的通讯。每个对象采用16位索引的方式来寻址&…

01Editor最新破解

文章目录01Editor最新版注册算法逆向1.定位注册算法代码2.整体注册算法3.Check1算法分析4.Check2算法分析5.获得正确的任意用户名对应的序列号01Editor最新版注册算法逆向 1.定位注册算法代码 【版本】13.0.164bit\textcolor{green}{【版本】13.0.1\ 64bit}【版本】13.0.1 64b…

Redis集群系列七 —— 散列插槽分析

集群状态日志分析 Redis 分片集群引入了一个逻辑上的插槽或哈希槽概念,将集群划分为16384(0~16383)个槽位,集群中的每个节点占据一部分槽位数,在逻辑上将集群中的所有节点构成了一块完整的内存空间。 这个日志中可以通…

对象定义-解构-枚举属性遍历以及对象内函数

属性名表达式 定义对象的属性有两种方式 1、直接使用标识符作为属性名 obj.name 2、以表达式作为属性名 obj[ab] 10 let obj {} obj.name 孙悟空 // 孙悟空 obj[a b] 10 // 10 console.log(obj); // {name: 孙悟空, ab: 10}es5中字面量定义对象只能使用一种方法 var …

4.3.3、划分子网的 IPv4 地址

若有一个大型的局域网需要连接到因特网 若需要申请一个 C 类网络地址,其可分配的 IP 地址数量只有 254254254 个,不够使用 因此申请了一个 B 类网络地址,其可分配的 IP 地址数量达到了 655346553465534 个 给每台计算机和路由器的接口分配一…

实验九、消除互补输出级交越失真方法的研究

一、题目 互补输出级交越失真消除方法的研究。 二、仿真电路 基本互补电路和消除交越失真互补输出级如图1所示。晶体管采用 NPN 型晶体管 2N3904 和 PNP 型晶体管 2N3906。二极管采用 1N4009。 在实际的实验中,几乎不可能得到具有理想对称性的 NPN 型和 PNP 型管…

网络编程套接字----UDP协议

文章目录前言一、理解源IP地址和目的IP地址二、认识端口号理解"端口号"和"进程ID"理解源端口号和目的端口号三、认识TCP协议四、认识UDP协议五、网络字节序六、socket编程接口socket常见APIsockaddr结构sockaddr结构sockaddr_in 结构in_addr结构七、地址转…

第三方软件测试▏有效保障软件产品质量的关键性步骤

软件测试作为软件产品生命周期中不可或缺的重要步骤,被许多软件企业所重视。主要是通过对软件产品进行全面的测试,确保软件质量以及满足用户需求。但软件测试不仅仅是个简单的检测工作,而是一个系统性的、有组织性的测试过程,包含…

Linux:安装 telnet 命令

我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。如果小伙伴们觉得不错就一键三连吧~ 声明:原文地址:https://www.pudn.com/news/6332b44a272bb74d44053074.html 其他参考文章:https://www.cnblogs.com…

尚医通-上传医院接口-需求准备(十七)

目录: (1)数据接口-上传医院接口-需求准备 (1)数据接口-上传医院接口-需求准备 在医院接口设置的时候说过,我们做的是预约挂号平台,里面有数据的显示,挂号等等相关业务,…