前言
上一篇博客給大家介紹了LabVIEW開(kāi)放神經(jīng)網(wǎng)絡(luò)交互工具包【ONNX】 ,今天我們就一起來(lái)看一下如何使用LabVIEW開(kāi)放神經(jīng)網(wǎng)絡(luò)交互工具包實(shí)現(xiàn)TensorRT加速YOLOv5。
以下是YOLOv5的相關(guān)筆記總結(jié),希望對(duì)大家有所幫助。
內(nèi)容 | 地址鏈接 |
---|---|
【YOLOv5】LabVIEW+OpenVINO讓你的YOLOv5在CPU上飛起來(lái) | https://blog.csdn.net/virobotics/article/details/124951862 |
【YOLOv5】LabVIEW OpenCV dnn快速實(shí)現(xiàn)實(shí)時(shí)物體識(shí)別(Object Detection) | https://blog.csdn.net/virobotics/article/details/124929483 |
一、TensorRT簡(jiǎn)介
TensorRT是一個(gè)高性能的深度學(xué)習(xí)推理(Inference)優(yōu)化器,可以為深度學(xué)習(xí)應(yīng)用提供低延遲、高吞吐率的部署推理。TensorRT可用于對(duì)超大規(guī)模數(shù)據(jù)中心、嵌入式平臺(tái)或自動(dòng)駕駛平臺(tái)進(jìn)行推理加速。TensorRT現(xiàn)已能支持TensorFlow、Caffe、Mxnet、Pytorch等幾乎所有的深度學(xué)習(xí)框架,將TensorRT和NVIDIA的GPU結(jié)合起來(lái),能在幾乎所有的框架中進(jìn)行快速和高效的部署推理。主要用來(lái)針對(duì) NVIDIA GPU進(jìn)行 高性能推理(Inference)加速。
通常我們做項(xiàng)目,在部署過(guò)程中想要加速,無(wú)非就那么幾種辦法,如果我們的設(shè)備是CPU,那么可以用openvion,如果我們希望能夠使用GPU,那么就可以嘗試TensorRT了。那么為什么要選擇TensorRT呢?因?yàn)槲覀兡壳爸饕褂玫倪€是Nvidia的計(jì)算設(shè)備,TensorRT本身就是Nvidia自家的東西,那么在Nvidia端的話肯定要用Nvidia親兒子了。
不過(guò)因?yàn)門(mén)ensorRT的入門(mén)門(mén)檻略微有些高,直接勸退了想要入坑的玩家。其中一部分原因是官方文檔比較雜亂;另一部分原因就是TensorRT比較底層,需要一點(diǎn)點(diǎn)C++和硬件方面的知識(shí),學(xué)習(xí)難度會(huì)更高一點(diǎn)。我們做的****開(kāi)放神經(jīng)網(wǎng)絡(luò)交互工具包GPU版本 , 在GPU上做推理時(shí),ONNXRuntime可采用CUDA作為后端進(jìn)行加速,要更快速可以切換到TensorRT ,雖然和純TensorRT推理速度比還有些差距,但也十分快了。如此可以大大降低開(kāi)發(fā)難度,能夠更快更好的進(jìn)行推理。。
二、準(zhǔn)備工作
按照 LabVIEW開(kāi)放神經(jīng)網(wǎng)絡(luò)交互工具包(ONNX)下載與超詳細(xì)安裝教程 安裝所需軟件,因本篇博客主要給大家介紹如何使用TensorRT加速YOLOv5,所以建議大家安裝GPU版本的onnx工具包,否則無(wú)法實(shí)現(xiàn)TensorRT的加速 。
三、YOLOv5模型的獲取
為方便使用, 博主已經(jīng)將yolov5模型轉(zhuǎn)化為onnx格式 ,可在百度網(wǎng)盤(pán)下載**
**鏈接:https://pan.baidu.com/s/15dwoBM4W-5_nlRj4G9EhRg?pwd=yiku
**提取碼:yiku **
1.下載源碼
將Ultralytics開(kāi)源的YOLOv5代碼Clone或下載到本地,可以直接點(diǎn)擊Download ZIP進(jìn)行下載,
下載地址: https://github.com/ultralytics/yolov5
2.安裝模塊
解壓剛剛下載的zip文件,然后安裝yolov5需要的模塊,記住cmd的工作路徑要在yolov5文件夾下:
打開(kāi)cmd切換路徑到y(tǒng)olov5文件夾下,并輸入如下指令,安裝yolov5需要的模塊
pip install -r requirements.txt
3.下載預(yù)訓(xùn)練模型
打開(kāi)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框架實(shí)現(xiàn)的,因此opencv的dnn模塊做目標(biāo)檢測(cè)時(shí),讀取的是.cfg和.weight文件,非常方便。但是yolov5的官方代碼是基于pytorch框架實(shí)現(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()中的第二個(gè)try注釋掉,即如下部分注釋?zhuān)?/strong>
'''
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)'''
并新增一個(gè)函數(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,實(shí)現(xiàn)實(shí)時(shí)物體識(shí)別(yolov5_new_onnx.vi)
1.LabVIEW調(diào)用YOLOv5源碼
2.識(shí)別結(jié)果
選擇加速方式為:TensorRT
使用TensorRT加速,實(shí)時(shí)檢測(cè)推理用時(shí)為****20~30ms/frame ,比單純使用cuda加速快了30%,同時(shí)沒(méi)有丟失任何的精度。博主使用的電腦顯卡為1060顯卡,各位如果使用30系列的顯卡,速度應(yīng)該會(huì)更快。**
**
可關(guān)注微信公眾號(hào):VIRobotics ,回復(fù)關(guān)鍵詞:yolov5_onnx ,進(jìn)行源碼下載
五、純CPU下opencv dnn和onnx工具包加載YOLOv5實(shí)現(xiàn)實(shí)時(shí)物體識(shí)別推理用時(shí)對(duì)比
1、opencv dnn cpu下YOLOv5推理速度為:300ms左右/frame
2、onnx工具包c(diǎn)pu下YOLOv5推理速度為:200ms左右/frame
對(duì)比我們發(fā)現(xiàn),同樣使用cpu進(jìn)行推理,onnx工具包推理速度要比opencv dnn推理速度快30%左右。
附加說(shuō)明:計(jì)算機(jī)環(huán)境
- 操作系統(tǒng):Windows10
- python:3.6及以上
- LabVIEW:2018及以上 64位版本
- 視覺(jué)工具包:virobotics_lib_onnx_cuda_tensorrt-1.0.0.11以上版本
總結(jié)
以上就是今天要給大家分享的內(nèi)容。大家可根據(jù)鏈接下載相關(guān)源碼與模型。
如果文章對(duì)你有幫助,歡迎關(guān)注、點(diǎn)贊、收藏
審核編輯 黃宇
-
LabVIEW
+關(guān)注
關(guān)注
1971文章
3654瀏覽量
323658 -
人工智能
+關(guān)注
關(guān)注
1791文章
47279瀏覽量
238511 -
目標(biāo)檢測(cè)
+關(guān)注
關(guān)注
0文章
209瀏覽量
15611 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121170
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論