DeepStream5.0系列之yolov5使用
0 背景
本文旨在對(duì) deepstream 中使用 yolov5 的方法做一介紹
測(cè)試環(huán)境: Ubuntu 18.04, CUDA 10.2, T4, jetpack4.4
軟件版本:yolov5:3.0,3.1
項(xiàng)目地址:https://github.com/DanaHan/Yolov5-in-Deepstream-5.0
1 安裝流程
1.1 創(chuàng)建 conda 環(huán)境
Tips:如果是在 jetson 設(shè)備上,可以不用創(chuàng)建 conda 虛擬環(huán)境
1.2 下載源碼
mkdir deepstream_yolov5 cd deepstream_yolov5 git clone https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git git clone https://github.com/wang-xinyu/tensorrtx.git git clone https://github.com/ultralytics/yolov5.git1.3 安裝環(huán)境
注意:這塊實(shí)測(cè) 3.0 版本和 3.1 版本的沒有問題,最新的 4.0 版本可能會(huì)有檢測(cè)框問題
2 模型準(zhǔn)備
2.1 下載預(yù)訓(xùn)練模型
在 yolov5 界面下載預(yù)訓(xùn)練模型(3.1版本模型),這里我們以 YOLOv5x 為例介紹
地址:https://github.com/ultralytics/yolov5
下載好模型后放到 yolov5/weights 目錄下
2.2 生成 engine
cd yolov5 cp ../tensorrtx/yolov5/gen_wts.py ./修改 gen_wts.py 中的模型名稱,需要根據(jù)自己用的模型做對(duì)應(yīng)修改,主要是第8行和第11行
import torch import struct from utils.torch_utils import select_device# Initialize device = select_device('cpu') # Load model model = torch.load('weights/yolov5x.pt', map_location=device)['model'].float() # load to FP32 model.to(device).eval()f = open('yolov5x.wts', 'w') f.write('{}\n'.format(len(model.state_dict().keys()))) for k, v in model.state_dict().items():vr = v.reshape(-1).cpu().numpy()f.write('{} {} '.format(k, len(vr)))for vv in vr:f.write(' ')f.write(struct.pack('>f',float(vv)).hex())f.write('\n')運(yùn)行后會(huì)在本地生成 yolov5x.wts 文件,然后拷貝到 Yolov5-in-Deepstream-5.0 文件夾中
cp yolov5x.wts ../Yolov5-in-Deepstream-5.0 cd ../Yolov5-in-Deepstream-5.0修改 yolov5.cpp 文件,將 NET 宏改成自己對(duì)應(yīng)的模型
#define NET x // s m l x
然后編譯
運(yùn)行后會(huì)生成 yolov5x.engine 和 libmyplugin.so 文件,首先檢查下engine運(yùn)行結(jié)果是否正確
創(chuàng)建測(cè)試圖片
mkdir …/samples
網(wǎng)上下載兩張 coco 數(shù)據(jù)集圖片
sudo ./yolov5 -d ../samples輸出如下
[11/02/2020-15:08:27] [W] [TRT] Current optimization profile is: 0. Please ensure there are no enqueued operations pending in this context prior to switching profiles
9ms
8ms
并且可以在build目錄下生成檢測(cè)結(jié)果圖片,格式是_name.jpg,打開圖片可以看到檢測(cè)框正常
驗(yàn)證完畢后,將生成的模型和動(dòng)態(tài)庫拷貝到 deepstream 目錄中
cp yolov5x.engine ../Deepstream\ 5.0/ cp libmyplugins.so ../Deepstream\ 5.0/3 deepstream部署
在 Deepstream 5.0/nvdsinfer_custom_impl_Yolo 目錄中運(yùn)行 make 編譯,生成 libnvdsinfer_custom_impl_Yolo.so 文件
返回上一級(jí),修改 config_infer_primary_yoloV5.txt 文件,總共有以下幾處需要修改
model-engine-file=yolov5s.engine --> model-engine-file=yolov5x.engine
custom-lib-path=objectDetector_Yolo_V5/nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so --> custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so
原工程中缺少 labels.txt 文件,把 coco 數(shù)據(jù)集的 80 類 labels 拷貝過來即可
然后根據(jù)自己的需求,修改 deepstream_app_config_yoloV5.txt 即可
然后載入定制化的動(dòng)態(tài)庫,并運(yùn)行即可
LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt會(huì)重新生成 engine 文件,并可以看到運(yùn)行結(jié)果
注意,engine 文件要在 Yolov5-in-Deepstream-5.0 工程中生成,在 tensorrtx 工程中生成 engine 再導(dǎo)過來運(yùn)行會(huì)出現(xiàn)一大堆框
————————————————
版權(quán)聲明:本文為CSDN博主「ZONG_XP」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zong596568821xp/article/details/109444343
附相關(guān)資源文件(包含labels.txt、yolov5s.wts、libmyplugins.so、yolov5s.engine):
https://download.csdn.net/download/qq_42393859/16061529
總結(jié)
以上是生活随笔為你收集整理的DeepStream5.0系列之yolov5使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51单片机入门学习 第八天
- 下一篇: 计算机页面新建,电脑PS如何新建多个画布