0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在英特爾獨(dú)立顯卡上部署YOLOv5 v7.0版實(shí)時實(shí)例分割模型

英特爾物聯(lián)網(wǎng) ? 來源:英特爾物聯(lián)網(wǎng) ? 作者:賈志剛 ? 2022-12-20 11:32 ? 次閱讀

作者:英特爾物聯(lián)網(wǎng)創(chuàng)新大使 賈志剛

本文將介紹在基于 OpenVINO 在英特爾獨(dú)立顯卡上部署 YOLOv5 實(shí)時實(shí)例分割模型的全流程,并提供完整范例代碼供讀者使用。

1.1YOLOv5 實(shí)時實(shí)例分割模型簡介

YOLOv5 是 AI 開發(fā)者友好度最佳的框架之一,與其它YOLO 系列相比:

工程化水平好,工程應(yīng)用時“坑”少

文檔詳實(shí)友好,易讀易懂

既容易在用戶的數(shù)據(jù)集上重訓(xùn)練又容易在不同的平臺上進(jìn)行部署

社區(qū)活躍度高(截至2022-11-27有33.2k GitHub 星, 287個貢獻(xiàn)者)

項(xiàng)目演進(jìn)速度快

默認(rèn)支持 OpenVINO 部署

在典型行業(yè)(制造業(yè)、農(nóng)業(yè)、醫(yī)療、交通等)有廣泛應(yīng)用。

2022年11月22日,YOLOv5 v7.0版正式發(fā)布,成為YOLO 系列中第一個支持實(shí)時實(shí)例分割(Real Time Instance Segmentation)的框架。從此,YOLOv5 框架不僅具有實(shí)時目標(biāo)檢測模型,還涵蓋了圖像分類和實(shí)例分割。

0bf4be0e-7f88-11ed-8abf-dac502259ad0.png

圖片來源: https://github.com/ultralytics/yolov5/releases

與實(shí)時實(shí)例分割 SOTA 性能榜中的模型相比,YOLOv5 作者發(fā)布的 YOLOv5-Seg 模型數(shù)據(jù),無論是精度還是速度,都領(lǐng)先于當(dāng)前 SOTA 性能榜中的模型。

1.2英特爾消費(fèi)級銳炫 A系列顯卡簡介

2022年英特爾發(fā)布了代號為 Alchemist 的第一代消費(fèi)級銳炫桌面獨(dú)立顯卡,當(dāng)前英特爾京東自營旗艦店里銷售的主要型號為 A750 和 A770,其典型參數(shù)如下圖所示。

0c1b5398-7f88-11ed-8abf-dac502259ad0.png

OpenVINO 從2022.2版開始支持英特爾獨(dú)立顯卡,包括英特爾數(shù)據(jù)中心 GPUFlex 系列和英特爾銳炫系列。

1.3在英特爾獨(dú)立顯卡上部署

YOLOv5-seg 模型的完整流程

在英特爾獨(dú)立顯卡上部署 YOLOv5-seg 模型的完整流程主要有三步:

1搭建 YOLOv5 開發(fā)環(huán)境和 OpenVINO 部署環(huán)境

