作者:英特爾物聯(lián)網(wǎng)創(chuàng)新大使 賈志剛
本文將介紹在基于 OpenVINO 在英特爾獨立顯卡上部署 YOLOv5 實時實例分割模型的全流程,并提供完整范例代碼供讀者使用。
1.1YOLOv5 實時實例分割模型簡介
YOLOv5 是 AI 開發(fā)者友好度最佳的框架之一,與其它YOLO 系列相比:
工程化水平好,工程應用時“坑”少
文檔詳實友好,易讀易懂
既容易在用戶的數(shù)據(jù)集上重訓練又容易在不同的平臺上進行部署
社區(qū)活躍度高(截至2022-11-27有33.2k GitHub 星, 287個貢獻者)
項目演進速度快
默認支持 OpenVINO 部署
在典型行業(yè)(制造業(yè)、農(nóng)業(yè)、醫(yī)療、交通等)有廣泛應用。
2022年11月22日,YOLOv5 v7.0版正式發(fā)布,成為YOLO 系列中第一個支持實時實例分割(Real Time Instance Segmentation)的框架。從此,YOLOv5 框架不僅具有實時目標檢測模型,還涵蓋了圖像分類和實例分割。
圖片來源: https://github.com/ultralytics/yolov5/releases
與實時實例分割 SOTA 性能榜中的模型相比,YOLOv5 作者發(fā)布的 YOLOv5-Seg 模型數(shù)據(jù),無論是精度還是速度,都領(lǐng)先于當前 SOTA 性能榜中的模型。
1.2英特爾消費級銳炫 A系列顯卡簡介
2022年英特爾發(fā)布了代號為 Alchemist 的第一代消費級銳炫桌面獨立顯卡,當前英特爾京東自營旗艦店里銷售的主要型號為 A750 和 A770,其典型參數(shù)如下圖所示。
OpenVINO 從2022.2版開始支持英特爾獨立顯卡,包括英特爾數(shù)據(jù)中心 GPUFlex 系列和英特爾銳炫系列。
1.3在英特爾獨立顯卡上部署
YOLOv5-seg 模型的完整流程
在英特爾獨立顯卡上部署 YOLOv5-seg 模型的完整流程主要有三步:
1搭建 YOLOv5 開發(fā)環(huán)境和 OpenVINO 部署環(huán)境
2運行模型優(yōu)化器(Model Optimizer)優(yōu)化并轉(zhuǎn)換模型
3調(diào)用 OpenVINO Runtime API函數(shù)編寫模型推理程序,完成模型部署
本文將按照上述三個步驟,依次詳述。
1.3.1搭建 YOLOv5 開發(fā)環(huán)境和 OpenVINO 部署環(huán)境
最近的 YOLOv5 Github 代碼倉,即 YOLOv5 v7.0,已經(jīng)將 openvino-dev[onnx] 寫入 requirement.txt 文件,當執(zhí)行 pip install -r requirements.txt,會安裝完 YOLOv5 開發(fā)環(huán)境和 OpenVINO部署環(huán)境。
git clone https://github.com/ultralytics/yolov5 # clonecd yolov5 cd yolov5 pip install -r requirements.txt
向右滑動查看完整代碼
1.3.2驗證 YOLOv5 開發(fā)環(huán)境和 OpenVINO部署環(huán)境
執(zhí)行完上述命令后,運行命令
python segmentpredict.py --source dataimages
向右滑動查看完整代碼
執(zhí)行結(jié)果如下圖所示,說明 YOLOv5 開發(fā)環(huán)境和OpenVINO 部署環(huán)境已搭建成功。
1.3.3導出 yolov5s-seg OpenVINO IR 模型
使用命令:
python export.py --weights yolov5s-seg.pt --include onnx
向右滑動查看完整代碼
獲得 yolov5s-seg ONNX 格式模型:yolov5s-seg.onnx
然后運行命令:
mo -m yolov5s-seg.onnx --data_type FP16
獲得yolov5s-seg IR格式模型:yolov5s-seg.xml和yolov5s-seg.bin。
1.3.4用 Netron 工具查看 yolov5s-seg.onnx 模型的輸入和輸出
使用 Netron:https://netron.app/
查看 yolov5s-seg.onnx 模型的輸入和輸出,如下圖所示:
從圖中可以看出:yolov5s-seg 模型
? 輸入節(jié)點名字:“images”;數(shù)據(jù):float32[1,3,640,640]
? 輸出節(jié)點1的名字:“output0”;數(shù)據(jù):float32[1,25200,117]。
其中117的前85個字段跟 YOLOv5 定義完全一致,即檢測框信息;后32個字段用于計算掩膜數(shù)據(jù)。
? 輸出節(jié)點2的名字:“output1”;數(shù)據(jù):float32[1,32,160,160]。output1 的輸出與 output0 后32個字段做矩陣乘法后得到的數(shù)據(jù),即為對應目標的掩膜數(shù)據(jù)。
1.3.5使用 OpenVINO Runtime API 編寫 yolov5s-seg 推理程序
由于 yolov5s-seg 模型是在 YoLov5 模型的基礎上增加了掩膜輸出分支,所以圖像數(shù)據(jù)的預處理部分跟 YoLov5 模型一模一樣。
整個推理程序主要有五個關(guān)鍵步驟:
第一步:創(chuàng)建 Core 對象;
第二步:載入 yolov5s-seg 模型,并面向英特爾獨立顯卡編譯模型
第三步:對圖像數(shù)據(jù)進行預處理
第四步:執(zhí)行 AI 推理計算
第五步:對推理結(jié)果進行后處理,并可視化處理結(jié)果。
整個代碼框架如下所示:
# Step1: Create OpenVINO Runtime Core core = Core() # Step2: Compile the Model, using dGPU A770m net = core.compile_model("yolov5s-seg.xml", "GPU.1") output0, output1 = net.outputs[0],net.outputs[1] b,n,input_h,input_w = net.inputs[0].shape # Get the shape of input node # Step3: Preprocessing for YOLOv5-Seg # ... # Step 4: Do the inference outputs = net([blob]) pred, proto = outputs[output0], outputs[output1] # Step 5 Postprocess and Visualize the result # ...
向右滑動查看完整代碼
其中 YOLOv5-seg 的前處理跟 YOLOv5 一樣,范例代碼如下:
im, r, (dh, dw)= letterbox(frame, new_shape=(input_h,input_w)) # Resize to new shape by letterbox im = im.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB im = np.ascontiguousarray(im) # contiguous im = np.float32(im) / 255.0 # 0 - 255 to 0.0 - 1.0
向右滑動查看完整代碼
由于 YOLOv5 系列模型的輸入形狀是正方形,當輸入圖片為長方形時,直接調(diào)用 OpenCV 的 resize 函數(shù)放縮圖片會使圖片失真,所以 YOLOv5 使用letterbox 方式,將圖片以保持原始圖片長寬比例的方式放縮,然后用灰色color=(114, 114, 114)填充邊界,如下圖所示。
Letterbox 放縮效果
https://github.com/ultralytics/yolov5/blob/master/utils/augmentations.py#L111
YOLOv5-seg 的后處理跟 YOLOv5 幾乎一樣,需要對推理結(jié)果先做非極大值抑制。本文直接使用了 YOLOv5 自帶的 non_max_suppression() 函數(shù)來實現(xiàn)非極大值抑制,并拆解出檢測框(bboxes), 置信度(conf),類別(class_ids)和掩膜(masks)。關(guān)鍵代碼如下:
from utils.general import non_max_suppression pred = torch.tensor(pred) pred = non_max_suppression(pred, nm=32)[0].numpy() #(n,38) tensor per image [xyxy, conf, cls, masks] bboxes, confs, class_ids, masks= pred[:,:4], pred[:,4], pred[:,5], pred[:,6:]
向右滑動查看完整代碼
yolov5seg_ov2022_sync_dgpu.py 運行結(jié)果如下圖所示:
源代碼鏈接:
https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5seg_ov2022_sync_dGPU.py
1.4結(jié)論
YOLOv5 的實時實例分割程序通過 OpenVINO 部署在英特爾獨立顯卡上,可以獲得高速度與高精度。讀者還可以將程序通過 OpenVINO異步 API 升級為異步推理程序或者用 OpenVINO C++ API 改寫推理程序,這樣可以獲得更高的 AI 推理計算性能。
-
英特爾
+關(guān)注
關(guān)注
61文章
10009瀏覽量
172340 -
顯卡
+關(guān)注
關(guān)注
16文章
2462瀏覽量
68161 -
AI
+關(guān)注
關(guān)注
87文章
31536瀏覽量
270344 -
模型
+關(guān)注
關(guān)注
1文章
3313瀏覽量
49231
原文標題:在英特爾獨立顯卡上部署YOLOv5 v7.0版實時實例分割模型 | 開發(fā)者實戰(zhàn)
文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
基于C#和OpenVINO?在英特爾獨立顯卡上部署PP-TinyPose模型
【YOLOv5】LabVIEW+TensorRT的yolov5部署實戰(zhàn)(含源碼)
![【<b class='flag-5'>YOLOv5</b>】LabVIEW+TensorRT的<b class='flag-5'>yolov5</b><b class='flag-5'>部署</b>實戰(zhàn)(含源碼)](https://file1.elecfans.com/web2/M00/81/CF/wKgaomQO1LqAUJBGAAIyJFtbKj0277.png)
在C++中使用OpenVINO工具包部署YOLOv5-Seg模型
![<b class='flag-5'>在</b>C++中使用OpenVINO工具包<b class='flag-5'>部署</b><b class='flag-5'>YOLOv5</b>-Seg<b class='flag-5'>模型</b>](https://file1.elecfans.com/web2/M00/B8/52/wKgZomWDoNGAIjtPAAAm_HhB2K4704.png)
yolov5轉(zhuǎn)onnx在cubeAI上部署失敗的原因?
龍哥手把手教你學視覺-深度學習YOLOV5篇
怎樣使用PyTorch Hub去加載YOLOv5模型
如何YOLOv5測試代碼?
英特爾推出了英特爾銳炬Xe MAX獨立顯卡
YOLOv5 7.0版本下載與運行測試
在C++中使用OpenVINO工具包部署YOLOv5模型
使用OpenVINO優(yōu)化并部署訓練好的YOLOv7模型
![使用OpenVINO優(yōu)化并<b class='flag-5'>部署</b>訓練好的<b class='flag-5'>YOLOv</b>7<b class='flag-5'>模型</b>](https://file1.elecfans.com/web2/M00/9E/9E/wKgZomToHDqANerlAAA53hyTfak487.png)
評論