RM新时代网站-首页

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

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

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

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

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

前言

前面我們給大家介紹了基于LabVIEW+YOLOv3/YOLOv4的物體識別(對象檢測),今天接著上次的內(nèi)容再來看看YOLOv5。本次主要是和大家分享使用LabVIEW快速實現(xiàn)yolov5的物體識別, 本博客中使用的智能工具包可到主頁置頂博客LabVIEW AI視覺工具包(非NI Vision)下載與安裝教程中下載 。若配置運行過程中遇到困難,歡迎大家評論區(qū)留言,博主將盡力解決。

一、關(guān)于YOLOv5

YOLOv5是在 COCO 數(shù)據(jù)集上預(yù)訓(xùn)練的一系列對象檢測架構(gòu)和模型。表現(xiàn)要優(yōu)于谷歌開源的目標(biāo)檢測框架 EfficientDet,在檢測精度和速度上相比yolov4都有較大的提高。目前YOLOv5官方代碼中,最新版本是YOLOv5 v6.1,一共給出了5個版本的模型,分別是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五個模型(如下圖所示)。這些不同的變體模型使得YOLOv5能很好的在精度和速度中權(quán)衡,方便用戶選擇。其中五個模型性能依次增強。比如YOLOv5n模型參數(shù)量最小,速度最快,AP精度最低;YOLOv5x模型參數(shù)量最大,速度最慢,AP精度最高。本博客,我們以YOLOv5最新版本來介紹相關(guān)的部署開發(fā)。

YOLOv5相比于前面yolo模型的主要特點是:

1、小目標(biāo)的檢測精度上有明顯的提高;

2、能自適應(yīng)錨框計算

3、具有數(shù)據(jù)增強功能,隨機縮放,裁剪,拼接等功能

4、靈活性極高、速度超快,模型超小、在模型的快速部署上具有極強優(yōu)勢

關(guān)于YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)解釋網(wǎng)上有很多,這里就不再贅述了,大家可以看其他大神對于YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)的解析。

二、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'
{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+'
')
    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可替換為yolov5myolov5myolov5lyolov5x

在這里插入圖片描述

三、LabVIEW調(diào)用YOLOv5模型實現(xiàn)實時物體識別(yolov5_new_opencv.vi)

本例中使用LabvVIEW工具包中opencv的dnn模塊readNetFromONNX()載入onnx模型,可選擇使用cuda進(jìn)行推理加速。

1.查看模型

我們可以使用netron 查看yolov5m.onnx的網(wǎng)絡(luò)結(jié)構(gòu),瀏覽器中輸入鏈接: https://netron.app/,點擊Open Model,打開相應(yīng)的網(wǎng)絡(luò)模型文件即可。**

**在這里插入圖片描述

如下圖所示是轉(zhuǎn)換之后的yolov5m.onnx的屬性:

在這里插入圖片描述

2.參數(shù)及輸出

blobFromImage參數(shù):

size:640*640

Scale=1/255

Means=[0,0,0]

Net.forward()輸出:

**單數(shù)組 25200*85 **

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

如下圖所示,調(diào)用攝像頭實現(xiàn)實時物體識別

在這里插入圖片描述

4.LabVIEW調(diào)用YOLOv5實時物體識別結(jié)果

本次我們是以yolov5m.onnx為例來測試識別結(jié)果和速度的;

**不使用GPU加速,僅在CPU模式下,實時檢測推理用時在300ms/frame左右

在這里插入圖片描述

使用GPU加速,實時檢測推理用時為****30~40ms/frame ,是cpu速度的十倍多**

如需源碼,請關(guān)注微信公眾號:VIRobotics?;貜?fù)關(guān)鍵字“yolov5”。

**在這里插入圖片描述

審核編輯 黃宇

以上就是今天要給大家分享的內(nèi)容,本次分享內(nèi)容實驗環(huán)境說明:操作系統(tǒng)為Windows10,python版本為3.6及以上,LabVIEW為2018及以上 64位版本,視覺工具包為博客開頭提到的工具包。

