YOLOv5 在最新 OpenVINO 2021R02 版本的部署與程式碼演示詳解
YOLOv5 在 OpenVINO 上的部署,網上有很多 python 版本的程式碼,但是基本都有個很內傷的問題,就是還在用 pytorch 的一些庫做解析,C++的程式碼有個更大的內傷就是自定義解析解釋的不是很清楚,所以本人閱讀 YOLOv5 的 pytorch 程式碼推理部分,從原始的三個輸出層解析實現了 boxes, classes, nms 等關鍵 C++ 程式碼輸出,實現了純 OpenVINO+OpenCV 版本的 YOLOv5s 模型推理的程式碼演示。下面就是詳細的系統環境與各個部分解釋,以及程式碼實現與演示影像。
系統版本資訊與依賴
Window 10 64bit
Pytorch1.7+CUDA10.0
Python3.8.5
VS2015
OpenVINO_2021.2.185
01
YOLOv5 下載與測試執行
YOLOv5 是第二個非官方的 YOLO 物件檢測版本,也是第一個 Pytorch 實現的 YOLO 物件檢測版本。Github 地址如下:
需要克隆到本地
git clone .git
然後執行
pip install -r requirements.txt
安裝所有依賴。
最後執行一段影片或者影像完成測試
python detect.py --source D:\images\video\SungEun.avi --weights yolov5s.pt --conf 0.25
02
模型轉換
模型轉換主要是把原始的 YOLOv5 的 pytorch 模型檔案轉換為通用的開放模型格式 ONNX 與 OpenVIN 特有的檔案格式IR(*.xml與*.bin)。
OpenVINO 從 2020R02 以後版本開始支援直接讀取 ONNX 格式檔案,所以我們既可以透過指令碼直接匯出 onnx 格式檔案,直接給 OpenVINO 呼叫,也 可以對得到 ONNX 檔案透過 OpenVINO 的模型轉換指令碼做進一步轉換生成IR中間格式(*.bin檔案與*.xml檔案)。
匯出ONNX格式檔案的指令碼
Pytorch 的 YOLOv5 專案本身已經提供了轉換指令碼,命令列執行方式如下:
# export at 640x640 with batch size 1python models/export.py --weights yolov5s.pt --img 640 --batch 1
然後迴圈每個輸出層,解析每個特徵點對應的3個框與相關資料。由於在匯出的時候 ONNX 格式檔案時模型的推理得到的三個輸出層原始結果,所以還需要對每個資料先完成 sigmoid 歸一化,然後再計算相關值,這部分的程式碼實現我參考了專案中的 yolo.py 中的 Detection 部分,得到初始每個物件的檢測框之後,採用 OpenVINO 中自帶非最大抑制函式,完成非最大抑制,就得到了最終的預測框,然後繪製顯示。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990088/viewspace-2753932/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Yolov5程式碼詳解——detect.pyYOLO
- yolov5 篩選正樣本流程 程式碼多圖詳解YOLO
- OpenVino快速落地部署教程
- 基於YOLOv5的目標檢測系統詳解(附MATLAB GUI版程式碼)YOLOMatlabGUI
- 詳解OpenCV For Java環境搭建與功能演示OpenCVJava
- Keepalived部署與配置詳解
- WebSocket 程式碼演示Web
- LabVIEW+OpenVINO在CPU上部署新冠肺炎檢測模型實戰View模型
- ONNX模型轉Openvino部署踩坑記錄模型
- 遺留程式碼處理技巧與案例演示
- 在Reddit中程式碼部署的演進
- 超詳細 | 使用Nexus搭建私服 (帶程式碼演示)
- jQuery的change事件程式碼演示jQuery事件
- 軟體測試與程式碼安全詳解
- CutMix&Mixup詳解與程式碼實戰
- [動圖演示]Redis 持久化 RDB/AOF 詳解與實踐Redis持久化
- 在思科ASA上部署Failover例項演示-上AI
- Git版本控制與工作流詳解Git
- TaxoRec部署與程式碼閱讀
- HBase(0.96以上版本)過濾器Filter詳解及例項程式碼過濾器Filter
- elasticsearch的java程式碼操作詳解ElasticsearchJava
- MySQL版本詳解MySql
- 2018 最新版本pycharm 的安裝與破解 詳細教程PyCharm
- 最新的關於BSP技術的深入剖析與詳解3(轉)
- 動態圖片演示,原始碼直析:手把手講解IPC框架,最新整理原始碼框架
- 征程6 NV12 理論與程式碼詳解
- Lift, Splat, Shoot, LSS程式碼詳盡分析與解讀
- 容器化部署目前最新版本的Elasticsearch--8.15.1Elasticsearch
- c# onnx模型部署:TensorRT、OpenVino、ONNXRuntime、OpenCV dnnC#模型OpenCVDNN
- 閉包程式碼例項演示
- 直播預告 | 時序資料處理的雲端利器:TDengine Cloud 詳解與演示Cloud
- 在基於RedHat與Debian的系統上安裝Wine 最新的開發版本Redhat
- 如何獲取微信的版本號詳解【附完整原始碼】原始碼
- LeakCanary詳解與原始碼分析原始碼
- MapReduce 詳解與原始碼分析原始碼
- URL與URL編碼詳解
- 在Ubuntu上安裝最新版本的HandbrakeUbuntu
- 程式碼混淆的原理和方法詳解