YOLOv8 檢測(cè)、分割模型的 OpenVINO 部署
共 6043字,需瀏覽 13分鐘
·
2024-06-21 10:15
點(diǎn)擊上方“小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
為什么需要OpenVINO?
OpenVINO(Open Visual Inference and Neural network Optimization)是英特爾推出的一種深度學(xué)習(xí)推理工具包,旨在優(yōu)化和加速深度學(xué)習(xí)模型的推理過(guò)程。將模型轉(zhuǎn)換為OpenVINO格式的主要優(yōu)勢(shì)有:
性能優(yōu)化:OpenVINO能夠針對(duì)英特爾硬件進(jìn)行優(yōu)化,包括 CPU、GPU、VPU 和 FPGA 等,從而實(shí)現(xiàn)對(duì)深度學(xué)習(xí)模型的加速推理,提高推理性能和效率。
跨平臺(tái)部署:OpenVINO支持跨多種硬件平臺(tái)進(jìn)行部署,包括邊緣設(shè)備和云服務(wù)器,能夠在不同的設(shè)備上實(shí)現(xiàn)高效的推理。
模型保護(hù):OpenVINO可以將模型轉(zhuǎn)換為 IR(Intermediate Representation)格式,這樣可以保護(hù)模型的知識(shí)產(chǎn)權(quán),避免模型被輕易篡改或復(fù)制。
部署簡(jiǎn)化:OpenVINO提供了簡(jiǎn)單易用的部署工具和庫(kù),使得在實(shí)際應(yīng)用中部署深度學(xué)習(xí)模型變得更加便捷。
使用自定義訓(xùn)練模型進(jìn)行圖像檢測(cè)
from ultralytics import YOLOfrom pathlib import Pathfrom IPython.display import Imagefrom PIL import ImageIMAGE_PATH = Path("data\coco_bike.jpg")# There are three lines of code below, all are correct.# You can use one of them# Use Raw String Literal:# det_model = YOLO(r"models\best.pt")# Use Forward Slashes# det_model = YOLO("models/best.pt")# Use Double Backslashes:det_model = YOLO("models\\best.pt")label_map = det_model.model.namesres = det_model(IMAGE_PATH)Image.fromarray(res[0].plot()[:, :, ::-1])
當(dāng)我們?cè)诮K端中運(yùn)行上述代碼時(shí),它會(huì)對(duì)圖像執(zhí)行檢測(cè),如下所示:
上述代碼的解釋
此代碼是一個(gè) Python 腳本,它使用“ultralytics”庫(kù)中的 YOLO(You Only Look Once)對(duì)象檢測(cè)模型來(lái)檢測(cè)圖像中的對(duì)象。讓我們分解一下代碼的每個(gè)部分的作用:
導(dǎo)入庫(kù):
該ultralytics庫(kù)提供了用于處理各種計(jì)算機(jī)視覺(jué)任務(wù)的工具,包括使用 YOLO 進(jìn)行對(duì)象檢測(cè)。
該pathlib庫(kù)用于處理文件和目錄路徑。
該IPython.display庫(kù)用于在 Jupyter 筆記本中顯示圖像。
該P(yáng)IL庫(kù)(Python Imaging Library)用于圖像處理。
2.定義圖像路徑:
該IMAGE_PATH變量設(shè)置為位于名為“data”的目錄中名為“coco_bike.jpg”的圖像文件的路徑。
3.加載YOLO模型:
使用 ultralytics 庫(kù)中的類加載 YOLO 模型YOLO。模型文件“best.pt”作為參數(shù)提供。
4. 獲取標(biāo)簽圖:
該label_map變量被分配了 YOLO 模型能夠檢測(cè)的類名列表。這些類名是從 YOLO 模型中加載的。
5.檢測(cè)物體:
YOLO 模型 ( det_model) 用于檢測(cè)指定圖像中的物體 ( IMAGE_PATH)。
檢測(cè)結(jié)果存儲(chǔ)在res變量中。
6.顯示結(jié)果:
Image.fromarray()使用庫(kù)中的函數(shù)顯示檢測(cè)結(jié)果PIL。該plot()方法用于創(chuàng)建檢測(cè)到的對(duì)象的圖像表示,并使用切片([:, :, ::-1])反轉(zhuǎn)顏色通道以將圖像從 BGR 轉(zhuǎn)換為 RGB 格式。
分割
from ultralytics import YOLOfrom pathlib import Pathfrom IPython.display import Imagefrom PIL import ImageSEG_MODEL_NAME = "yolov8n-seg"IMAGE_PATH = Path("data\coco_bike.jpg")seg_model = YOLO("models\yolov8n-seg.pt")res = seg_model(IMAGE_PATH)Image.fromarray(res[0].plot()[:, :, ::-1])
輸出:
上述代碼的解釋
讓我們以簡(jiǎn)單的方式一步一步地解釋一下這段代碼:
導(dǎo)入庫(kù):
該代碼使用該ultralytics庫(kù)來(lái)處理計(jì)算機(jī)視覺(jué)模型。
該pathlib庫(kù)用于處理文件路徑。
該IPython.display庫(kù)用于在筆記本中顯示圖像。
該P(yáng)IL庫(kù)用于與圖像相關(guān)的任務(wù)。
2.設(shè)置模型名稱和圖像路徑:
該SEG_MODEL_NAME變量設(shè)置為“yolov8n-seg”分割模型的名稱。該模型旨在理解圖像的結(jié)構(gòu)并將其分割成不同的部分。
該IMAGE_PATH變量設(shè)置為位于“data”目錄中名為“coco_bike.jpg”的圖像文件的路徑。
3.加載分割模型:
YOLO使用ultralytics 庫(kù)中的類加載 YOLO 分割模型。
模型文件“yolov8n-seg.pt”作為參數(shù)提供。此文件包含分割模型的預(yù)訓(xùn)練權(quán)重和配置。
4.執(zhí)行分割:
seg_model使用分割模型( )對(duì)指定的圖像( IMAGE_PATH)進(jìn)行分割。
分割的結(jié)果存儲(chǔ)在res變量中。
5.顯示分割圖像:
代碼將分割結(jié)果轉(zhuǎn)換為可以顯示的圖像格式。
該plot()方法用于創(chuàng)建分割區(qū)域的圖像表示。
圖像的顏色通道被反轉(zhuǎn)([:, :, ::-1])以使其適合以 RGB 格式顯示。
6.顯示圖像:
Image.fromarray()該庫(kù)中的函數(shù)用于PIL在 IPython 筆記本中顯示分割圖像。
導(dǎo)出物體檢測(cè)模型
# object detection modelfrom ultralytics import YOLOimport os# Use Forward Slashesdet_model = YOLO("models/best.pt")det_model_path = "models/best_openvino_model/best.xml"if not os.path.exists(det_model_path):det_model.export(format="openvino", dynamic=True, half=False)
輸出:
上述代碼的解釋:
導(dǎo)入庫(kù):
代碼YOLO從ultralytics庫(kù)中導(dǎo)入類以與對(duì)象檢測(cè)模型協(xié)同工作。
該os模塊被導(dǎo)入是為了與操作系統(tǒng)協(xié)同工作。
2.加載對(duì)象檢測(cè)模型:
YOLO使用庫(kù)中的類加載對(duì)象檢測(cè)模型ultralytics。
模型文件“best.pt”作為參數(shù)提供。該模型用于檢測(cè)圖像中的對(duì)象。
3.定義 OpenVINO 的導(dǎo)出路徑:
該變量det_model_path設(shè)置為對(duì)象檢測(cè)模型的 OpenVINO 模型文件“best.xml”的路徑。
4.導(dǎo)出為 OpenVINO 格式:
代碼檢查 OpenVINO 模型文件是否不存在指定路徑。
如果文件不存在,則使用該export方法將對(duì)象檢測(cè)模型導(dǎo)出為 OpenVINO 格式:
format="openvino"指定導(dǎo)出格式應(yīng)為OpenVINO。
dynamic=True表示導(dǎo)出的模型應(yīng)該支持動(dòng)態(tài)輸入形狀。
half=False指定導(dǎo)出的模型不應(yīng)使用半精度浮點(diǎn)數(shù)。
導(dǎo)出分割模型
# Export segmentation modelfrom ultralytics import YOLOimport os# Use Forward Slashesseg_model = YOLO("models/yolov8n-seg.pt")seg_model_path = "models/yolov8n-seg_openvino_model/yolov8n-seg.xml"if not os.path.exists(seg_model_path):seg_model.export(format="openvino", dynamic=True, half=False)
輸出:
上述代碼的解釋:
導(dǎo)入庫(kù):
代碼YOLO從ultralytics庫(kù)中導(dǎo)入類以與分割模型協(xié)同工作。
該os模塊被導(dǎo)入用于與操作系統(tǒng)交互。
2.加載分割模型:
YOLO使用庫(kù)中的類來(lái)加載分割模型ultralytics。
模型文件“yolov8n-seg.pt”作為參數(shù)提供。該模型專為圖像分割而設(shè)計(jì)。
3.定義 OpenVINO 的導(dǎo)出路徑:
該變量seg_model_path設(shè)置為OpenVINO模型文件“yolov8n-seg.xml”的保存路徑。
4.導(dǎo)出為 OpenVINO 格式:
代碼檢查 OpenVINO 模型文件是否不存在指定路徑。
如果該文件不存在,則使用該export方法將分割模型導(dǎo)出為 OpenVINO 格式:
format="openvino"指定導(dǎo)出格式應(yīng)為OpenVINO。
dynamic=True表示導(dǎo)出的模型應(yīng)該支持動(dòng)態(tài)輸入形狀。
half=False指定導(dǎo)出的模型不應(yīng)使用半精度浮點(diǎn)數(shù)。
文中完整的項(xiàng)目地址和模型可以查看:https://github.com/mushfiq1998/export-trained-yolov8-to-openvino-with-python
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~
