RM新时代网站-首页

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

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

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

手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,實現(xiàn)YOLOv5實時物體識別

LabVIEW深度學(xué)習(xí)實戰(zhàn) ? 來源:LabVIEW深度學(xué)習(xí)實戰(zhàn) ? 作者:LabVIEW深度學(xué)習(xí)實戰(zhàn) ? 2023-03-20 16:36 ? 次閱讀

前言

上一篇博客給大家介紹了LabVIEW開放神經(jīng)網(wǎng)絡(luò)交互工具包【ONNX】 ,今天我們就一起來看一下如何使用LabVIEW開放神經(jīng)網(wǎng)絡(luò)交互工具包實現(xiàn)TensorRT加速YOLOv5。

以下是YOLOv5的相關(guān)筆記總結(jié),希望對大家有所幫助。

內(nèi)容 地址鏈接
【YOLOv5】LabVIEW+OpenVINO讓你的YOLOv5在CPU上飛起來 https://blog.csdn.net/virobotics/article/details/124951862
【YOLOv5】LabVIEW OpenCV dnn快速實現(xiàn)實時物體識別(Object Detection) https://blog.csdn.net/virobotics/article/details/124929483

一、TensorRT簡介

TensorRT是一個高性能的深度學(xué)習(xí)推理(Inference)優(yōu)化器,可以為深度學(xué)習(xí)應(yīng)用提供低延遲、高吞吐率的部署推理。TensorRT可用于對超大規(guī)模數(shù)據(jù)中心、嵌入式平臺或自動駕駛平臺進(jìn)行推理加速。TensorRT現(xiàn)已能支持TensorFlow、Caffe、Mxnet、Pytorch等幾乎所有的深度學(xué)習(xí)框架,將TensorRT和NVIDIA的GPU結(jié)合起來,能在幾乎所有的框架中進(jìn)行快速和高效的部署推理。主要用來針對 NVIDIA GPU進(jìn)行 高性能推理(Inference)加速。

在這里插入圖片描述

通常我們做項目,在部署過程中想要加速,無非就那么幾種辦法,如果我們的設(shè)備是CPU,那么可以用openvion,如果我們希望能夠使用GPU,那么就可以嘗試TensorRT了。那么為什么要選擇TensorRT呢?因為我們目前主要使用的還是Nvidia的計算設(shè)備,TensorRT本身就是Nvidia自家的東西,那么在Nvidia端的話肯定要用Nvidia親兒子了。

不過因為TensorRT的入門門檻略微有些高,直接勸退了想要入坑的玩家。其中一部分原因是官方文檔比較雜亂;另一部分原因就是TensorRT比較底層,需要一點點C++硬件方面的知識,學(xué)習(xí)難度會更高一點。我們做的****開放神經(jīng)網(wǎng)絡(luò)交互工具包GPU版本 , 在GPU上做推理時,ONNXRuntime可采用CUDA作為后端進(jìn)行加速,要更快速可以切換到TensorRT ,雖然和純TensorRT推理速度比還有些差距,但也十分快了。如此可以大大降低開發(fā)難度,能夠更快更好的進(jìn)行推理。。

二、準(zhǔn)備工作

按照 LabVIEW開放神經(jīng)網(wǎng)絡(luò)交互工具包(ONNX)下載與超詳細(xì)安裝教程 安裝所需軟件,因本篇博客主要給大家介紹如何使用TensorRT加速YOLOv5,所以建議大家安裝GPU版本的onnx工具包,否則無法實現(xiàn)TensorRT的加速 。

三、YOLOv5模型的獲取

為方便使用, 博主已經(jīng)將yolov5模型轉(zhuǎn)化為onnx格式 ,可在百度網(wǎng)盤下載**

**鏈接:https://pan.baidu.com/s/15dwoBM4W-5_nlRj4G9EhRg?pwd=yiku

**提取碼:yiku **

1.下載源碼

將Ultralytics開源的YOLOv5代碼Clone或下載到本地,可以直接點擊Download ZIP進(jìn)行下載,

下載地址: https://github.com/ultralytics/yolov5

在這里插入圖片描述

2.安裝模塊

解壓剛剛下載的zip文件,然后安裝yolov5需要的模塊,記住cmd的工作路徑要在yolov5文件夾下:

在這里插入圖片描述

打開cmd切換路徑到y(tǒng)olov5文件夾下,并輸入如下指令,安裝yolov5需要的模塊

pip install -r requirements.txt

3.下載預(yù)訓(xùn)練模型

打開cmd,進(jìn)入python環(huán)境,使用如下指令下載預(yù)訓(xùn)練模型:

import torch
?
# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5n - yolov5x6, custom
?

成功下載后如下圖所示:

在這里插入圖片描述

4.轉(zhuǎn)換為onnx模型

在yolov5之前的yolov3和yolov4的官方代碼都是基于darknet框架實現(xiàn)的,因此opencv的dnn模塊做目標(biāo)檢測時,讀取的是.cfg和.weight文件,非常方便。但是yolov5的官方代碼是基于pytorch框架實現(xiàn)的。需要先把pytorch的訓(xùn)練模型.pt文件轉(zhuǎn)換到.onnx文件,然后才能載入到opencv的dnn模塊里。

