YOLOv5 tensorRT C++代码详解之engine的读取

2023-11-13

在tensorRT中,engine模型是对yolov5序列化后的结果。在推理的时候需要进行反序列化才能进行推理。那么第一步就是读取engine文件。

ifstream介绍

engine文件的读取需要用到ifstream,需要导入头文件#include <iostream>,#include <fstream>.主要提供了三个类:

ifstream – 从已有的文件读入
ofstream – 向文件写内容
fstream - 打开文件供读写

文件打开模式:
ios::in 只读
ios::out 只写
ios::app 从文件末尾开始写,防止丢失文件中原来就有的内容
ios::binary 二进制模式
ios::nocreate 打开一个文件时,如果文件不存在,不创建文件
ios::noreplace 打开一个文件时,如果文件不存在,创建该文件
ios::trunc 打开一个文件,然后清空内容
ios::ate 打开一个文件时,将位置移动到文件尾

文件指针位置在c++中的用法:
ios::beg 文件头
ios::end 文件尾
ios::cur 当前位置

engine文件的读取

读取文件名为"yolov5s.engine"的trt文件,以二进制进行读取。

std::string engine_name = "yolov5s.engine";
std::ifstream file(engine_name, std::ios::binary);

可以判断是否读取成功:

if (!file.good())
	{
		std::cerr<<"read" <<engine_name <<"error!"<<std::endl;
		return -1;
	}

如果可以成功读取,我们将获取完整的数据内容:

读取完整的文件内容,并利用file.tellg()返回文件指针位置,可以获得文件大小;

size_t size = 0;
file.seekg(0, file.end);
size = file.tellg();

size =  20355643 

定义空网络

char* trtModel = nullptr; //trtmodel指针初始化
trtModel = new char[size];
assert(trtModel);

可以看到此时定义的trtModel是一个char类型的指针,并初始化为空指针。其实这一步就是为了在内存中创建一段空间用来存储engine模型。

将engine写入创建的trtModel

    //将engine读入定义trt的内存空间中
	file.read(trtModel, size);
	file.close();

将engine文件放入前面定义的trtModel中。

完整代码

#include <stdio.h>
#include <string>
#include <fstream>
#include <iostream>
#include <assert.h>

