当前位置: 首页 > news >正文

tensorrt

engine

/*tensorrt创建builder1. 创建builder2. 创建网络定义:builder-->network3. 配置参数:builder-->config4. 生成engine:builder-->engine()5. 序列化保存:engine-->serialize6. 释放资源:delete
*/
#include<iostream>
#include<NvInfer.h>
#include <fstream>
#include <assert.h>
class TRTLogger : public nvinfer1::ILogger {void log(Severity severity, const char *msg) noexcept override {if (severity != Severity::kINFO) {std::cout << msg << std::endl;}}
}gLogger;int main() {// 1. 创建builderTRTLogger logger;nvinfer1::IBuilder *builder = nvinfer1::createInferBuilder(logger);// 2. 创建网络定义auto explicitBatch = 1U << static_cast<uint32_t>(nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH);nvinfer1::INetworkDefinition *network = builder->createNetworkV2(explicitBatch);// 定义网络结构// 3. 配置参数// 添加配置参数,告诉tensorRT如何优化网络nvinfer1::IBuilderConfig *config = builder->createBuilderConfig();//设置最大工作空间,单位:字节config->setMaxWorkspaceSize(1 << 20);// 4. 生成enginenvinfer1::ICudaEngine *engine = builder->buildEngineWithConfig(*network, *config);if (!engine) {std::cout << "创建失败" << std::endl;return -1;}//5. 序列化nvinfer1::IHostMemory *serialized_engine = engine->serialize();// 存入文件std::ofstream outfile("model/mlp.engine", std::ios::binary);assert(outfile.is_open() && "打开失败");outfile.write((char *)serialized_engine->data(), serialized_engine->size());// 释放资源outfile.close();}

runtime推理

/*
使用cu文件时希望使用cuda的编译器,会自动链接cuda库
runtime推理过程
1. 创建一个runtime对象
2. 反序列化申城engine:runtime-->engine
3. 创建一个执行上下文ExecutionContext:engine-->context
4. 填充数据
5. 执行推理
6. 释放资源
*/#include<iostream>
#include<vector>
#include<fstream>
#include<cassert>#include"cuda_runtime.h"
#include"NvInfer.h"class TRTLogger : public nvinfer1::ILogger {void log(Severity severity, const char *msg) noexcept override {if (severity != Severity::kINFO) {std::cout << msg << std::endl;}}
}gLogger;// 加载模型
std::vector<unsigned char>loadEngineModel(const std::string &filename) {std::ifstream file(filename, std::ios::binary);   //二进制形式读取assert(file.is_open && "打开文件失败");// 定位到文件末尾file.seekg(0, std::ios::end);size_t size = file.tellg();		//获取文件大小std::vector<unsigned char> data(size);		//创建一个vector,大小为sizefile.seekg(0, std::ios::beg);				//定位到文件开头file.read((char *)data.data(), size);		// 读取文件内容到datefile.close();return data;}int main() {TRTLogger logger;nvinfer1::IRuntime *runtime = nvinfer1::createInferRuntime(logger);// 反序列化生成engineauto engineModel = loadEngineModel("/mlp.engine");/*调用runtime反序列化engineModel.data():模型数据地址engineModel.size():模型大小nullptr:pluginFactory*/nvinfer1::ICudaEngine *engine = runtime->deserializeCudaEngine(engineModel.data(),engineModel.size(),nullptr);if (!engine) {std::cout << "反序列化失败" << std::endl;return -1;}// 创建一个执行上下文nvinfer1::IExecutionContext *context = engine->createExecutionContext();//填充数据:host-->device-->inference-->host//输入数据float *host_input_data = new float[3]{ 2,4,8 };		//host输入数据int input_data_size = 3 * sizeof(float);			//输入数据大小float *device_input_data = nullptr;					//device输入数据float *host_output_data = new float[2];				//输出数据int output_data_size = 2 * sizeof(float);			//输出数据大小float *device_output_data = nullptr;					//device输出数据cudaMalloc((void **)&device_input_data, input_data_size);cudaMalloc((void **)&device_output_data, output_data_size);cudaStream_t stream = nullptr;cudaStreamCreate(&stream);/*host-->devicedevice_input_data目的地址host_input_data源地址input_data_size数据大小cudaMemcpyHostToDevice拷贝方式stream*/cudaMemcpyAsync(device_input_data, host_input_data, input_data_size, cudaMemcpyHostToDevice,stream);//bindings告诉context输入输出数据位置float * bindings[] = { device_input_data,device_output_data };// 进行推理bool success = context->enqueueV2((void **)bindings, stream, nullptr);// device-->hostcudaMemcpyAsync(host_output_data, device_output_data, output_data_size, cudaMemcpyDeviceToHost, stream);cudaStreamSynchronize(stream);std::cout << host_output_data << std::endl;//释放资源
}

