YOLOv5最新6.1在OpenCV DNN、OpenVINO、ONNXRUNTIME上推理對比


https://mp.weixin.qq.com/s/uRsYixCpIwY_7bKAIvnZOg

微信公眾號:OpenCV學堂

關注獲取更多計算機視覺與深度學習知識

引言

我把YOLOv5最新版本的模型分別用OpenCV DNN(Python、C++)部署、OpenVINO(Python、C++)部署、ONNXRUNTIME-GPU(Python、C++)部署,然后還測試了CPU/GPU不同平台上的運行速度比較。

軟件版本與硬件規格

測試用的硬件與軟件信息:

GPU 1050TiCPU i7八代OS:Win10 64位OpenVINO2021.4ONNXRUNTIME:1.4OpenCV4.5.4Python3.6.5YOLOv5 6.1

使用的YOLOv5模型中的yolov5s.pt模型,轉換為ONNX模型之后輸入格式為:

NCHW = 1x3x640x640

最終輸出層名稱:output,格式:

NHW = 1x25200x85

YOLOv5推理速度比較

基於同一段視頻文件,Python/C++代碼測試結果比較如下:

圖片

說明:OpenCV DNN與OpenVINO是基於CPU測試的,ONNXRUNTIME是基於GPU版本測試的,ONNXRUNTIME的CPU版本我沒有測試過。
貼幾張運行時候的截圖:

圖片

圖片

圖片

圖片

圖片

圖片

圖片

代碼實現與說明

ONNX代碼實現部分主要是參考了YOLOv5官方給出幾個鏈接:

https://github.com/microsoft/onnxruntime/issues/10323https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.htmlhttps://github.com/microsoft/onnxruntime-inference-examples/blob/main/c_cxx/imagenet/main.cc

有一個特別坑的地方需要特別的注意:

ONNX C++的環境必須是全局變量,聲明如下:

Ort::Env env = Ort::Env(ORT_LOGGING_LEVEL_ERROR, "YOLOv5");

只有所有的推理圖象執行完成才可以調用release進行釋放,否則就會一直卡死,程序崩潰!ONNX其它的部分的代碼實現基本實現了跟DNN/OpenVINO推理后處理代碼的完全復用!相關代碼建議參考之前的兩篇推文:

OpenCV4.5.x DNN + YOLOv5 C++推理

OpenCV4.5.4 直接支持YOLOv5 6.1版本模型推理

 

特別說明:怎么沒有TensorRT/?主要是因為我電腦安裝了CUDA10.1版本+TensorRT7.0的不兼容,我又不想再折騰重新安裝CUDA10.0,所以暫無!等我新筆記本到貨立刻補上這一缺失!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM