MIT-BEVFusion系列九--CUDA-BEVFusion部署2 create_core之参数设置

news/2025/2/19 18:37:44/

目录

    • 加载命令行参数
    • main 函数中的 create_core
      • 图像归一化参数
      • 体素化参数
      • 稀疏卷积网络参数
      • 真实世界几何空间参数 (雷达坐标系下体素网格的参数)
      • 解码后边界框的参数
      • 构建 bevfusion::Core 存储推理时需要的参数

本章开始,我们将一起看CUDA-BEVFusion的代码流程,看看NVIDIA部署方案的思路方法。

加载命令行参数

将代码debug起来,launch.json中配置好了传入的参数。C++代码中会接收命令行参数。具体如下

在这里插入图片描述

argc 是一个整数 (int) 类型的变量,代表命令行参数的数量 (argument count),即程序执行时通过命令行传递程序的参数的总量,包括程序名称本身。argc 的值至少为 1,因为第一个参数是程序的名称。

argv 是一个指向指针的指针 (char**),代表命令行参数的值 (argument vector)。它是一个指针数组,每个元素指向一个以空字符结尾的字符串,表示一个命令行参数的值。

./build/bevfusion $DEBUG_DATA $DEBUG_MODEL $DEBUG_PRECISION

run.sh 文件中,运行程序的代码如上,三个变量是在 environment.sh 脚本中定义的,分别为 int8,example-data,OFF。编译好可执行文件后,可以使用下面命令行运行程序。

./build/bevfusion example-data resnet50int8 int8

在这里,argc 就是 4,通过 argv 可以查看命令行参数。

  • 图示,argv 就是 launch.jsonprogramargs 的参数
    在这里插入图片描述

在这里插入图片描述
argv参数打印

main 函数中的 create_core

create_core是非常重要的方法,下方我们先分析他的参数设置部分。

在这里插入图片描述

  • 输入model(resnet50int8), precision(int8)两个字符串。

  • 返回值:std::shared_ptr<bevfusion::Core>

  • 作用创建 bevfusion::Core 对象,后续会调用这个对象的 update 与 forward 方法。src/bevfusion/bevfusion.cpp
    在这里插入图片描述

    1. 配置CoreParameter结构体类型的param参数:给 NormalizationParameterVoxelizationParameterSCNParameterGeometryParameterTransBBoxParameter 等结构体,赋值。—图像多大、步长多长(这些都是 yaml 文件中定义的参数)
      • 配置相机归一化参数
      • 配置激光雷达体素化参数
      • 配置稀疏卷积网络(SCN)参数
      • 配置 bevpool 中的 geometry 参数
      • 配置 TransBBox 参数
    2. 把上述已经赋值的结构体,给 CoreParameter 结构体。相当于把所有参数汇总给 CoreParameter
    3. 把包含了所有参数的 CoreParameter,给方法 bevfusion::create_core(param) 去创建 engine,这里bevfusion::create_core()是核心

图像归一化参数

这里设置了图像预处理需要的参数,熟悉bevfusion的话,这些参数都是比较常见的基础的参数。原始图像大小1600900,模型输入图像大小704256,预处理图像缩放倍率0.48等
在这里插入图片描述

在这里插入图片描述

  • 在代码中,嵌套命名空间是很常见的,这允许在一个命名空间中定义其他命名空间,提供了一种组织代码的方式,可以避免名字冲突,并且使代码更易于理解和维护。可以通过双冒号 :: 运算符来访问嵌套命名空间内的实体代码。

  • 这里通过 bevfusion::camera::NormalizationParameter 来构建结构体对象,然后对对象中的成员变量进行赋值。这部分用于定义相机图片进行预处理时使用的方法和参数

    • NormTypeChannelTypeInterpolation 35、36、37 行,枚举类型可选项

体素化参数

  • 这里是点云常见的参数,点云的范围前后左右-54~+54米,上下-5~+3米,点云体素化的步长0.075以及0.2。
  • 硬体素化的参数。
    在这里插入图片描述

