MIT-BEVFusion系列九--CUDA-BEVFusion部署4 c++解析pytorch导出的tensor数据

目录

    • 创建流
    • 打印 engine 信息
      • 打印结果
      • 内部流程
    • 启动计时功能
    • 加载变换矩阵并更新数据(重要)
      • 内部实现

该系列文章与qwe、Dorothea一同创作,喜欢的话不妨点个赞。

create_core方法结束后,我们的视角回到了main.cpp中。继续来看接下来的流程。本章的重点在于pytorch导出的tensor数据的解析。

创建流

在这里插入图片描述

流用于表示一系列的命令(如内存传输命令和核函数执行命令)在 GPU 上的执行顺序。流中的命令按照它们被插入的顺序在 GPU 上执行,但不同流中的命令可以并行执行。这里主要用于更新数据、推理和可视化时使用。

打印 engine 信息

这里会打印出执行CUDA-BEVFusion时,终端打印的信息中的网络信息。
从这里我们能清楚的看到一下几点:

  • 1)当前网络属于哪个部分。
  • 2)网络输入和输出的个数,数据形状

输出的网络数量与onnx数量是一一对应的。

打印结果

在这里插入图片描述
在这里插入图片描述

内部流程

在这里插入图片描述

print的具体实现在下方。
在这里插入图片描述

这部分用于打印这四个 engine 的信息,包含模型名称和绑定点的信息(输入输出是否为动态形状,输入输出节点索引、名称、维度和类型)。

启动计时功能

是否计时,这里设置为true
在这里插入图片描述

coreCoreImplement的一个实例,而CoreImplement继承了类Core
在这里插入图片描述
在类Core中set_timer是一个纯虚方法。
在这里插入图片描述

用于后续判断是否打印推理时每个模块的用时。

加载变换矩阵并更新数据(重要)

  • nv::Tensornv::format 是 Nvidia 提供在 src/common 中的工具
  • 下图 246 行之 249 行,加载一系列准备好的矩阵参数。
  • 下图所加载的.tensor后缀的文件,均是从pytorch中导出,保存的二进制文件。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  1. 格式化字符串传入:调用 nv::format 函数,传入格式字符串 "%s/camera2lidar.tensor"data 指针。这里的 %s 是一个占位符,用于指示将在这个位置插入一个字符串。
  2. 变量参数处理:在 format 函数内部,函数首先定义一个字符数组 buffer[2048] 作为存储结果的缓冲区。然后,它使用 va_list vl 初始化可变参数列表,并通过 va_start(vl, fmt) 宏开始访问这些参数。
  3. 字符串格式化:使用 vsnprintf 函数,将 data 指针所指向的字符串(即 "example-data")和格式字符串合并。vsnprintf 根据格式字符串 "%s/camera2lidar.tensor" 替换 %sdata 指向的字符串,因此格式化后的字符串将变为 "example-data/camera2lidar.tensor"
  4. 安全检查和内存管理:vsnprintf 函数使用 sizeof(buffer) 确保不会向 buffer 写入超出其容量的数据,从而避免缓冲区溢出。这是一个重要的安全特性,确保即使格式化的字符串非常长,也不会导致内存损坏。
    5. 返回结果:格式化后的字符串存储在 buffer 中。format 函数最后将 buffer 转换为 std::string 类型并返回这个字符串。
  • 加载结果,以 加载camera2lidar 为例:
    在这里插入图片描述

通过上图,我们就可以发现,.tensor后缀的文件存储的数据,可以分为数据头,和数据两个部分。

数据头,即描述数据信息的属性,例如shape、numel、ndim。描述数据的信息。

数据,即具体的数据的起始地址。

通过数据的读取,我们可以大致看一下作者是如何设计的。

内部实现

在这里插入图片描述

  1. 取文件前 3 个 int 字节大小的内容,第一个是 magic_number,类似识别码,第二个表示数据维度数量(ndims),第三个表示数据类型 id。
  2. 使用 dims 来存储每个维度的数值,使用 shape 来储存形状,用于后续创建 Tensor。计算矩阵的总参数量 volumn,然后通过每个数据占用空间 dtype 和总参数量 volumn 来计算储存矩阵数据需要的空间 bytes
  3. 读取文件中的数据,在 host 上使用容器 host_data 来储存。
  4. host 上创建 Tensor 对象,并将数据拷贝到 output 中。

