0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FP32推理TensorRT演示

OpenCV學(xué)堂 ? 來(lái)源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-09-23 14:47 ? 次閱讀

引言

YOLOv5最新版本的6.x已經(jīng)支持直接導(dǎo)出engine文件并部署到TensorRT上了。

FP32推理TensorRT演示

可能很多人不知道YOLOv5新版本6.x中已經(jīng)支持一鍵導(dǎo)出Tensor支持engine文件,而且只需要一條命令行就可以完成:演示如下:

python export.py --weights yolov5s.pt --include onnx engine --device 0

其中onnx表示導(dǎo)出onnx格式的模型文件,支持部署到:

- OpenCV DNN- OpenVINO- TensorRT- ONNXRUNTIME
但是在TensorRT上推理想要速度快,必須轉(zhuǎn)換為它自己的engine格式文件,參數(shù)engine就是這個(gè)作用。上面的命令行執(zhí)行完成之后,就會(huì)得到onnx格式模型文件與engine格式模型文件。--device 0參數(shù)表示GPU 0,因?yàn)槲抑挥幸粡埧?!上述?dǎo)出的FP32的engine文件。

使用tensorRT推理 YOLOv5 6.x中很簡(jiǎn)單,一條命令行搞定了,直接執(zhí)行:

python detect.py --weights yolov5s.engine --view-img --source data/images/zidane.jpg

FP16推理TensorRT演示

在上面的導(dǎo)出命令行中修改為如下

python export.py --weights yolov5s.onnx --include engine --half --device 0
其中就是把輸入的權(quán)重文件改成onnx格式,然后再添加一個(gè)新的參 --half 表示導(dǎo)出半精度的engine文件。就這樣直接執(zhí)行該命令行就可以導(dǎo)出生成了,圖示如下:

02d33e88-3af3-11ed-9e49-dac502259ad0.png

03edd9f4-3af3-11ed-9e49-dac502259ad0.png

對(duì)比可以發(fā)現(xiàn)相比FP32大小的engine文件,F(xiàn)P16的engine文件比FP32的engine大小減少一半左右,整個(gè)文件只有17MB大小左右。

推理執(zhí)行的命令跟FP32的相同,直接運(yùn)行,顯示結(jié)果如下:

對(duì)比發(fā)現(xiàn)FP32跟FP16版本相比,速度提升了但是精度幾乎不受影響!

INT8量化與推理TensorRT演示

TensorRT的INT量化支持要稍微復(fù)雜那么一點(diǎn)點(diǎn),最簡(jiǎn)單的就是訓(xùn)練后量化。只要完成Calibrator這個(gè)接口支持,我用的TensorRT版本是8.4.0.x的,它支持以下幾種Calibrator:

07b38d90-3af3-11ed-9e49-dac502259ad0.png

不同的量化策略,得到的結(jié)果可能稍有差異,另外高版本上的INT8量化之后到低版本的TensorRT機(jī)器上可能無(wú)法運(yùn)行,我就遇到過(guò)!所以建議不同平臺(tái)要統(tǒng)一TensorRT版本之后,再量化部署會(huì)比較好。上面的Calibrator都必須完成四個(gè)方法,分別是:

#使用calibrator驗(yàn)證時(shí)候每次張數(shù),跟顯存有關(guān)系,最少1張get_batch_size  #獲取每個(gè)批次的圖像數(shù)據(jù),組裝成CUDA內(nèi)存數(shù)據(jù)get_batch  #如果以前運(yùn)行過(guò)保存過(guò),可以直接讀取量化,低碳給國(guó)家省電read_calibration_cache#保存calibration文件,量化時(shí)候會(huì)用到write_calibration_cache

這塊對(duì)函數(shù)集成不懂建議參考TensorRT自帶的例子:

TensorRT-8.4.0.6samplespythonint8_caffe_mnist
幾乎是可以直接用的!Copy過(guò)來(lái)改改就好了!

搞定了Calibrator之后,需要一個(gè)驗(yàn)證數(shù)據(jù)集,對(duì)YOLOv5來(lái)說(shuō),其默認(rèn)coco128數(shù)據(jù)集就是一個(gè)很好的驗(yàn)證數(shù)據(jù),在data文件夾下有一個(gè)coco128.yaml文件,最后一行就是就是數(shù)據(jù)集的下載URL,直接通過(guò)URL下載就好啦。

完成自定義YOLOv5的Calibrator之后,就可以直接讀取onnx模型文件,跟之前的官方轉(zhuǎn)換腳本非常相似了,直接在上面改改,最重要的配置與生成量化的代碼如下:

# build trt enginebuilder.max_batch_size = 1config.max_workspace_size = 1 << 30config.set_flag(trt.BuilderFlag.INT8)config.int8_calibrator = calibratorprint('Int8 mode enabled')plan = builder.build_serialized_network(network, config)
主要就是設(shè)置config中的flag為INT8,然后直接運(yùn)行,得到plan對(duì)象,反向序列化為engine文件,保存即可。最終得到的INT8量化engine文件的大小在9MB左右。

07d00024-3af3-11ed-9e49-dac502259ad0.png

數(shù)據(jù)太少,只有128張, INT8量化之后的YOLOv5s模型推理結(jié)果并不盡如人意。但是我也懶得再去下載COCO數(shù)據(jù)集, COCO訓(xùn)練集一半數(shù)據(jù)作為驗(yàn)證完成的量化效果是非常好。 這里,我基于YOLOv5s模型自定義數(shù)據(jù)集訓(xùn)練飛鳥(niǎo)跟無(wú)人機(jī),對(duì)得到模型,直接用訓(xùn)練集270張數(shù)據(jù)做完INT8量化之后的推理效果如下

0802faba-3af3-11ed-9e49-dac502259ad0.png

量化效果非常好,精度只有一點(diǎn)下降,但是速度比FP32的提升了1.5倍左右(3050Ti)。

已知問(wèn)題與解決

量化過(guò)程遇到這個(gè)錯(cuò)誤

[09/22/2022-2313] [TRT] [I]   Calibrated batch 127 in 0.30856 seconds.[09/22/2022-2316] [TRT] [E] 2: [quantization.cpp::70] Error Code 2: Internal Error (Assertion min_ <= max_ failed. )[09/22/2022-2316] [TRT] [E] 2: [builder.cpp::619] Error Code 2: Internal Error (Assertion engine != nullptr failed. )Failed to create the engineTraceback (most recent call last):

解決方法,把Calibrator中g(shù)etBtach方法里面的代碼:

img = np.ascontiguousarray(img, dtype=np.float32)

to

img = np.ascontiguousarray(img, dtype=np.float16)

這樣就可以避免量化失敗。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 格式
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    16898
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3261

    瀏覽量

    48912
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1208

    瀏覽量

    24736