在这里插入图片描述

稀疏卷积网络参数

在这里插入图片描述

在这里插入图片描述

voxelization 赋值为上面定义的 bevfusion::lidar::VoxelizationParameter 对象。

模型路径设置为 model/resnet50int8/lidar.backbone.xyz.onnx

模型输出的索引顺序为 XYZ

真实世界几何空间参数 (雷达坐标系下体素网格的参数)

在这里插入图片描述

在这里插入图片描述

解码后边界框的参数

在这里插入图片描述

  • 对应 yaml
    在这里插入图片描述

在这里插入图片描述

构建 bevfusion::Core 存储推理时需要的参数

最终,上面所有参数结构体,复制给param,统一管理后面需要的参数。

在这里插入图片描述


http://www.ppmy.cn/news/1357040.html

相关文章

react渲染流程是怎样的

整体流程&#xff1a; react的核心可以用uifn(state)来表示&#xff0c;更详细可以用&#xff1a; const state reconcile(update); const UI commit(state);上面的fn可以分为如下一个部分&#xff1a; Scheduler&#xff08;调度器&#xff09;&#xff1a; 调度任务&…

主流开发语言和开发环境?

主流开发语言 Java 简介&#xff1a;Java 是一种广泛使用的面向对象的编程语言&#xff0c;由Sun Microsystems公司于1995年发布&#xff0c;后由Oracle公司接手。Java具有“一次编写&#xff0c;到处运行”的特性&#xff0c;它的跨平台能力得益于Java虚拟机&#xff08;JVM&a…

民安智库如何做汽车满意度调查

汽车调研是一个系统性的过程&#xff0c;需要采用多种方法和工具&#xff0c;以便全面了解汽车市场的现状和趋势、不同品牌汽车的销售情况、消费者的购车需求和偏好等。为了确保调研结果的准确性和有效性&#xff0c;研究人员需要做好样本的选择和数据的处理和分析工作。那么具…

Android S - 添加按键,上报键值为0

仅作记录 展锐8581模块 device/sprd/mpool/module/keylayout/gpio-keys.kl#仿照下面的形式&#xff0c;新增一行 key 68 F10 WAKE key 114 VOLUME_DOWN WAKE key 115 VOLUME_UP WAKE key 116 POWER WAKE key 212 CAM…

HTML元素和属性快速参考指南

​ 以下是几个与HTML元素和属性相关的参考资料网站链接&#xff1a; HTML Reference - 提供所有HTML元素和属性的免费指南。W3Schools HTML Reference - W3Schools 提供一个广泛的HTML标签和属性参考。freeCodeCamp HTML Cheat Sheet - freeCodeCamp 提供了一个HTML元素列表参…

文生图提示词:天气条件

天气和气候 --天气条件 Weather Conditions 涵盖了从基本的天气类型到复杂的气象现象&#xff0c;为描述不同的天气和气候条件提供了丰富的词汇。 Sunny 晴朗 Cloudy 多云 Overcast 阴天 Partly Cloudy 局部多云 Clear 清晰 Foggy 雾 Misty 薄雾 Hazy 朦胧 Rainy 下雨 Showers …

力扣 188. 买卖股票的最佳时机 IV

题目来源&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/ C题解&#xff1a;动态规划 思路同力扣 123. 买卖股票的最佳时机 III-CSDN博客&#xff0c;只是把最高2次换成k次。如果思路不清晰&#xff0c;可以将k从0写到4等找找规律…

蓝牙BLE学习-GATT和ATT

1. GATT GATT-Generic Attribute profle-通用属性配置文件。GATT层是传输真正数据所在的层。包括了一个数据传输和存储架构以及其基本操作。GATT用来规范attribute中的数据内容&#xff0c;并运用group&#xff08;分组&#xff09;的概念对attribute进行分类管理。没有GATT&a…