相关文章:

tensorrt

engine /*tensorrt创建builder1. 创建builder2. 创建网络定义&#xff1a;builder-->network3. 配置参数&#xff1a;builder-->config4. 生成engine&#xff1a;builder-->engine()5. 序列化保存:engine-->serialize6. 释放资源&#xff1a;delete */ #include&l…...

利用Grounding DINO进行自动标注——目标检测任务——YOLO格式

关于Grounding DINO的环境搭建可以参考我的以前的博客&#xff0c;链接如下所示 如何在Linux上离线部署Grounding DINO-CSDN博客 这个博客主要来介绍如何利用Grounding DINO这个项目去进行目标检测的自动化标注。并且给出了相关的代码已经实验验证。 1.数据集准备 2. 开始实…...

网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)

网际协议&#xff08;Internet Protocol&#xff0c;IP&#xff09;&#xff0c;又称互联网协议。是OSI中的网络层通信协议&#xff0c;用于跨网络边界分组交换。它的路由功能实现了互联互通&#xff0c;并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之…...

uniapp 添加loading

在uniapp中添加loading可以使用uni的API uni.showLoading 方法。以下是一个简单的示例代码 // 显示loading uni.showLoading({title: 加载中 });// 假设这里是异步操作&#xff0c;比如网络请求 setTimeout(function () {// 隐藏loadinguni.hideLoading(); }, 2000);...

cocotb pytest

打印python中的print &#xff0c; 应该使用 pytest -s pytest --junitxmltest_report.xml --htmlreport.html...

docker run 设置启动命令

在使用 docker run 命令时&#xff0c;你可以通过指定启动命令来覆盖 Docker 镜像中的默认入口点或命令。具体来说&#xff0c;你可以通过以下两种方式来设置启动命令&#xff1a; 覆盖 CMD&#xff1a; 你可以通过在 docker run 命令的最后部分提供命令来覆盖镜像的默认 CMD 指…...

docker入门 自记录

1.先自己下载离线bao .tar 或者 自己pull docker pull xxx 如果遇到网络问题就换源 2.之后run一个docker 后面是映射本地路径 sudo docker run -it --name ultralytics_241124 --gpus all --shm-size 8G -v /home/oppenheim/detect/train241204/docker:/home/docker ultralyti…...

css实现圆周运动效果

在CSS中可以通过 keyframes 动画 和 transform 属性实现元素的圆周运动。以下是一个示例代码&#xff1a; 示例代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content…...

【NoSQL数据库】MongoDB数据库——集合和文档的基本操作(创建、删除、更新、查询)

目录 一、MongoDB数据库原理 二、MongoDB数据库和集合基本操作&#xff08;增删改查&#xff09; 三、MongoDB数据库的文档基本操作&#xff08;增删改&#xff09; 四、学习笔记 往期文章&#xff1a;【NoSQL数据库】MongoDB数据库的安装与卸载-CSDN博客 一、MongoDB数据…...

Dart 学习笔记(一)

一、数据类型 数值类型 int&#xff1a;表示整数类型&#xff0c;例如&#xff1a;int num 10;。在 Dart 中&#xff0c;int 类型是有范围限制的&#xff0c;具体取决于平台&#xff0c;但通常在 -2^63 到 2^63 - 1 之间。double&#xff1a;表示双精度浮点数类型&#xff0c…...

安防视频监控平台Liveweb视频汇聚管理系统管理方案