int main()
{	
	std::string engine_name = "yolov5s.engine";
	std::ifstream file(engine_name, std::ios::binary);
	if (!file.good())
	{
		std::cerr<<"read " <<engine_name <<" error!"<<std::endl;
		return -1;
	}
	/*std::string line;
	while (std::getline(file, line))
	{
		std::cout << line << std::endl;
	}*/
	
	//如果可以成功读取文件名
	size_t size = 0;
	file.seekg(0, file.end);
	size = file.tellg();
	//定义trt网络
	char* trtModel = nullptr; //trtmodel指针初始化
	trtModel = new char[size];
	assert(trtModel);

	//将engine读入定义trt的内存空间中
	file.read(trtModel, size);
	file.close();
	
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLOv5 tensorRT C++代码详解之engine的读取 的相关文章

  • 具有不同大小结构的结构数组的 malloc()

    如果每个结构都包含一个大小不同的字符串数组 那么如何正确地 malloc 一个结构数组 因此每个结构可能有不同的大小 并且不可能 realloc 结构体数量 sizeof 结构体名称 after malloc 初始大小 sizeof 结构名
  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 初始化 LPCTSTR /LPCWSTR [重复]

    这个问题在这里已经有答案了 我很难理解并使其正常工作 基本上归结为我无法成功初始化这种类型的变量 它需要有说的内容7 2E25DC9D 0 USB003 有人可以解释 展示这种类型的正确初始化和类似的值吗 我已查看此站点上的所有帮助 将项目
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • 卷积神经网络超详细介绍

    文章目录 1 卷积神经网络的概念 2 发展过程 3 如何利用CNN实现图像识别的任务 4 CNN的特征 5 CNN的求解 6 卷积神经网络注意事项 7 CNN发展综合介绍 8 LeNet 5结构分析 9 AlexNet 10 ZFNet 1
  • layui option 动态添加_layui select 动态加载案例

    用到知识点 表单监听 form on 局部表单渲染 form render 动态加载的select表单 必须有默认的option项 第一个option 要不然layui 不会渲染出 select 组件 代码如下 添加数据 返回列表 查找所有
  • Vue中子组件通过v-model动态修改父组件中的值

    父子通信中的子传父 使用v model实现双向数据绑定 注意 vue组件是此组件的根组件 是该组件中所有注册的组件的父组件 现有需求 通过子组件中的输入框来动态绑定父组件中data中的数据 代码实现 父组件使用porps来向子组件传值 子组
  • 为什么浏览器中有些文件点击后是预览,有些是下载

    今天给大家分享两个比较有用的浏览器行为与预期不一致的现象 这两个问题其实并不是什么难题 但在工作中发现不少人被难住了 在我的印象中至少有三位同事在群里问这样的问题 上周又有同事被此现象困住了 所以我觉得这应该是个共性问题 在这里分享给大家
  • 物理服务器和云服务器的区别

    1 从概念上区分 云服务器 云主机 是在一组集群服务器商虚拟出多个类似独立服务器的部分 集群中每个服务器上都有该云服务器的一个镜像 形象地讲 集群服务器犹如一个大型的公共停车场 而云服务器的使用 则是卖给了你停车的权利 独立服务器 顾名思义
  • 如何做数据清洗?

    一 预处理阶段 预处理阶段主要做两件事情 一是将数据导入处理工具 通常来说 建议使用数据库 单机跑数搭建MySQL环境即可 如果数据量大 千万级以上 可以使用文本文件存储 python操作的方式 而是看数据 这里包含两个部分 一是看元数据
  • 第四章 索引和视图 总结

    第四章 索引和视图 1 索引 索引主要分为聚类索引和非聚类索引 聚类索引 表中数据行的物理存储顺序与索引顺序完全相同 每个表只能有一个聚类索引 物理的重拍表中的数据以符合索引约束 用于经常查找的列 非聚类索引 不改变表中数据行的物理存储位置
  • linux系统中解决docker: command not found

    新申请了一台阿里云的服务器 打算在上边部署一个容器服务 竟然发现机器上连docker都没安装 如果是mac OS系统 可以参考文章 mac系统中解决docker command not found 解决 针对这个问题 今天特意记录了一下 我
  • 网上总结的字节跳动前端面试题

    1 jQuery与Vue的区别是什么 Vue vue是一个兴起的前端js库 是一个精简的MVVM 从技术角度讲 Vue js 专注于 MVVM 模型的 ViewModel 层 它通过双向数据绑定把 View 层和 Model 层连接了起来
  • Python爬虫常见异常及解决办法

    文章目录 1 selenium common exceptions WebDriverException Message unknown error cannot find Chrome binary 方法一 配置参数 方法二 修改源文件
  • mysql学习-mysql数据类型学习01

    数据类型概览 数值类型 整数类型包括 TINYINT SMALLINT MEDIUMINT INT BIGINT 浮点数类型包括 FLOAT 和 DOUBLE 定点数类型为 DECIMAL tinyint smallint mediumin
  • 【MySQL】MYSQL内核:INNODB存储引擎 卷1pdf——百度网盘下载

    百度网盘地址 https pan baidu com s 1p4CsmBhYzrIawwUznmByYw 资源来之不易 需要获取密码 请关注公众号 全栈船长 并回复数字 0002
  • 前端开发:JS中截取字符串的用法总结,高级Android程序员必会

    var a 0123456789 a substring 5 2 4 start 和 stop 有字符串 但是最后的输出结果是 234 a substring 5 hh start 和 stop 有字符串 但是最后的输出结果是 234 二
  • 计算机在汽车设计方面的应用属于计算机的,计算机技术辅助设计在汽车设计中的应用.pdf...

    82 车辆与动力工程 Vehicles and Power Engineering 2017 年 2 月 计算机技术辅助设计在汽车设计中的应用 温 欣 汪 家宇 杨 海 南 沈 阳理工 大学 辽 宁 沈 阳 110159 摘 要 随着社会经
  • keil软件调试(Debug)仿真教程(软件调试和硬件调试的区别)及常用调试按键详解

    文章目录 前言 一 什么是软件调试 Debug 有什么用 二 keil Debug常用按钮 总结 前言 单片机的调试分为两种 一种是使用软件模拟调试 第二种是硬件调试 两种调试方式各有不同 软件模拟调试有误差 而硬件调试 借用仿真器调试是嵌
  • 新斗罗大陆手游服务器维护,《新斗罗大陆》新ss魂师天青龙牛天修复公告

    亲爱的魂师大人 新SS魂师天青龙牛天首发后 小舞收到了大量意见反馈 部分魂师大人认为牛天战斗结果异常 过高的伤害与其魂师定位不符 我们在接收到反馈的第一时间 进行了紧急核查 随后 我们发现该问题是由牛天的技能 龙魂觉醒 导致 当牛天施展该技
  • AQS原理解析及源码分析

    目录 1 介绍下AQS几个重要的组件 2 内部成员变量state 3 同步队列NODE 4 等待队列 condition AbstractQueuedSynchronizer又称为队列同步器 后面简称AQS AQS的核心思想是 如果被请求的
  • 对比梯度下降和正规方程解性能

    现在用导数的方式模拟线性回归中的梯度下降法 首先再来回顾一下梯度下降法的基础 梯度下降法不是一个机器学习算法 而是一个搜索算法 梯度下降法用在监督学习中 梯度下降法的过程 对比模型输出值和样本值的差异不断调整本省权重 直到最后模型输出值和样
  • Leetcode题解——26.树的子结构

    题目地址 剑指 Offer 26 树的子结构 力扣 LeetCode 目录 一 解题思路 一 大体思路 二 Search函数 三 Judge函数 二 代码实现 三 拓展思考 一 解题思路 一 大体思路 对于二叉树类的题目 一般会使用递归或层
  • YOLOv5 tensorRT C++代码详解之engine的读取

    在tensorRT中 engine模型是对yolov5序列化后的结果 在推理的时候需要进行反序列化才能进行推理 那么第一步就是读取engine文件 ifstream介绍 engine文件的读取需要用到ifstream 需要导入头文件 inc