模型部署 - BevFusion - (1) - 思路总结

模型部署实践 - BevFusion

  • 思路总结
  • 一、网络结构 - 总结
    • 1.1、代码
    • 1.2、网络流程图
    • 1.3、模块大致梳理
  • 二、Onnx 的导出 -总体思路分析
  • 三、优化思路总结

学习 BevFusion 的部署,看了很多的资料,这篇博客进行总结和记录自己的实践

思路总结

对于一个模型我们要进行部署,一般有以下几个开发流程或思路:

  • PyTorch 转 ONNX 转 TRT
  • FP16 优化
  • cuda-graph 优化
  • INT8 量化优化
  • ONNX 模型层面优化
  • Pipeline 优化
  • 模型内深度优化

我们需要先快速的去了解网络,然后将其转换成 Onnx 和 Tensorrt,然后再去根据结果进行二次优化

一、网络结构 - 总结

1.1、代码

Pytorch 代码:https://github.com/mit-han-lab/bevfusion
CUDA-BEVFusion 部署代码:https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution/tree/master/

1.2、网络流程图

在这里插入图片描述

1.3、模块大致梳理

在这里插入图片描述

二、Onnx 的导出 -总体思路分析

在 CUDA-BEVFusion 的代码中一共有五个 onnx ,说明作者是分模块来导出 onnx 的。

模块onnx 名称
Cameracamera.backbone.onnx
Cameracamera.vtransform.onnx
Fusefuser.onnx
Lidarlidar.backbone.xyz.onnx
decoder + posthead.bbox.onnx
(1) 在 Camera 模块 中导出了两个 onnx,为什么要分两个 onnx 导出?

因为 bev_pool 中有个下采样的部分,会影响整个onnx的导出,所以才选择分开两个 onnx。第一个是backone相关的,第二个是bev_pool相关的

(2) Camera 的 backone 为什么选择了 Resnet50?

源代码的 backone 是选择了SwinTransform,但是由于 bev_pool 有大量的计算,并且SwinTransform含有大量的复杂计算,所以在部署的时候会选择 Resnet50,因为它结构简单,容易做量化且精度不会损失太大。

(3) 如何导出 bev_pool ?

有两种方式实现。

方法一: 做成 Plugin,但是这样太麻烦,所以不太推荐