將.pt文件轉(zhuǎn)化為.onnx文件,主要是參考了nihate大佬的博客: https://blog.csdn.net/nihate/article/details/112731327

將export.py做如下修改,將def export_onnx()中的第二個try注釋掉,即如下部分注釋:

'''
    try:
        check_requirements(('onnx',))
        import onnx
?
        LOGGER.info(f'\\n{prefix} starting export with onnx {onnx.__version__}...')
        f = file.with_suffix('.onnx')
        print(f)
?
        torch.onnx.export(
            model,
            im,
            f,
            verbose=False,
            opset_version=opset,
            training=torch.onnx.TrainingMode.TRAINING if train else torch.onnx.TrainingMode.EVAL,
            do_constant_folding=not train,
            input_names=['images'],
            output_names=['output'],
            dynamic_axes={
                'images': {
                    0: 'batch',
                    2: 'height',
                    3: 'width'},  # shape(1,3,640,640)
                'output': {
                    0: 'batch',
                    1: 'anchors'}  # shape(1,25200,85)
            } if dynamic else None)
?
        # Checks
        model_onnx = onnx.load(f)  # load onnx model
        onnx.checker.check_model(model_onnx)  # check onnx model
?
        # Metadata
        d = {'stride': int(max(model.stride)), 'names': model.names}
        for k, v in d.items():
            meta = model_onnx.metadata_props.add()
            meta.key, meta.value = k, str(v)
        onnx.save(model_onnx, f)'''

并新增一個函數(shù)def my_export_onnx():

def my_export_onnx(model, im, file, opset, train, dynamic, simplify, prefix=colorstr('ONNX:')):
    print('anchors:', model.yaml['anchors'])
    wtxt = open('class.names', 'w')
    for name in model.names:
        wtxt.write(name+'\\n')
    wtxt.close()
    # YOLOv5 ONNX export
    print(im.shape)
    if not dynamic:
        f = os.path.splitext(file)[0] + '.onnx'
        torch.onnx.export(model, im, f, verbose=False, opset_version=12, input_names=['images'], output_names=['output'])
    else:
        f = os.path.splitext(file)[0] + '_dynamic.onnx'
        torch.onnx.export(model, im, f, verbose=False, opset_version=12, input_names=['images'],
                          output_names=['output'], dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'},  # shape(1,3,640,640)
                                        'output': {0: 'batch', 1: 'anchors'}  # shape(1,25200,85)
                                        })
    return f

在cmd中輸入轉(zhuǎn)onnx的命令(記得將export.py和pt模型放在同一路徑下):

python export.py --weights yolov5s.pt --include onnx

如下圖所示為轉(zhuǎn)化成功界面

在這里插入圖片描述

其中yolov5s可替換為yolov5m\\yolov5m\\yolov5l\\yolov5x

在這里插入圖片描述

四、LabVIEW使用TensorRT加速YOLOv5,實現(xiàn)實時物體識別(yolov5_new_onnx.vi)

1.LabVIEW調(diào)用YOLOv5源碼

在這里插入圖片描述

2.識別結(jié)果

選擇加速方式為:TensorRT

在這里插入圖片描述

使用TensorRT加速,實時檢測推理用時為****20~30ms/frame ,比單純使用cuda加速快了30%,同時沒有丟失任何的精度。博主使用的電腦顯卡為1060顯卡,各位如果使用30系列的顯卡,速度應(yīng)該會更快。**

**在這里插入圖片描述

可關(guān)注微信公眾號:VIRobotics ,回復(fù)關(guān)鍵詞:yolov5_onnx ,進(jìn)行源碼下載

五、純CPU下opencv dnn和onnx工具包加載YOLOv5實現(xiàn)實時物體識別推理用時對比

1、opencv dnn cpu下YOLOv5推理速度為:300ms左右/frame

在這里插入圖片描述

2、onnx工具包cpu下YOLOv5推理速度為:200ms左右/frame

在這里插入圖片描述

對比我們發(fā)現(xiàn),同樣使用cpu進(jìn)行推理,onnx工具包推理速度要比opencv dnn推理速度快30%左右。

附加說明:計算機環(huán)境

  • 操作系統(tǒng):Windows10
  • python:3.6及以上
  • LabVIEW:2018及以上 64位版本
  • 視覺工具包:virobotics_lib_onnx_cuda_tensorrt-1.0.0.11以上版本

總結(jié)

以上就是今天要給大家分享的內(nèi)容。大家可根據(jù)鏈接下載相關(guān)源碼與模型。

如果文章對你有幫助,歡迎關(guān)注、點贊、收藏

審核編輯 黃宇

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

    關(guān)注

    1970

    文章

    3654

    瀏覽量

    323313
  • 人工智能
    +關(guān)注

    關(guān)注

    1791

    文章

    47183

    瀏覽量

    238247
  • 目標(biāo)檢測
    +關(guān)注

    關(guān)注

    0

    文章

    209

    瀏覽量

    15605
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5500

    瀏覽量

    121111
