1.1概述
在《基于OpenVINO 2022.1實現YOLOv5推理程序》中詳述了:
■ YOLOv5框架的安裝和如何導出YOLOv5.onnx模型
■ OpenVINO 2022.1的安裝以及如何編寫YOLOv5模型的推理程序
本文將介紹如何使用OpenVINO 2022.1的預處理API,進一步提升YOLOv5模型的推理計算性能。
1.2什么是預處理API函數?
OpenVINO 2022.1之前版本不提供OpenVINO Runtime原生的用于數據預處理的API函數1 ,如圖1-1所示,開發者必須通過第三方庫(例如:OpenCV)來實現數據預處理。
圖1-1 OpenVINO Runtime預處理API
假設沒有預處理API,那么輸入數據的預處理操作只能放在CPU上實現,CPU完成數據預處理后,再將預處理后的數據傳給iGPU、VPU等AI加速計算設備進行推理計算。
有了預處理API后,就能將預處理操作集成到在模型執行圖中,這樣iGPU、VPU 或即將發布的Intel獨立顯卡都能進行數據預處理,無需依賴CPU,提高了執行效率,如圖1-2所示。
圖1-2 預處理OpenCV vs OpenVINO
1.3數據預處理的典型操作
由于輸入數據的Shape、Precision等特征,與模型輸入張量的要求不一致,所以需要通過預處理,將輸入數據按照模型輸入張量的要求進行轉換,如圖1-3所示。
圖1-3 輸入數據 vs 模型輸入張量
從圖1-3中可見,數據預處理的典型操作有:
■改變輸入數據的形狀:[720, 1280,3] → [1, 3, 640, 640]
■改變輸入數據的精度:U8 → f32
■ 改變輸入數據的顏色通道順序:BGR → RGB
■改變輸入數據的布局(layout):HWC → NCHW
■ 歸一化數據:減去均值(mean),除以標準差(std)
1.4數據預處理API的使用方法
對應數據預處理的典型操作,OpenVINO 工具套件預處理API提供了相應的類,方便開發者快速使用,其主要流程有6步2 ,如圖1-4所示,依次是:
1 實例化PrePostProcessor對象;
2 申明輸入數據的信息
3 指定模型的數據布局(layout)
4 設置模型輸出張量的信息
5 定義預處理的具體步驟
6 將預處理步驟集成到模型
圖1-4 使用預處理API的流程
本文將按照上述順序依次介紹。
1.4.1 實例化PrePostProcessor對象
實例化PrePostProcessor對象的Python代碼,如代碼清單1-1所示。
代碼清單1-1 實例化PrePostProcessor對象
1.4.2 申明輸入數據的信息
申明輸入數據的信息的Python代碼,如代碼清單1-2所示。
代碼清單1-2 申明輸入數據的信息
1.4.3 指定模型的數據布局(layout)
指定模型的數據布局(layout) 的Python代碼,如代碼清單1-3所示。
代碼清單1-3 指定模型的數據布局(layout)
1.4.4 設置模型輸出張量的信息
設置模型輸出張量的信息的Python代碼,如代碼清單1-4所示。
代碼清單1-4 設置模型輸出張量的信息
1.4.5 定義預處理的具體步驟
定義預處理的具體步驟的Python代碼,如代碼清單1-5所示。
代碼清單1-5 定義預處理的具體步驟
1.4.6 將預處理步驟集成到模型
將預處理步驟集成到模型的Python代碼,如代碼清單1-6所示。
代碼清單1-6 將預處理步驟集成到模型
1.4.7 將集成了預處理步驟的模型導出
使用serialize()函數,可以將集成了預處理步驟的模型導出,方便后續調用,如代碼清單1-7所示。
代碼清單1-7 導出包含預處理步驟的模型
使用Netron打開導出模型,可以看到預處理步驟已經集成到執行圖中,如圖1-5所示。
圖1-5 預處理集成到執行圖中
導出集成預處理模型的完整源代碼:
1.5完整范例代碼和測試結果
本文隨附使用OpenVINO 2022.1預處理API實現YOLOv5s推理程序的完整源代碼,參見:https://gitee.com/ppov-nuc/yolov5_infer/blob/main/infer_with_openvino_preprocess.py。
表1-1 使用OpenVINO 2022.1預處理API和
使用OpenCV實現預處理的性能對比
操作系統:Windows10;Python版本:3.8;OpenVINO版本:2022.1
模型:yolov5s.onnx
執行命令, 將yolov5s.onnx轉換為FP16精度的yolov5s.xml后
mo --input_model yolov5s.onnx --data_type FP16
操作系統:Windows10;Python版本:3.8;OpenVINO版本:2022.1
模型:yolov5s.xml @ FP16
1.6總結
本文完整介紹了什么是OpenVINO工具套件預處理API和為什么推薦使用預處理API將預處理操作集成到模型執行圖中,然后詳細介紹了使用步驟并提供了完整范例源代碼。
通過運行源代碼,可以看到,使用了OpenVINO 工具套件預處理API,使輸入數據預處理操作不再依賴CPU,可以由推理設備(如GPU/VPU)完成,提高了推理計算效率,減少了運行時間。
原文標題:使用OpenVINO? 預處理API進一步提升YOLOv5推理性能 | 開發者實戰
文章出處:【微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。
-
英特爾
+關注
關注
61文章
9964瀏覽量
171776 -
API
+關注
關注
2文章
1501瀏覽量
62019 -
預處理
+關注
關注
0文章
33瀏覽量
10480
原文標題:使用OpenVINO? 預處理API進一步提升YOLOv5推理性能 | 開發者實戰
文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論