方法二:使用核函数实现,分成三个部分(subclass机制

  • bev_pool之前用onnx;
  • bev_pool不导出onnx,用cuda核函数实现;
  • bev_pool后的 downsample使用 onnx
(4) lidar模块如何导出 onnx?

因为模块中包含 spconv ,pytorch不能直接导出onnx,所以使用 onnx.helper 自定义导出 onnx

(5) decoder部分为什么不能用int8?

因为模块中包含 transformer,并且Tensorrt推理中容易出现 NAN(这种情况极难解决)

三、优化思路总结

在这里插入图片描述

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

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

相关文章

【代码】Android|获取压力传感器、屏幕压感数据(大气压、原生和Processing)

首先需要分清自己需要的是大气压还是触摸压力,如果是大气压那么就是TYPE_PRESSURE,可以参考https://source.android.google.cn/docs/core/interaction/sensors/sensor-types?hlzh-cn。如果是触摸压力就是另一回事,我需要的是触摸压力。 不过…

软考 系统分析师系列知识点之系统分析的任务、难点与要求(1)

所属章节: 第10章. 系统分析 第1节. 系统分析概述 系统分析阶段也称为逻辑设计阶段,其任务是根据系统设计书所确定的范围,对现有系统进行详细设计调查,描述现有系统的业务流程,指出现有系统的局限性和不足之处&#x…

事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测

事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测 目录 事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测预测效果基本描述程序设计参考资料 预测效果 基本描述 Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测 运行环境: Matlab2023及以 上…

C语言数组作为函数参数

有两种情形; 一种是数组元素作为函数实参;一种是数组名作为函数参数; 新建一个VC6单文档工程; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

Pthon图像处理Opencv初步:色彩转换、打开摄像头

文章目录 处理流程颜色空间二值图像摄像头 python图像处理教程:初步📷插值变换📷形态学处理📷滤波 处理流程 opencv是跨平台图像处理库,为许多编程语言提供了接口,Python自然在列,但在使用pip…

32单片机基础:PWM驱动舵机,直流电机

PWM驱动舵机 接线图如上图所示。注意,舵机的5V 线不能接到面包板上的正极,面包板上的正极只有3.3V,是STM32提供的,所以要接到STLINK的5V, 我们如何驱动舵机呢?由之前我们介绍原理知道,要输出如下图对应的PWM波形才行…

AWTK 开源串口屏开发(11) - 天气预报

# AWTK 开源串口屏开发 - 天气预报 天气预报是一个很常用的功能,在很多设备上都有这个功能。实现天气预报的功能,不能说很难但是也绝不简单,首先需要从网上获取数据,再解析数据,最后更新到界面上。 在 AWTK 串口屏中…

数字革命的浪潮:Web3如何改变一切

随着数字技术的不断发展,人类社会正迎来一场前所未有的数字革命浪潮。在这个浪潮中,Web3技术以其去中心化、安全、透明的特性,正在逐渐改变着我们的生活方式、商业模式以及社会结构。本文将深入探讨Web3技术如何改变一切,以及其所…

volatile关键字的作用 以及 单例模式(饿汉模式与懒汉模式的区别及改进)

文章目录 💡volatile保证内存可见性💡单例模式💡饿汉模式💡懒汉模式💡懒汉模式多线程版💡volatile防止指令重排序 💡volatile保证内存可见性 Volatile 修饰的变量能够保证“内存可见性”以及防…

解决连接工具Mobaxterm连接错误Connection timed out----VMware里Linux端口号固定

错误:Connection timed out 原因: 没有固定ip,网络断开,再次连接就是新的IP 解决: 再次测试连接,弹出这个就代表成功了

CUDA 中的线程组织

明朝那些事中有一句话:我之所以写徐霞客是想告诉你,所谓千秋霸业万古流芳,与一件事相比,其实都算不了什么,这件事情就是——用你喜欢的方式度过一生。 我们以最简单的 CUDA 程序:从 GPU 中输出 Hello World…

实现一个简单的哈希映射功能

说在前面 🎈哈希表大家应该都经常用到吧,那么大家有没有想过哈希表是怎么实现的呢?今天让我们一起从一道简单的题目来初步了解一个哈希表的简单原理。 目的 不使用任何内建的哈希表库设计一个哈希映射(HashMap)。 实…

bert 相似度任务训练完整版

任务 之前写了一个相似度任务的版本:bert 相似度任务训练简单版本,faiss 寻找相似 topk-CSDN博客 相似度用的是 0,1,相当于分类任务,现在我们相似度有评分,不再是 0,1 了,分数为 0-5,数字越大…

EasyRecovery易恢复2024免费文件数据恢复软件下载

一、软件概述 EasyRecovery易恢复中文文件数据恢复软件是一款专为中文用户设计的强大数据恢复工具。该软件致力于帮助用户从各种存储设备中恢复因各种原因丢失的中文文件,如文档、图片、视频、音频等。凭借其核心技术和多年的研发经验,EasyRecovery易恢…

STM32-SPI通信协议

串行外设接口SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线。 在某些芯片上,SPI接口可以配置为支持SPI协议或者支持I2S音频协议。 SPI接口默认工作在SPI方式,可以通过软件把功能从SPI模式切换…

【数据结构与算法】常见排序算法(Sorting Algorithm)

文章目录 相关概念1. 冒泡排序(Bubble Sort)2. 直接插入排序(Insertion Sort)3. 希尔排序(Shell Sort)4. 直接选择排序(Selection Sort)5. 堆排序(Heap Sort)…

【脑科学相关合集】有关脑影像数据相关介绍的笔记及有关脑网络的笔记合集

【脑科学相关合集】有关脑影像数据相关介绍的笔记及有关脑网络的笔记合集 前言脑模板方面相关笔记清单 基于脑网络的方法方面数据基本方面 前言 这里,我将展开有关我自己关于脑影像数据相关介绍的笔记及有关脑网络的笔记合集。其中,脑网络的相关论文主要…

TOMCAT的安装与基本信息

一、TOMCAT简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为&#xff0c…

IO 与 NIO

优质博文:IT-BLOG-CN 一、阻塞IO / 非阻塞NIO 阻塞IO:当一条线程执行read()或者write()方法时,这条线程会一直阻塞直到读取到了一些数据或者要写出去的数据已经全部写出,在这期间这条线程不能做任何其他的事情。 非阻塞NIO&…

记录踩过的坑-macOS下使用VS Code

目录 切换主题 安装插件 搭建Python开发环境 装Python插件 配置解释器 打开项目 打开终端 切换主题 安装插件 方法1 方法2 搭建Python开发环境 装Python插件 配置解释器 假设解释器已经通过Anaconda建好,只需要在VS Code中关联。 打开项目 打开终端