2運(yùn)行模型優(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 文件,當(dāng)執(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驗(yàn)證 YOLOv5 開發(fā)環(huán)境和 OpenVINO部署環(huán)境

執(zhí)行完上述命令后,運(yùn)行命令

python segmentpredict.py --source dataimages

向右滑動查看完整代碼

執(zhí)行結(jié)果如下圖所示,說明 YOLOv5 開發(fā)環(huán)境和OpenVINO 部署環(huán)境已搭建成功。

0c61fdf2-7f88-11ed-8abf-dac502259ad0.png0c97f38a-7f88-11ed-8abf-dac502259ad0.png

1.3.3導(dǎo)出 yolov5s-seg OpenVINO IR 模型

使用命令:

python export.py --weights yolov5s-seg.pt --include onnx

向右滑動查看完整代碼

獲得 yolov5s-seg ONNX 格式模型:yolov5s-seg.onnx

然后運(yùn)行命令:

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 模型的輸入和輸出,如下圖所示:

0d03c736-7f88-11ed-8abf-dac502259ad0.png

從圖中可以看出:yolov5s-seg 模型

? 輸入節(jié)點(diǎn)名字:“images”;數(shù)據(jù):float32[1,3,640,640]

? 輸出節(jié)點(diǎn)1的名字:“output0”;數(shù)據(jù):float32[1,25200,117]。

其中117的前85個字段跟 YOLOv5 定義完全一致,即檢測框信息;后32個字段用于計算掩膜數(shù)據(jù)。

? 輸出節(jié)點(diǎn)2的名字:“output1”;數(shù)據(jù):float32[1,32,160,160]。output1 的輸出與 output0 后32個字段做矩陣乘法后得到的數(shù)據(jù),即為對應(yīng)目標(biāo)的掩膜數(shù)據(jù)。

1.3.5使用 OpenVINO Runtime API 編寫 yolov5s-seg 推理程序

由于 yolov5s-seg 模型是在 YoLov5 模型的基礎(chǔ)上增加了掩膜輸出分支,所以圖像數(shù)據(jù)的預(yù)處理部分跟 YoLov5 模型一模一樣。

整個推理程序主要有五個關(guān)鍵步驟:

第一步:創(chuàng)建 Core 對象;

第二步:載入 yolov5s-seg 模型,并面向英特爾獨(dú)立顯卡編譯模型

第三步:對圖像數(shù)據(jù)進(jìn)行預(yù)處理

第四步:執(zhí)行 AI 推理計算

第五步:對推理結(jié)果進(jìn)行后處理,并可視化處理結(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 系列模型的輸入形狀是正方形,當(dāng)輸入圖片為長方形時,直接調(diào)用 OpenCV 的 resize 函數(shù)放縮圖片會使圖片失真,所以 YOLOv5 使用letterbox 方式,將圖片以保持原始圖片長寬比例的方式放縮,然后用灰色color=(114, 114, 114)填充邊界,如下圖所示。

0d339934-7f88-11ed-8abf-dac502259ad0.png

Letterbox 放縮效果

https://github.com/ultralytics/yolov5/blob/master/utils/augmentations.py#L111

YOLOv5-seg 的后處理跟 YOLOv5 幾乎一樣,需要對推理結(jié)果先做非極大值抑制。本文直接使用了 YOLOv5 自帶的 non_max_suppression() 函數(shù)來實(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 運(yùn)行結(jié)果如下圖所示:

0d733594-7f88-11ed-8abf-dac502259ad0.png

源代碼鏈接:

https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5seg_ov2022_sync_dGPU.py

1.4結(jié)論

YOLOv5 的實(shí)時實(shí)例分割程序通過 OpenVINO 部署在英特爾獨(dú)立顯卡上,可以獲得高速度與高精度。讀者還可以將程序通過 OpenVINO異步 API 升級為異步推理程序或者用 OpenVINO C++ API 改寫推理程序,這樣可以獲得更高的 AI 推理計算性能。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 英特爾
    +關(guān)注

    關(guān)注

    60

    文章

    9747

    瀏覽量

    170643
  • 顯卡
    +關(guān)注

    關(guān)注

    16

    文章

    2406

    瀏覽量

    66873
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    28876

    瀏覽量

    266216
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3032

    瀏覽量

    48356

原文標(biāo)題:在英特爾獨(dú)立顯卡上部署YOLOv5 v7.0版實(shí)時實(shí)例分割模型 | 開發(fā)者實(shí)戰(zhàn)

文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于C#和OpenVINO?英特爾獨(dú)立顯卡上部署PP-TinyPose模型

    和 OpenVINO,將 PP-TinyPose 模型部署英特爾獨(dú)立顯卡上。 1.1 PP-
    的頭像 發(fā)表于 11-18 18:27 ?2316次閱讀

    Yolov5算法解讀

    yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然不斷進(jìn)行升級迭代。 Yolov5YOLOv5s、
    的頭像 發(fā)表于 05-17 16:38 ?7419次閱讀
    <b class='flag-5'>Yolov5</b>算法解讀

    YOLOv5】LabVIEW+TensorRT的yolov5部署實(shí)戰(zhàn)(含源碼)

    今天主要和大家分享LabVIEW中使用純TensoRT工具包快速部署并實(shí)現(xiàn)yolov5的物體識別
    的頭像 發(fā)表于 08-21 22:20 ?1159次閱讀
    【<b class='flag-5'>YOLOv5</b>】LabVIEW+TensorRT的<b class='flag-5'>yolov5</b><b class='flag-5'>部署</b>實(shí)戰(zhàn)(含源碼)

    C++中使用OpenVINO工具包部署YOLOv5-Seg模型

    YOLOv5兼具速度和精度,工程化做的特別好,Git clone到本地即可在自己的數(shù)據(jù)集上實(shí)現(xiàn)目標(biāo)檢測任務(wù)的訓(xùn)練和推理,產(chǎn)業(yè)界中應(yīng)用廣泛。開源社區(qū)對YOLOv5支持實(shí)例
    的頭像 發(fā)表于 12-21 10:17 ?1866次閱讀
    <b class='flag-5'>在</b>C++中使用OpenVINO工具包<b class='flag-5'>部署</b><b class='flag-5'>YOLOv5</b>-Seg<b class='flag-5'>模型</b>

    yolov5轉(zhuǎn)onnxcubeAI上部署失敗的原因?

    第一個我是轉(zhuǎn)onnx時 想把權(quán)重文件變小點(diǎn) 就用了半精度 --half,則說17版本不支持半精度 后面則是沒有縮小的單精度 但是顯示哪里溢出了···· 也不說是哪里、、。。。 到底能不能部署yolov5這種東西???? 也沒看見幾個部署
    發(fā)表于 03-14 06:23

    龍哥手把手教你學(xué)視覺-深度學(xué)習(xí)YOLOV5

    vi7.Labview調(diào)用yolov5模型進(jìn)行攝像頭實(shí)時檢測學(xué)習(xí)本課程后,你可以獲得:1. 快速掌握yolov5labview中應(yīng)用的關(guān)鍵
    發(fā)表于 09-03 09:39

    怎樣使用PyTorch Hub去加載YOLOv5模型

    Python>=3.7.0環(huán)境中安裝requirements.txt,包括PyTorch>=1.7。模型和數(shù)據(jù)集從最新的 YOLOv5版本自動下載。簡單示例此示例從
    發(fā)表于 07-22 16:02

    如何YOLOv5測試代碼?

    使用文檔“使用 YOLOv5 進(jìn)行對象檢測”我試圖從文檔第 10 頁訪問以下鏈接( i.MX8MP 上部署 yolov5s 的步驟 - NXP 社區(qū)) ...但是這樣做時會被拒絕訪問
    發(fā)表于 05-18 06:08

    yolov5模型onnx轉(zhuǎn)bmodel無法識別出結(jié)果如何解決?

    推理硬件:質(zhì)算盒SE5,芯片BM1684。 2. SDK: v2.7.0 代碼: 1. 模型來源yolov5官方:https://github.com/ultralytics/
    發(fā)表于 09-15 07:30

    【愛芯派 Pro 開發(fā)板試用體驗(yàn)】部署愛芯派官方YOLOV5模型

    繼上文開箱后,本文主要依托愛芯元智官方的實(shí)例,進(jìn)行官方YOLOV5模型部署和測試。 一、環(huán)境搭建 由于8核A55的SoC,加上目前Debian OS的工具齊全,所以決定直接在板上編譯
    發(fā)表于 12-12 22:58

    英特爾推出了英特爾銳炬Xe MAX獨(dú)立顯卡

    英特爾推出了英特爾銳炬 Xe MAX 獨(dú)立顯卡,該顯卡專為輕薄型筆記本電腦設(shè)計,現(xiàn)已通過合作伙伴問世。
    的頭像 發(fā)表于 11-01 12:15 ?8629次閱讀

    YOLOv5 7.0版本下載與運(yùn)行測試

    支持實(shí)例分割了,從此YOLOv5實(shí)現(xiàn)了圖像分類、對象檢測、實(shí)例分割三個支持,從訓(xùn)練到部署。
    的頭像 發(fā)表于 11-30 15:55 ?3438次閱讀

    C++中使用OpenVINO工具包部署YOLOv5模型

    下載并轉(zhuǎn)換YOLOv5預(yù)訓(xùn)練模型的詳細(xì)步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優(yōu)化并部署YOLOv5模型》,本文所使用的
    的頭像 發(fā)表于 02-15 16:53 ?4325次閱讀

    使用旭日X3派的BPU部署Yolov5

    本次主要介紹旭日x3的BPU中部署yolov5。首先在ubuntu20.04安裝yolov5,并運(yùn)行yolov5并使用pytoch的pt
    的頭像 發(fā)表于 04-26 14:20 ?742次閱讀
    使用旭日X3派的BPU<b class='flag-5'>部署</b><b class='flag-5'>Yolov5</b>

    使用OpenVINO優(yōu)化并部署訓(xùn)練好的YOLOv7模型

    英特爾銳炫 顯卡+ oneAPI 和 OpenVINO 實(shí)現(xiàn)英特爾 視頻 AI 計算盒訓(xùn)推一體-上篇》一文中,我們詳細(xì)介紹基于英特爾
    的頭像 發(fā)表于 08-25 11:08 ?1306次閱讀
    使用OpenVINO優(yōu)化并<b class='flag-5'>部署</b>訓(xùn)練好的<b class='flag-5'>YOLOv</b>7<b class='flag-5'>模型</b>