智慧安防监控Liveweb视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚Liveweb平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…...

十八(GIT)、GIT基本命令、axios别名方法、黑马就业数据平台(axios基地址、轻提示函数、注册及登录功能)

1. GIT 1.1 Git配置用户信息 1. Git配置用户信息 git config --global user.name "用户名" git config --global user.email 邮箱地址 2. 查看配置 git config --list (信息太多使用 输入 q 退出) 1.2 本地初始化Git仓库 1. 通常有两种获取Git仓库的方式: 将 尚未进…...

Linux查看系统基本信息

执行命令 chmod x system_info.sh && ./system_info.sh文件名&#xff1a;system_info.sh #!/bin/bash# 获取系统版本 SYSTEM_VERSION$(cat /etc/os-release | grep ^PRETTY_NAME | cut -d -f 2 | xargs)# 获取CPU数量 CPU_COUNT$(grep -c ^processor /proc/cpuinfo…...

Word处理表格的一些宏

目录 1、表格首行居中2、表格内容靠左上下居中&#xff08;排除首行&#xff09; 1、表格首行居中 说明&#xff1a; 遇到错误将进行捕获&#xff0c;然后继续处理下一个表格 宏&#xff1a; Sub 表格首行居中()Dim tbl As tableOn Error Resume Next 错误时继续执行下一个…...

将本地项目文件推送到Git仓库中

一、在GitLab中创建新项目 1. 创建新项目 2. 打开本地文件. 3. 项目git文件操作 初始化本地Git仓库 git init关联远程仓库 git remote add origin 远程仓库地址将文件到Git暂存区 git add .提交项目文件到Git本地仓库 git commit -m "提交内容说明"将本地…...

2024-12-05OpenCV高级-滤波与增强

