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. 创建网络定义:builder-->network3. 配置参数:builder-->config4. 生成engine:builder-->engine()5. 序列化保存:engine-->serialize6. 释放资源:delete */ #include&l…...
利用Grounding DINO进行自动标注——目标检测任务——YOLO格式
关于Grounding DINO的环境搭建可以参考我的以前的博客,链接如下所示 如何在Linux上离线部署Grounding DINO-CSDN博客 这个博客主要来介绍如何利用Grounding DINO这个项目去进行目标检测的自动化标注。并且给出了相关的代码已经实验验证。 1.数据集准备 2. 开始实…...
网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)
网际协议(Internet Protocol,IP),又称互联网协议。是OSI中的网络层通信协议,用于跨网络边界分组交换。它的路由功能实现了互联互通,并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之…...
uniapp 添加loading
在uniapp中添加loading可以使用uni的API uni.showLoading 方法。以下是一个简单的示例代码 // 显示loading uni.showLoading({title: 加载中 });// 假设这里是异步操作,比如网络请求 setTimeout(function () {// 隐藏loadinguni.hideLoading(); }, 2000);...
cocotb pytest
打印python中的print , 应该使用 pytest -s pytest --junitxmltest_report.xml --htmlreport.html...
docker run 设置启动命令
在使用 docker run 命令时,你可以通过指定启动命令来覆盖 Docker 镜像中的默认入口点或命令。具体来说,你可以通过以下两种方式来设置启动命令: 覆盖 CMD: 你可以通过在 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 属性实现元素的圆周运动。以下是一个示例代码: 示例代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content…...
【NoSQL数据库】MongoDB数据库——集合和文档的基本操作(创建、删除、更新、查询)
目录 一、MongoDB数据库原理 二、MongoDB数据库和集合基本操作(增删改查) 三、MongoDB数据库的文档基本操作(增删改) 四、学习笔记 往期文章:【NoSQL数据库】MongoDB数据库的安装与卸载-CSDN博客 一、MongoDB数据…...
Dart 学习笔记(一)
一、数据类型 数值类型 int:表示整数类型,例如:int num 10;。在 Dart 中,int 类型是有范围限制的,具体取决于平台,但通常在 -2^63 到 2^63 - 1 之间。double:表示双精度浮点数类型,…...
安防视频监控平台Liveweb视频汇聚管理系统管理方案
智慧安防监控Liveweb视频管理平台能在复杂的网络环境中,将前端设备统一集中接入与汇聚管理。国标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文件名: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、表格内容靠左上下居中(排除首行) 1、表格首行居中 说明: 遇到错误将进行捕获,然后继续处理下一个表格 宏: 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 库,请自行下载! 如果没有安装 odbc for sqlite 驱动,可以使用 godking.conn.driver.sqlite3.install() 安装。 也可以在此下载自行安装:http://www.chengxu.online/show.asp?softid267 1、将js…...
数据结构学习笔记 双向链表
……接上文 6. 双向链表 6.1 特性 逻辑结构:线性结构 存储结构:链式结构 操作:增删改查 建立双向链表结构体: //双向链表的节点定义 typedef int datatype;typedef struct node_t{datatype data;//数据域 struct node_t *next;//…...
深度学习作业十 BPTT
目录 习题6-1P 推导RNN反向传播算法BPTT. 习题6-2 推导公式(6.40)和公式(6.41)中的梯度. 习题6-3 当使用公式(6.50)作为循环神经网络的状态更新公式时, 分析其可能存在梯度爆炸的原因并给出解决方法. 习题6-2P 设计简单RNN模型࿰…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