如果文章對你有幫助,歡迎關(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

    瀏覽量

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

    關(guān)注

    0

    文章

    209

    瀏覽量

    15605
  • 物體識別
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    7500
收藏 人收藏

    評論

    相關(guān)推薦

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

    今天我們就一起來看一下如何使用LabVIEW開放神經(jīng)網(wǎng)絡(luò)交互工具包實現(xiàn)TensorRT加速YOLOv5
    的頭像 發(fā)表于 03-20 16:36 ?2651次閱讀
    手把手教你使用<b class='flag-5'>LabVIEW</b> ONNX Runtime部署 TensorRT加速,<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>YOLOv5</b><b class='flag-5'>實時</b><b class='flag-5'>物體</b><b class='flag-5'>識別</b>

    Yolov5算法解讀

    yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不斷進(jìn)行升級迭代。 Yolov5YOLOv5s、YOLOv5
    的頭像 發(fā)表于 05-17 16:38 ?9024次閱讀
    <b class='flag-5'>Yolov5</b>算法解讀

    YOLOv5LabVIEW+TensorRT的yolov5部署實戰(zhàn)(源碼

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

    基于迅為RK3588【RKNPU2項目實戰(zhàn)1】:YOLOV5實時目標(biāo)分類

    [/url] 【RKNPU2 人工智能開發(fā)】 【AI深度學(xué)習(xí)推理加速器】——RKNPU2 從入門到實踐(基于RK3588和RK3568) 【RKNPU2項目實戰(zhàn)1】:YOLOV5實時目標(biāo)分類 【RKNPU2項目實戰(zhàn)2】:SORT目標(biāo)追蹤 【RKNPU2項目實戰(zhàn)3】車牌
    發(fā)表于 08-15 10:51

    在RK3568教學(xué)實驗箱上實現(xiàn)基于YOLOV5的算法物體識別案例詳解

    一、實驗?zāi)康?本節(jié)視頻的目的是了解YOLOv5模型的用途及流程,并掌握基于YOLOV5算法實現(xiàn)物體識別的方法。 二、實驗原理 YOLO(Yo
    發(fā)表于 12-03 14:56

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

    vi7.Labview調(diào)用yolov5模型進(jìn)行攝像頭實時檢測學(xué)習(xí)本課程后,你可以獲得:1. 快速掌握yolov5
    發(fā)表于 09-03 09:39

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

    在Python>=3.7.0環(huán)境中安裝requirements.txt,包括PyTorch>=1.7。模型和數(shù)據(jù)集從最新的 YOLOv5版本自動下載。簡單示例此示例從
    發(fā)表于 07-22 16:02

    如何YOLOv5測試代碼?

    使用文檔“使用 YOLOv5 進(jìn)行對象檢測”我試圖從文檔第 10 頁訪問以下鏈接(在 i.MX8MP 上部署 yolov5s 的步驟 - NXP 社區(qū)) ...但是這樣做時會被拒絕訪問。該文檔沒有說明需要特殊許可才能下載 test.zip 文件。NXP 的人可以提供有關(guān)如
    發(fā)表于 05-18 06:08

    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可以無法識別出結(jié)果。(轉(zhuǎn)化成功,結(jié)果沒有)
    發(fā)表于 09-15 07:30

    基于YOLOv5的目標(biāo)檢測文檔進(jìn)行的時候出錯如何解決?

    你好: 按Milk-V Duo開發(fā)板實戰(zhàn)——基于YOLOv5的目標(biāo)檢測 安裝好yolov5環(huán)境,在執(zhí)行main.py的時候會出錯,能否幫忙看下 main.py: import torch
    發(fā)表于 09-18 07:47

    在C++中使用OpenVINO工具包部署YOLOv5模型

    下載并轉(zhuǎn)換YOLOv5預(yù)訓(xùn)練模型的詳細(xì)步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優(yōu)化并部署YOLOv5模型》,本文所使用的OpenVINO是2022.3 LTS版。
    的頭像 發(fā)表于 02-15 16:53 ?4646次閱讀

    使用旭日X3派的BPU部署Yolov5

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

    淺析基于改進(jìn)YOLOv5的輸電線路走廊滑坡災(zāi)害識別

    本文以YOLOv5網(wǎng)絡(luò)模型為基礎(chǔ),提出一種改進(jìn)YOLOv5YOLOv5-BC)深度學(xué)習(xí)滑坡災(zāi)害識別方法,將原有的PANet層替換為BiFPN結(jié)構(gòu),提高網(wǎng)絡(luò)多層特征融合能力
    的頭像 發(fā)表于 05-17 17:50 ?1230次閱讀
    淺析基于改進(jìn)<b class='flag-5'>YOLOv5</b>的輸電線路走廊滑坡災(zāi)害<b class='flag-5'>識別</b>

    yolov5和YOLOX正負(fù)樣本分配策略

    整體上在正負(fù)樣本分配中,yolov7的策略算是yolov5和YOLOX的結(jié)合。因此本文先從yolov5和YOLOX正負(fù)樣本分配策略分析入手,后引入到YOLOv7的解析中。
    發(fā)表于 08-14 11:45 ?2266次閱讀
    <b class='flag-5'>yolov5</b>和YOLOX正負(fù)樣本分配策略

    什么是YOLO?RK3568+YOLOv5是如何實現(xiàn)物體識別的?一起來了解一下!

    、掌握基于YOLOV5算法實現(xiàn)物體識別的方法。三、實驗原理YOLOYOLO(YouOnlyLookOnce)v5是一種非常流行的
    的頭像 發(fā)表于 12-19 19:04 ?58次閱讀
    什么是YOLO?RK3568+<b class='flag-5'>YOLOv5</b>是如何<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>物體</b><b class='flag-5'>識別</b>的?一起來了解一下!
    RM新时代网站-首页