作者:馮浩遼寧科技大學(xué)研究生
指導(dǎo)教師:張海剛 英特爾邊緣計算創(chuàng)新大使深圳職業(yè)技術(shù)大學(xué) 副教授
當(dāng)今,深度學(xué)習(xí)技術(shù)在計算機視覺領(lǐng)域取得了巨大的突破,使得各種圖像處理任務(wù)變得更加智能化。其中,Semantic Segmentation(語義分割)是一項重要的任務(wù),它有助于計算機理解圖像中不同對象的位置和邊界。本文將介紹如何使用 OpenVINO Python API 部署 FastSAM 模型,以實現(xiàn)快速高效的語義分割。
什么是 FastSAM 模型?
FastSAM 模型是一種輕量級語義分割模型,旨在快速而準(zhǔn)確地分割圖像中的對象。它經(jīng)過了精心設(shè)計,以在較低的計算成本下提供卓越的性能。這使得 FastSAM 模型成為許多計算機視覺應(yīng)用的理想選擇,包括自動駕駛、醫(yī)學(xué)圖像分析和工業(yè)自動化等領(lǐng)域。
步驟一:安裝 OpenVINO
要開始使用 OpenVINO 進行推理 FastSAM 模型,首先需要安裝 OpenVINO Toolkit。OpenVINO 是英特爾發(fā)布的開源工具,專為深度學(xué)習(xí)模型部署而設(shè)計。
你可以按照以下步驟安裝OpenVINO :
訪問OpenVINO官方網(wǎng)站下載OpenVINO工具包。
按照官方文檔的說明進行安裝和配置。
步驟二:下載 FastSam 官網(wǎng)模型
FastSAM 模型可以在官方 GitHub 中找到。下載模型并將其解壓縮到合適的文件夾。根據(jù)自身情況下載合適的預(yù)訓(xùn)練模型。
這里還需要將下載到的模型,由于這個模型是采用的pytorch 類型的格式,所以還需要將這個 pt 模型轉(zhuǎn)換為 OpenVINO 的 IR 模型才能進行調(diào)用推理。
轉(zhuǎn)換步驟如下所示:
Pytorch →onnx → IR
需要先導(dǎo)出為 onnx 標(biāo)準(zhǔn)格式,然后經(jīng)過這個壓縮優(yōu)化轉(zhuǎn)化為 IR 模型。
OpenVINO 官方提供一個模型轉(zhuǎn)換工具 Model Optimizer,可以利用這個更加便捷的轉(zhuǎn)換我們的模型。
例如:
mo --input_model FastSAM-s.onnx
就會在當(dāng)前目錄下生成對應(yīng)的 FastSAM-s.bin和 FastSAM-s.xml 文件,這就是所謂的 IR 模型了。
步驟三:使用 OpenVINO Python API
接下來,我們將使用OpenVINO Python API來部署FastSAM 模型。由于官方提供的這個預(yù)訓(xùn)練模型也是基于yolov8進行優(yōu)化的,所以也需要有和yolov8 相似的處理步驟:
加載模型→讀圖 → 預(yù)處理 → 推理 → 后處理
1. 加載模型
加載模型需要創(chuàng)建一個 Core,然后對模型進行讀取編譯:
core = ov.Core() model = core.read_model(model=model_path) self.compiled_model = core.compile_model(model = model, device_name=self.device)
左滑查看更多
2. 讀圖
我們使用 opencv讀取任意一張彩色圖像:
Image = cv2.imread(“image_path”)
3. 預(yù)處理
預(yù)處理主要包括 3 部分,其一是將圖像重新排列為模型所需要的類型(一般來說是 batch Size, channels, height, width),其二是歸一化圖像大小為模型輸入需求的大小,其三是將 opencv 的圖像原始數(shù)據(jù)放置到 numpy 類型的數(shù)據(jù)中方便處理。
以下是一個簡單的 Python 預(yù)處理,展示了如何對輸入的圖像進行預(yù)處理:
def Preprocess(self, image: cv2.Mat, targetShape: list): th, tw = targetShape h, w = image.shape[:2] if h>w: scale = min(th / h, tw / w) inp = np.zeros((th, tw, 3), dtype = np.uint8) nw = int(w * scale) nh = int(h * scale) a = int((nh-nw)/2) inp[: nh, a:a+nw, :] = cv2.resize(cv2.cvtColor(image, cv2.COLOR_BGR2RGB), (nw, nh)) else: scale = min(th / h, tw / w) inp = np.zeros((th, tw, 3), dtype = np.uint8) nw = int(w * scale) nh = int(h * scale) a = int((nw-nh)/2) inp[a: a+nh, :nw, :] = cv2.resize(cv2.cvtColor(image, cv2.COLOR_BGR2RGB), (nw, nh)) rgb = np.array([inp], dtype = np.float32) / 255.0 return np.transpose(rgb, (0, 3, 1, 2)) # 重新排列為batch_size, channels, height, width
左滑查看更多
4. 推理
在模型的推理之前需要先加載預(yù)訓(xùn)練好的模型,推理部分只需要調(diào)用compiled_model 將預(yù)處理好的數(shù)據(jù)放入即可得到輸出結(jié)果:
result = self.compiled_model([input])
左滑查看更多
但這只是一個同步的推理過程,有感興趣深入研究的的同學(xué)可以參考官網(wǎng)的異步推理。
5. 后處理
后處理主要有兩件事,第一是對輸出的結(jié)果進行非極大抑制,第二是將抑制后的結(jié)果進行遍歷處理掩膜。以下是一個簡短的例子:
def Postprocess(self, preds, img, orig_imgs, retina_masks, conf, iou, agnostic_nms=False): p = ops.non_max_suppression(preds[0], conf, iou, agnostic_nms, max_det=100, nc=1) results = [] proto = preds[1][-1] if len(preds[1]) == 3 else preds[1] # second output is len 3 if pt, but only 1 if exported for i, pred in enumerate(p): orig_img = orig_imgs[i] if isinstance(orig_imgs, list) else orig_imgs # path = self.batch[0] img_path = "ok" if not len(pred): # save empty boxes results.append(Results(orig_img=orig_img, path=img_path, names="segment", boxes=pred[:, :6])) continue if retina_masks: if not isinstance(orig_imgs, torch.Tensor): pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape) masks = ops.process_mask_native(proto[i], pred[:, 6:], pred[:, :4], orig_img.shape[:2]) # HWC else: masks = ops.process_mask(proto[i], pred[:, 6:], pred[:, :4], img.shape[2:], upsample=True) # HWC if not isinstance(orig_imgs, torch.Tensor): pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape) results.append( Results(orig_img=orig_img, path=img_path, names="1213", boxes=pred[:, :6], masks=masks)) return results
左滑查看更多
這樣就可以拿到這個掩碼矩陣數(shù)據(jù),這樣就可以根據(jù)這個矩陣?yán)L制掩碼即可得到最終圖像。
結(jié)語
本文介紹了如何使用 OpenVINO Python API 部署 FastSAM 模型,以實現(xiàn)快速高效的語義分割。以在較低的計算成本下提供卓越的性能。這使得 FastSAM 模型成為許多計算機視覺應(yīng)用的理想選擇,包括自動駕駛、醫(yī)學(xué)圖像分析和工業(yè)自動化等領(lǐng)域。
審核編輯:湯梓紅
-
計算機
+關(guān)注
關(guān)注
19文章
7488瀏覽量
87847 -
模型
+關(guān)注
關(guān)注
1文章
3226瀏覽量
48806 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84624 -
OpenVINO
+關(guān)注
關(guān)注
0文章
92瀏覽量
196
原文標(biāo)題:用 OpenVINO? Python API 部署 FastSam 模型 | 開發(fā)者實戰(zhàn)
文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論