收藏 人收藏

    評論

    相關(guān)推薦

    YOLOv5LabVIEW+YOLOv5快速實現(xiàn)實時物體識別(Object Detection)含源碼

    前面我們給大家介紹了基于LabVIEW+YOLOv3/YOLOv4的物體識別(對象檢測),今天接著上次的內(nèi)容再來看看YOLOv5。本次主要是
    的頭像 發(fā)表于 03-13 16:01 ?2154次閱讀

    YOLOv5LabVIEW+TensorRTyolov5部署實戰(zhàn)(含源碼)

    今天主要和大家分享在LabVIEW中使用純TensoRT工具包快速部署實現(xiàn)yolov5物體識別
    的頭像 發(fā)表于 08-21 22:20 ?1316次閱讀
    【<b class='flag-5'>YOLOv5</b>】<b class='flag-5'>LabVIEW+TensorRT</b>的<b class='flag-5'>yolov5</b><b class='flag-5'>部署</b>實戰(zhàn)(含源碼)

    yolov5轉(zhuǎn)onnx在cubeAI上部署失敗的原因?

    第一個我是轉(zhuǎn)onnx時 想把權(quán)重文件變小點 就用了半精度 --half,則說17版本不支持半精度 后面則是沒有縮小的單精度 但是顯示哪里溢出了···· 也不說是哪里、、。。。 到底能不能部署yolov5這種東西啊?? 也沒看見
    發(fā)表于 03-14 06:23

    【匯總篇】小草手把手教你 LabVIEW 串口儀器控制

    `課程推薦>>《每天1小時,龍哥手把手教您LabVIEW視覺設(shè)計》[hide]小草手把手教你 LabVIEW 串口儀器控制—生成
    發(fā)表于 02-04 10:45

    【視頻匯總】小草大神手把手教你Labview技巧及源代碼分享

    點擊學(xué)習(xí)>>《龍哥手把手教你學(xué)LabVIEW視覺設(shè)計》視頻教程原創(chuàng)視頻教程小草手把手教你LabVIEW
    發(fā)表于 05-26 13:48

    手把手教你LabVIEW儀器控制

    手把手教你LabVIEW儀器控制,串口學(xué)習(xí)
    發(fā)表于 12-11 12:00

    龍哥手把手教你學(xué)視覺-深度學(xué)習(xí)YOLOV5

    logo標(biāo)識案例 231、 注意事項?龍哥手把手教你學(xué)視覺-LabVIEW深度學(xué)習(xí)簡明教程,分為【tensorflow篇】+【yolov4篇】+【Y
    發(fā)表于 09-03 09:39

    怎樣使用PyTorch Hub去加載YOLOv5模型

    使用 PyTorch Hub 加載自定義 20 類VOC訓(xùn)練的YOLOv5s 模型'best.pt'。TensorRT、ONNX 和 OpenVINO 模型PyTorch Hub 支持對大多數(shù)
    發(fā)表于 07-22 16:02

    yolov5轉(zhuǎn)onnx在cubeAI進(jìn)行部署的時候失敗了是什么原因造成的?

    第一個我是轉(zhuǎn)onnx時 想把權(quán)重文件變小點 就用了半精度 --half,則說17版本不支持半精度 后面則是沒有縮小的單精度 但是顯示哪里溢出了···· 也不說是哪里、 到底能不能部署yolov5這種東西啊?? 也沒看見幾個
    發(fā)表于 08-08 07:55

    yolov5模型onnx轉(zhuǎn)bmodel無法識別出結(jié)果如何解決?

    問題描述: 1. yolov5模型pt轉(zhuǎn)bmodel可以識別出結(jié)果。(轉(zhuǎn)化成功,結(jié)果正確) 2. yolov5模型pt轉(zhuǎn)onnx轉(zhuǎn)bmodel可以無法
    發(fā)表于 09-15 07:30

    美女手把手教你如何裝機(下)

    美女手把手教你如何裝機(下) 接著下來就是今天的重頭戲,開核蘿!~
    發(fā)表于 01-27 11:16 ?2923次閱讀

    小草手把手教你LabVIEW儀器控制V1.0

    小草手把手教你LabVIEW儀器控制V1.0 ,感興趣的小伙伴們可以看看。
    發(fā)表于 08-03 17:55 ?95次下載

    手把手教你如何開始DSP編程

    手把手教你如何開始DSP編程。
    發(fā)表于 04-09 11:54 ?12次下載
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>如何開始DSP編程

    手把手教你學(xué)LabVIEW視覺設(shè)計

    手把手教你學(xué)LabVIEW視覺設(shè)計手把手教你學(xué)LabVIEW視覺設(shè)計
    發(fā)表于 03-06 01:41 ?3129次閱讀

    使用旭日X3派的BPU部署Yolov5

    本次主要介紹在旭日x3的BPU中部署yolov5。首先在ubuntu20.04安裝yolov5,并運行yolov5并使用pytoch的pt模型文件轉(zhuǎn)
    的頭像 發(fā)表于 04-26 14:20 ?882次閱讀
    使用旭日X3派的BPU<b class='flag-5'>部署</b><b class='flag-5'>Yolov5</b>
    RM新时代网站-首页