在这里插入图片描述
在这里插入图片描述

  • 小结:
    • nvidia这个仓库的src/common中的tensor解析比较重要,nv::Tensor是一个通用的pytorch与c++数据联通的桥梁,值得一看。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[vscode] 1. 在编辑器的标签页下显示文件目录(标签页显示面包屑) 2. 在标题栏上显示当前文件的完整路径

1. 标签页显示面包屑 view->Appearance->Breadcrumbs 2. 在标题栏上显示当前文件的完整路径 搜索 window.title将原来的值activeEditorShort 修改为 activeEditorMedium 参考: vscode在编辑器的标签页下显示文件目录(标签页显示面包屑&#xf…

10、电源管理入门之OPP介绍

目录 1. 什么是OPP,怎么用? 2. 系统初始化加载OPP信息 3. 触发使用 4. API介绍 之前的文章设置clock的时候多次提到了(Operating Performance Point)OPP,例如DEVFreq、CPUFreq等,在现代SoC上存在有Power Domain,也可以以Power Domain为单位进行OPP的电压频率定义。 …

C++ 游戏飞机大战, 字符型的

//#define _CRT_SECURE_NO_WARNINGS 1 用于禁止不安全函数的警告 #include<iostream> #include<stdlib.h> #include<string> #include<conio.h> #include<Windows.h> #include<time.h> #include <graphics.h> using namespace std;…

顶会ICLR2024论文Time-LLM:基于大语言模型的时间序列预测

文青松 松鼠AI首席科学家、AI研究院负责人 美国佐治亚理工学院(Georgia Tech)电子与计算机工程博士&#xff0c;人工智能、决策智能和信号处理方向专家&#xff0c;在松鼠AI、阿里、Marvell等公司超10年的技术和管理经验&#xff0c;近100篇文章发表在人工智能相关的顶会与顶刊…

SpringMVC 学习(六)之视图

目录 1 SpringMVC 视图介绍 2 JSP 视图 3 Thymeleaf 视图 4 FreeMarker 视图 5 XSLT 视图 6 请求转发与重定向 6.1 请求转发 (Forward) 6.2 重定向 (Redirect) 7 视图控制器 (view-controller) 1 SpringMVC 视图介绍 在 SpringMVC 框架中&#xff0c;视图可以是一个 J…

字节面试问题

实现三列布局的方法 第一种&#xff1a;可以使用浮动margin 第二种&#xff1a;浮动BFC <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

防御保护:防火墙内容安全

一、IAE&#xff08;Intelligent Awareness Engine&#xff09;引擎 二、深度检测技术(DFI和DPI&#xff09; 1.DPI – 深度包检测技术 DPI主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对数据包的内容进行识别。&#x…

10_Vue

文章目录 Vue快速入门Vue的指令Vue的插值表达式V指令v-bind&#xff08;单向绑定&#xff09;v-model&#xff08;双向绑定&#xff09;v-on&#xff08;事件监听&#xff09;v-for&#xff08;循环&#xff09;v-text、v-htmlv-show&#xff08;显示/隐藏&#xff09;v-if&…

JetBrains系列工具,配置PlantUML绘图

PlantUML是一个很强大的绘图工具&#xff0c;各种图都可以绘制&#xff0c;具体的可以去官网看看&#xff0c;或者百度。 PlantUML简述 https://plantuml.com/zh/ PlantUML语言参考指引 https://plantuml.com/zh/guide PlantUML语言是依赖Graphviz进行解析的。Graphviz是开源…

SAP PP学习笔记04 - BOM1 - BOM创建,用途,形式,默认值,群组BOM等

本章开始讲BOM的内容。 1&#xff0c;BOM的定义 &#xff08;Bill of Materials&#xff09; 物料清单&#xff08;Bill of Materials&#xff0c;简称BOM&#xff09;是描述企业产品组成的技术文件。在加工资本式行业&#xff0c;它表明了产品的总装件、分装件、组件、部件、…

python自动化学习--3.8python操作EXCEL文件python日志收集处理

1、Excel文件处理 安装 openpxl 第三方库 openpxl 模块三大组件: 1、工作簿 &#xff08;包含多个sheet工作表&#xff09; 2、工作表 &#xff08;某个数据包含在某个工作表&#xff09; 3、单元格 1、创建excel工作簿 import openpyxl"""Excel表格的创建…

练习 2 Web [ACTF2020 新生赛]BackupFile 1

[ACTF2020 新生赛]BackupFile 1 Web常规题目 首先尝试查找常见的前端页面index.php之类的&#xff0c;没找到 题目有个“BackupFile”——备份文件 尝试用工具遍历查找相关的文件 御剑没扫出来&#xff0c;搜索搭建好dirsearch后&#xff0c;扫出来的index.php.bak 扫描工…

SPA首屏加载速度慢的怎么解决?

什么时首屏加载 首屏时间&#xff0c;指的是浏览器从响应用户输入网址地址&#xff0c;到首屏内容渲染完成的时间&#xff0c;此时整个网页不一定要全部渲染完成&#xff0c;但需要展示当前视图需要的内容。首屏加载可以说是用户体验中最重要的环节 如何计算首屏时间 通过DOM…

可观测性在威胁检测和取证日志分析中的作用

在网络中&#xff0c;威胁是指可能影响其平稳运行的恶意元素&#xff0c;因此&#xff0c;对于任何希望避免任何财政损失或生产力下降机会的组织来说&#xff0c;威胁检测都是必要的。为了先发制人地抵御来自不同来源的任何此类攻击&#xff0c;需要有效的威胁检测情报。 威胁…

【Vue的单选按钮不选中已解决亲测】

伙计&#xff0c;你是否因为后台给vue前端已经传入了对应的单选按钮的数据&#xff0c;为啥还是不选中呢&#xff01;&#xff1f; 这个问题实话我百度乐很多都不能解决我的问题&#xff0c;最后机智如我的发现乐vue的自身的问题&#xff0c;后端返回的数据类型如果是数字int类…

浙江大学主办!2024年第7届信息通信与信号处理国际会议( ICICSP2024)征稿开启!

会议官网 IEEE | ICICSP 2024 学术会议查询-学术会议交流服务平台-爱科会易 (uconf.com)​www.uconf.com/

JavaEE:多线程(3):案例代码

目录 案例一&#xff1a;单例模式 饿汉模式 懒汉模式 思考&#xff1a;懒汉模式是否线程安全&#xff1f; 案例二&#xff1a;阻塞队列 可以实现生产者消费者模型 削峰填谷 接下来我们自己实现一个阻塞队列 1.先实现一个循环队列 2. 引入锁&#xff0c;实现线程安全 …

ETH开源PPO算法学习

前言 项目地址&#xff1a;https://github.com/leggedrobotics/rsl_rl 项目简介&#xff1a;快速简单的强化学习算法实现&#xff0c;设计为完全在 GPU 上运行。这段代码是 NVIDIA Isaac GYM 提供的 rl-pytorch 的进化版。 下载源码&#xff0c;查看目录&#xff0c;整个项目…

Redis 16种妙用

1、缓存 2、数据共享分布式 3、分布式锁 4、全局ID 5、计数器 6、限流 7、位统计 8、购物车 9、用户消息时间线timeline 10、消息队列 11、抽奖 12、点赞、签到、打卡 13、商品标签 14、商品筛选 15、用户关注、推荐模型 16、排行榜 1、缓存 String类型 例如&#xff1a;热点…

提示emp.dll丢失怎么办?emp.dll的多种解决方法

在计算机游戏运行过程中&#xff0c;如果系统提示“emp.dll文件丢失”&#xff0c;这可能会引发一系列影响游戏正常运行的问题。由于emp.dll是动态链接库文件中的一种&#xff0c;它通常承载着游戏核心功能的重要模块或组件&#xff0c;一旦缺失&#xff0c;意味着相关功能将无…