原文標(biāo)題:YOLOv5模型部署TensorRT之 FP32、FP16、INT8推理

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在GPU上使用TensorRT部署深度學(xué)習(xí)應(yīng)用程序

    本文未涉及的一個(gè)主題是在 TensorRT 中以 INT8 精度精確地執(zhí)行推理TensorRT 自動(dòng)轉(zhuǎn)換 FP32 網(wǎng)絡(luò)以進(jìn)行部署,同時(shí)降低精度損失。為了實(shí)現(xiàn)這一目標(biāo),
    的頭像 發(fā)表于 04-01 15:19 ?4968次閱讀
    如何在GPU上使用<b class='flag-5'>TensorRT</b>部署深度學(xué)習(xí)應(yīng)用程序

    全志XR806+TinyMaix,在全志XR806上實(shí)現(xiàn)ML推理

    ATmega328 (32KB Flash, 2KB Ram) 都能基于TinyMaix跑mnist(手寫(xiě)數(shù)字識(shí)別)支持INT8/FP32/FP16模型,實(shí)驗(yàn)性地支持FP8模型,支持keras h5或
    發(fā)表于 09-21 09:56

    推斷FP32模型格式的速度比CPU上的FP16模型格式快是為什么?

    在 CPU 上推斷出 FP32 模型格式和 FP16 模型格式。 FP32 模型格式的推斷速度比 FP16 模型格式快。 無(wú)法確定推斷 FP32
    發(fā)表于 08-15 08:03

    C++演示中的推理速度比Python演示中的推理速度更快是為什么?

    在同一主機(jī)機(jī)上采用相同型號(hào)的 Ran Object Detection C++ 演示 和 對(duì)象檢測(cè) Python 演示 。 C++ 演示中的推理速度比 Python
    發(fā)表于 08-15 06:52

    初次嘗試Tengine 適配 Ncnn FP32 模型

    初次嘗試Tengine 適配 Ncnn FP32 模型,相較于mnn,ncnn而言,這個(gè)框架對(duì)于多框架模型有著很好的支持性 – Caffe,Tensorflow,TF-Lite, M...
    發(fā)表于 02-07 11:16 ?0次下載
    初次嘗試Tengine 適配 Ncnn <b class='flag-5'>FP32</b> 模型

    NVIDIA TensorRT 8.2將推理速度提高6倍

      TensorRT 是一款高性能的深度學(xué)習(xí)推理優(yōu)化器和運(yùn)行時(shí),為人工智能應(yīng)用程序提供低延遲、高吞吐量推理。 TensorRT 用于醫(yī)療、汽車、制造、互聯(lián)網(wǎng)/電信服務(wù)、金融服務(wù)和能源等
    的頭像 發(fā)表于 03-31 17:10 ?1765次閱讀

    使用NVIDIA TensorRT優(yōu)化T5和GPT-2

    在這篇文章中,我們向您介紹了如何將擁抱臉 PyTorch T5 和 GPT-2 模型轉(zhuǎn)換為優(yōu)化的 TensorRT 推理引擎。 TensorRT 推理機(jī)用作原始 HuggingFace
    的頭像 發(fā)表于 03-31 17:25 ?3687次閱讀
    使用NVIDIA <b class='flag-5'>TensorRT</b>優(yōu)化T5和GPT-2

    NVIDIA TensorRT和DLA分析

      位于 GitHub 存儲(chǔ)庫(kù)中的sampleMNIST演示了如何導(dǎo)入經(jīng)過(guò)訓(xùn)練的模型、構(gòu)建 TensorRT 引擎、序列化和反序列化引擎,最后使用引擎執(zhí)行推理。
    的頭像 發(fā)表于 05-18 10:06 ?3088次閱讀

    NVIDIA T4 GPU和TensorRT提高微信搜索速度

    騰訊公司深耕模型量化開(kāi)發(fā),且長(zhǎng)期與 NVIDIA 團(tuán)隊(duì)合作,成功將深度學(xué)習(xí)模型精度從 FP32 壓縮到 FP16 以及 INT8。現(xiàn)在,該技術(shù)再次獲得了新的重要突破。騰訊團(tuán)隊(duì)利用全新設(shè)計(jì)的 QAT
    的頭像 發(fā)表于 06-27 14:34 ?1621次閱讀

    TensorRT 8.6 C++開(kāi)發(fā)環(huán)境配置與YOLOv8實(shí)例分割推理演示

    對(duì)YOLOv8實(shí)例分割TensorRT 推理代碼已經(jīng)完成C++類封裝,三行代碼即可實(shí)現(xiàn)YOLOv8對(duì)象檢測(cè)與實(shí)例分割模型推理,不需要改任何代碼即可支持自定義數(shù)據(jù)訓(xùn)練部署推理
    的頭像 發(fā)表于 04-25 10:49 ?5861次閱讀
    <b class='flag-5'>TensorRT</b> 8.6 C++開(kāi)發(fā)環(huán)境配置與YOLOv8實(shí)例分割<b class='flag-5'>推理</b><b class='flag-5'>演示</b>

    三種主流模型部署框架YOLOv8推理演示

    部署。這里以YOLOv8為例,演示了YOLOv8對(duì)象檢測(cè)模型在OpenVINO、ONNXRUNTIME、TensorRT三個(gè)主流框架上C++推理演示效果。
    的頭像 發(fā)表于 08-06 11:39 ?2765次閱讀

    邊緣生成人工智能推理技術(shù)面臨的挑戰(zhàn)有哪些

    雖然訓(xùn)練通常基于生成大量數(shù)據(jù)的 fp32fp64 浮點(diǎn)算法,但它不需要嚴(yán)格的延遲。功耗高,成本承受能力高。 相當(dāng)不同的是推理過(guò)程。推理通常在
    發(fā)表于 10-10 09:38 ?441次閱讀
    邊緣生成人工智能<b class='flag-5'>推理</b>技術(shù)面臨的挑戰(zhàn)有哪些

    Torch TensorRT是一個(gè)優(yōu)化PyTorch模型推理性能的工具

    那么,什么是Torch TensorRT呢?Torch是我們大家聚在一起的原因,它是一個(gè)端到端的機(jī)器學(xué)習(xí)框架。而TensorRT則是NVIDIA的高性能深度學(xué)習(xí)推理軟件工具包。Torch Te
    的頭像 發(fā)表于 01-09 16:41 ?1796次閱讀
    Torch <b class='flag-5'>TensorRT</b>是一個(gè)優(yōu)化PyTorch模型<b class='flag-5'>推理</b>性能的工具

    TensorRT-LLM低精度推理優(yōu)化

    本文將分享 TensorRT-LLM 中低精度量化內(nèi)容,并從精度和速度角度對(duì)比 FP8 與 INT8。首先介紹性能,包括速度和精度。其次,介紹量化工具 NVIDIA TensorRT Model
    的頭像 發(fā)表于 11-19 14:29 ?339次閱讀
    <b class='flag-5'>TensorRT</b>-LLM低精度<b class='flag-5'>推理</b>優(yōu)化

    解鎖NVIDIA TensorRT-LLM的卓越性能

    NVIDIA TensorRT-LLM 是一個(gè)專為優(yōu)化大語(yǔ)言模型 (LLM) 推理而設(shè)計(jì)的庫(kù)。它提供了多種先進(jìn)的優(yōu)化技術(shù),包括自定義 Attention Kernel、Inflight
    的頭像 發(fā)表于 12-17 17:47 ?194次閱讀