模型部署 - 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.pswp.cn/news/718183.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718183.shtml
英文地址,請注明出處:http://en.pswp.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…

Qt+libhv實現各類網絡通信方式(TCP-UDP-HTTP-WebSocket)

文章目錄 TCP通信服務端客戶端UDP通信服務端客戶端HTTP通信服務端客戶端WebSocket通信服務端客戶端參考項目下載為了實現程序的跨進程和跨主機通信,我們通常會采用網絡通信進行數據傳輸。常用的通信方式包括TCP/UDP、HTTP、WebSocket等,這些網絡通信方式各有優劣有的是短連接…

事故預測 | Matlab基于FuzzySVR模糊支持向量機多特征變量事故預測

事故預測 | Matlab基于FuzzySVR模糊支持向量機多特征變量事故預測 目錄 事故預測 | Matlab基于FuzzySVR模糊支持向量機多特征變量事故預測預測效果基本描述程序設計參考資料 預測效果 基本描述 Matlab基于FuzzySVR模糊支持向量機多特征變量事故預測 運行環境: Matlab2023及以 上…

C++經典日期類實現

學完C類和對象以及四個默認成員函數&#xff0c;就可以來嘗試自己實現一下日期類。完成日期類的各種功能&#xff0c;并加強自己的代碼能力。 日期類實現 定義一個日期類 // 文件:Date.h #pragma once #include <iostream> using std::cout; using std::endl;//定義日…

C語言數組作為函數參數

有兩種情形&#xff1b; 一種是數組元素作為函數實參&#xff1b;一種是數組名作為函數參數&#xff1b; 新建一個VC6單文檔工程&#xff1b; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

Pthon圖像處理Opencv初步:色彩轉換、打開攝像頭

文章目錄 處理流程顏色空間二值圖像攝像頭 python圖像處理教程&#xff1a;初步&#x1f4f7;插值變換&#x1f4f7;形態學處理&#x1f4f7;濾波 處理流程 opencv是跨平臺圖像處理庫&#xff0c;為許多編程語言提供了接口&#xff0c;Python自然在列&#xff0c;但在使用pip…

32單片機基礎:PWM驅動舵機,直流電機

PWM驅動舵機 接線圖如上圖所示。注意&#xff0c;舵機的5V 線不能接到面包板上的正極&#xff0c;面包板上的正極只有3.3V,是STM32提供的&#xff0c;所以要接到STLINK的5V, 我們如何驅動舵機呢&#xff1f;由之前我們介紹原理知道&#xff0c;要輸出如下圖對應的PWM波形才行…

AWTK 開源串口屏開發(11) - 天氣預報

# AWTK 開源串口屏開發 - 天氣預報 天氣預報是一個很常用的功能&#xff0c;在很多設備上都有這個功能。實現天氣預報的功能&#xff0c;不能說很難但是也絕不簡單&#xff0c;首先需要從網上獲取數據&#xff0c;再解析數據&#xff0c;最后更新到界面上。 在 AWTK 串口屏中…

數字革命的浪潮:Web3如何改變一切

隨著數字技術的不斷發展&#xff0c;人類社會正迎來一場前所未有的數字革命浪潮。在這個浪潮中&#xff0c;Web3技術以其去中心化、安全、透明的特性&#xff0c;正在逐漸改變著我們的生活方式、商業模式以及社會結構。本文將深入探討Web3技術如何改變一切&#xff0c;以及其所…

volatile關鍵字的作用 以及 單例模式(餓漢模式與懶漢模式的區別及改進)

文章目錄 &#x1f4a1;volatile保證內存可見性&#x1f4a1;單例模式&#x1f4a1;餓漢模式&#x1f4a1;懶漢模式&#x1f4a1;懶漢模式多線程版&#x1f4a1;volatile防止指令重排序 &#x1f4a1;volatile保證內存可見性 Volatile 修飾的變量能夠保證“內存可見性”以及防…

解決連接工具Mobaxterm連接錯誤Connection timed out----VMware里Linux端口號固定

錯誤&#xff1a;Connection timed out 原因&#xff1a; 沒有固定ip&#xff0c;網絡斷開&#xff0c;再次連接就是新的IP 解決&#xff1a; 再次測試連接&#xff0c;彈出這個就代表成功了

CUDA 中的線程組織

明朝那些事中有一句話&#xff1a;我之所以寫徐霞客是想告訴你&#xff0c;所謂千秋霸業萬古流芳&#xff0c;與一件事相比&#xff0c;其實都算不了什么&#xff0c;這件事情就是——用你喜歡的方式度過一生。 我們以最簡單的 CUDA 程序&#xff1a;從 GPU 中輸出 Hello World…

實現一個簡單的哈希映射功能

說在前面 &#x1f388;哈希表大家應該都經常用到吧&#xff0c;那么大家有沒有想過哈希表是怎么實現的呢&#xff1f;今天讓我們一起從一道簡單的題目來初步了解一個哈希表的簡單原理。 目的 不使用任何內建的哈希表庫設計一個哈希映射&#xff08;HashMap&#xff09;。 實…

bert 相似度任務訓練完整版

任務 之前寫了一個相似度任務的版本&#xff1a;bert 相似度任務訓練簡單版本,faiss 尋找相似 topk-CSDN博客 相似度用的是 0&#xff0c;1&#xff0c;相當于分類任務&#xff0c;現在我們相似度有評分&#xff0c;不再是 0,1 了&#xff0c;分數為 0-5&#xff0c;數字越大…

EasyRecovery易恢復2024免費文件數據恢復軟件下載

一、軟件概述 EasyRecovery易恢復中文文件數據恢復軟件是一款專為中文用戶設計的強大數據恢復工具。該軟件致力于幫助用戶從各種存儲設備中恢復因各種原因丟失的中文文件&#xff0c;如文檔、圖片、視頻、音頻等。憑借其核心技術和多年的研發經驗&#xff0c;EasyRecovery易恢…

C語言計算誤碼率

#include <stdio.h> #include <stdlib.h> bool dayintrue; //是否打印 int main(){ int i,k,g0; int n10,n20; int good0,bad0; double rate; (dayin)? printf("打印具體數據\n"):printf("不打印具體數據\n\n");…

STM32-SPI通信協議

串行外設接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司開發的一種通用數據總線。 在某些芯片上&#xff0c;SPI接口可以配置為支持SPI協議或者支持I2S音頻協議。 SPI接口默認工作在SPI方式&#xff0c;可以通過軟件把功能從SPI模式切換…

Python·算法·每日一題(3月4日)最長公共前綴

題目 編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 “”。 示例 示例 1&#xff1a; 輸入&#xff1a;strs ["flower","flow","flight"] 輸出&#xff1a;"fl"示例 2&#xff1a;…

【數據結構與算法】常見排序算法(Sorting Algorithm)

文章目錄 相關概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 直接插入排序&#xff08;Insertion Sort&#xff09;3. 希爾排序&#xff08;Shell Sort&#xff09;4. 直接選擇排序&#xff08;Selection Sort&#xff09;5. 堆排序&#xff08;Heap Sort&#xff09;…