OpenCV高级-滤波与增强 文章目录 OpenCV高级-滤波与增强1-OpenCV平滑滤波1. 均值滤波 (cv2.blur())2. 高斯滤波 (cv2.GaussianBlur())3. 中值滤波 (cv2.medianBlur())4. 双边滤波 (cv2.bilateralFilter())总结 2-OpenCV边缘检测1. Sobel算子 (cv2.Sobel())2. Canny边缘检测 (cv…...

vue3中 axios 发送请求 刷新token 封装axios

service.js 页面 import axios from axios // 创建axios实例 const instance axios.create({baseURL: http://gcm-test.jhzhkj.cn:8600/h5card/,timeout: 5000, // 请求超时时间headers: {get: {Content-Type: application/x-www-form-urlencoded},post: {Content-Type: appl…...

aardio - 汉字笔顺处理 - json转sqlite转png

本代码需要最新版 godking.conn 库&#xff0c;请自行下载&#xff01; 如果没有安装 odbc for sqlite 驱动&#xff0c;可以使用 godking.conn.driver.sqlite3.install() 安装。 也可以在此下载自行安装&#xff1a;http://www.chengxu.online/show.asp?softid267 1、将js…...

数据结构学习笔记 双向链表

……接上文 6. 双向链表 6.1 特性 逻辑结构&#xff1a;线性结构 存储结构&#xff1a;链式结构 操作&#xff1a;增删改查 建立双向链表结构体&#xff1a; //双向链表的节点定义 typedef int datatype;typedef struct node_t{datatype data;//数据域 struct node_t *next;//…...

深度学习作业十 BPTT

目录 习题6-1P 推导RNN反向传播算法BPTT. 习题6-2 推导公式(6.40)和公式(6.41)中的梯度&#xff0e; 习题6-3 当使用公式(6.50)作为循环神经网络的状态更新公式时&#xff0c; 分析其可能存在梯度爆炸的原因并给出解决方法&#xff0e; 习题6-2P 设计简单RNN模型&#xff0…...

IPXWrapper终极指南:让90年代经典游戏在现代Windows上重生联机对战

IPXWrapper终极指南&#xff1a;让90年代经典游戏在现代Windows上重生联机对战 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 对于许多怀旧游戏玩家来说&#xff0c;最大的遗憾莫过于那些经典的《星际争霸》、《帝国时代》、《…...

告别VS Code!用CLion 2024.3 + CUDA 12.1搭建高效GPU开发环境(附CMake配置避坑指南)

CLion 2024.3 CUDA 12.1&#xff1a;打造专业级GPU开发环境的终极指南 在GPU加速计算领域&#xff0c;开发者长期面临一个两难选择&#xff1a;是使用功能全面但笨重的Visual Studio&#xff0c;还是选择轻量灵活但功能有限的VS Code&#xff1f;JetBrains CLion 2024.3的出现…...

Avidemux:开源视频剪辑神器,5分钟学会专业级视频处理

Avidemux&#xff1a;开源视频剪辑神器&#xff0c;5分钟学会专业级视频处理 【免费下载链接】avidemux2 Avidemux2, simple video editor 项目地址: https://gitcode.com/gh_mirrors/avi/avidemux2 你知道吗&#xff1f;在开源视频编辑领域&#xff0c;有一款轻量级但功…...

计算机视觉:YOLOv12安装环境

YOLOv12安装环境 一、工具软件准备 1、yolov12 1&#xff09;下载yolov12主体部分 推荐官方地址&#xff1a;https://github.com/sunsmarterjie/yolov12 2&#xff09;下载训练模型 地址&#xff1a; https://github.com/sunsmarterjie/yolov12 3&#xff09;安装命令和p…...

别再复制粘贴了!手把手教你用C语言实现MODBUS CRC-16校验(附5种算法对比)

MODBUS CRC-16校验算法实战指南&#xff1a;从原理到最优实现选择 在工业自动化领域&#xff0c;MODBUS协议因其简单可靠而广泛应用&#xff0c;而CRC-16校验则是保障数据完整性的关键环节。许多开发者习惯直接复制网络上的校验代码&#xff0c;却常常遇到内存溢出、性能瓶颈或…...

LVGL事件处理实战:从按钮点击到滚动列表,手把手教你写交互代码(附避坑指南)

LVGL事件处理实战&#xff1a;从按钮点击到滚动列表&#xff0c;手把手教你写交互代码&#xff08;附避坑指南&#xff09; 在嵌入式GUI开发中&#xff0c;流畅的交互体验往往决定了产品的成败。LVGL作为轻量级通用图形库&#xff0c;其事件处理机制是构建动态界面的核心。本文…...

电池级硫酸锂粉碎工艺与设备选型全解析

一、硫酸锂粉碎核心需求与特性 1. 硫酸锂基础物性&#xff08;决定粉碎工艺边界&#xff09; 形态与硬度&#xff1a;白色结晶 / 颗粒&#xff08;无水 / 一水&#xff09;&#xff0c;莫氏硬度约 2–3&#xff0c;质地脆、易结块、吸湿性强。 纯度要求&#xff1a;工业级≥99.…...

Vue 项目中 vis-network 点击节点不生效的问题排查:外层 transform 缩放导致坐标偏移

最近在 Vue3 项目中把一个原生 HTML 版知识图谱迁移成 Vue 组件。原始 HTML 使用 vis-network 实现节点关系图&#xff0c;点击节点可以正常展开下一级。但迁移到 Vue 项目后&#xff0c;图谱可以正常渲染&#xff0c;节点、连线、布局都没有问题&#xff0c;唯独点击节点时无法…...

HNU 计算机系统 bomblab:从GDB断点到链表重构的逆向实战

1. 逆向工程实战&#xff1a;从零开始拆解二进制炸弹 第一次接触bomblab时&#xff0c;我盯着终端里那个名为"bomb"的可执行文件发呆了十分钟。这个看似普通的Linux程序就像个黑盒子&#xff0c;里面藏着六个需要密码才能解除的"炸弹"。作为计算机系统课程…...

【Perplexity专利搜索黄金法则】:20年资深IP专家首度公开3大反直觉检索技巧

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity专利搜索黄金法则的底层逻辑 Perplexity 作为基于语言模型的智能搜索工具&#xff0c;其在专利检索场景中的卓越表现并非源于简单关键词匹配&#xff0c;而是植根于对专利文本结构化语义、法…...