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,所以暫無!等我新筆記本到貨立刻補上這一缺失!
