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

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

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

如何使用OpenVINO Python API部署FastSAM模型

英特爾物聯(lián)網(wǎng) ? 來(lái)源:英特爾物聯(lián)網(wǎng) ? 2023-10-27 11:04 ? 次閱讀

作者:馮浩遼寧科技大學(xué)研究生

指導(dǎo)教師:張海剛 英特爾邊緣計(jì)算創(chuàng)新大使深圳職業(yè)技術(shù)大學(xué) 副教授

當(dāng)今,深度學(xué)習(xí)技術(shù)在計(jì)算機(jī)視覺(jué)領(lǐng)域取得了巨大的突破,使得各種圖像處理任務(wù)變得更加智能化。其中,Semantic Segmentation(語(yǔ)義分割)是一項(xiàng)重要的任務(wù),它有助于計(jì)算機(jī)理解圖像中不同對(duì)象的位置和邊界。本文將介紹如何使用 OpenVINO Python API 部署 FastSAM 模型,以實(shí)現(xiàn)快速高效的語(yǔ)義分割。

什么是 FastSAM 模型?

FastSAM 模型是一種輕量級(jí)語(yǔ)義分割模型,旨在快速而準(zhǔn)確地分割圖像中的對(duì)象。它經(jīng)過(guò)了精心設(shè)計(jì),以在較低的計(jì)算成本下提供卓越的性能。這使得 FastSAM 模型成為許多計(jì)算機(jī)視覺(jué)應(yīng)用的理想選擇,包括自動(dòng)駕駛、醫(yī)學(xué)圖像分析和工業(yè)自動(dòng)化等領(lǐng)域。

步驟一:安裝 OpenVINO

要開(kāi)始使用 OpenVINO 進(jìn)行推理 FastSAM 模型,首先需要安裝 OpenVINO Toolkit。OpenVINO 是英特爾發(fā)布的開(kāi)源工具,專(zhuān)為深度學(xué)習(xí)模型部署而設(shè)計(jì)。

你可以按照以下步驟安裝OpenVINO :

訪問(wèn)OpenVINO官方網(wǎng)站下載OpenVINO工具包。

按照官方文檔的說(shuō)明進(jìn)行安裝和配置。

步驟二:下載 FastSam 官網(wǎng)模型

FastSAM 模型可以在官方 GitHub 中找到。下載模型并將其解壓縮到合適的文件夾。根據(jù)自身情況下載合適的預(yù)訓(xùn)練模型。

這里還需要將下載到的模型,由于這個(gè)模型是采用的pytorch 類(lèi)型的格式,所以還需要將這個(gè) pt 模型轉(zhuǎn)換為 OpenVINO 的 IR 模型才能進(jìn)行調(diào)用推理。

轉(zhuǎn)換步驟如下所示:

Pytorch →onnx → IR

需要先導(dǎo)出為 onnx 標(biāo)準(zhǔn)格式,然后經(jīng)過(guò)這個(gè)壓縮優(yōu)化轉(zhuǎn)化為 IR 模型。

OpenVINO 官方提供一個(gè)模型轉(zhuǎn)換工具 Model Optimizer,可以利用這個(gè)更加便捷的轉(zhuǎn)換我們的模型。

例如:

 mo --input_model FastSAM-s.onnx

就會(huì)在當(dāng)前目錄下生成對(duì)應(yīng)的 FastSAM-s.bin和 FastSAM-s.xml 文件,這就是所謂的 IR 模型了。

步驟三:使用 OpenVINO Python API

接下來(lái),我們將使用OpenVINO Python API來(lái)部署FastSAM 模型。由于官方提供的這個(gè)預(yù)訓(xùn)練模型也是基于yolov8進(jìn)行優(yōu)化的,所以也需要有和yolov8 相似的處理步驟:

加載模型→讀圖 → 預(yù)處理 → 推理 → 后處理

1. 加載模型

加載模型需要?jiǎng)?chuàng)建一個(gè) Core,然后對(duì)模型進(jìn)行讀取編譯:

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 部分,其一是將圖像重新排列為模型所需要的類(lèi)型(一般來(lái)說(shuō)是 batch Size, channels, height, width),其二是歸一化圖像大小為模型輸入需求的大小,其三是將 opencv 的圖像原始數(shù)據(jù)放置到 numpy 類(lèi)型的數(shù)據(jù)中方便處理。

以下是一個(gè)簡(jiǎn)單的 Python 預(yù)處理,展示了如何對(duì)輸入的圖像進(jìn)行預(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])

左滑查看更多

但這只是一個(gè)同步的推理過(guò)程,有感興趣深入研究的的同學(xué)可以參考官網(wǎng)的異步推理。

5. 后處理

后處理主要有兩件事,第一是對(duì)輸出的結(jié)果進(jìn)行非極大抑制,第二是將抑制后的結(jié)果進(jìn)行遍歷處理掩膜。以下是一個(gè)簡(jiǎn)短的例子:

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

左滑查看更多

這樣就可以拿到這個(gè)掩碼矩陣數(shù)據(jù),這樣就可以根據(jù)這個(gè)矩陣?yán)L制掩碼即可得到最終圖像。

結(jié)語(yǔ)

本文介紹了如何使用 OpenVINO Python API 部署 FastSAM 模型,以實(shí)現(xiàn)快速高效的語(yǔ)義分割。以在較低的計(jì)算成本下提供卓越的性能。這使得 FastSAM 模型成為許多計(jì)算機(jī)視覺(jué)應(yīng)用的理想選擇,包括自動(dòng)駕駛、醫(yī)學(xué)圖像分析和工業(yè)自動(dòng)化等領(lǐng)域。

審核編輯:湯梓紅

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

    關(guān)注

    19

    文章

    7168

    瀏覽量

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

    關(guān)注

    1

    文章

    3032

    瀏覽量

    48346
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84068
  • OpenVINO
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    139

原文標(biāo)題:用 OpenVINO? Python API 部署 FastSam 模型 | 開(kāi)發(fā)者實(shí)戰(zhàn)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和邊界。本文將介紹如何使用 OpenVINO C++ API 部署 FastSAM 模型,以實(shí)現(xiàn)快速高效的語(yǔ)義分割。在前文中我們發(fā)表
    的頭像 發(fā)表于 11-17 09:53 ?730次閱讀
    如何使用<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b><b class='flag-5'>部署</b><b class='flag-5'>FastSAM</b><b class='flag-5'>模型</b>

    通過(guò)Cortex來(lái)非常方便的部署PyTorch模型

    ,依賴于 實(shí)時(shí)推理 。在實(shí)時(shí)推理中,一個(gè)模型通常被部署為一個(gè)微服務(wù)(通常是一個(gè) JSON API),通過(guò)它,一個(gè)軟件可以查詢模型并接收預(yù)測(cè)。讓我們以 Facebook 人工智能的 Ro
    發(fā)表于 11-01 15:25

    如何使用Python包裝器正確構(gòu)建OpenVINO工具套件

    : $ export PYTHONPATH=$PYTHONPATH:/~/openvino/bin/intel64/Release/python_api/python3.8/ $ export
    發(fā)表于 08-15 07:13

    使用OpenVINO? 部署PaddleSeg模型庫(kù)中的DeepLabV3+模型

    ? ? ? 01 概述 ? ? 本文是OpenVINO 工具套件與百度飛槳PaddlePaddle模型轉(zhuǎn)換/部署系列的第二部。這篇文章專(zhuān)注于展示如何將百度飛槳PaddelSeg項(xiàng)目
    的頭像 發(fā)表于 11-22 14:58 ?9615次閱讀
    使用<b class='flag-5'>OpenVINO</b>? <b class='flag-5'>部署</b>PaddleSeg<b class='flag-5'>模型</b>庫(kù)中的DeepLabV3+<b class='flag-5'>模型</b>

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

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

    自訓(xùn)練Pytorch模型使用OpenVINO?優(yōu)化并部署在AI愛(ài)克斯開(kāi)發(fā)板

    本文章將依次介紹如何將 Pytorch 自訓(xùn)練模型經(jīng)過(guò)一系列變換變成 OpenVINO IR 模型形式,而后使用 OpenVINO Python
    的頭像 發(fā)表于 05-26 10:23 ?785次閱讀
    自訓(xùn)練Pytorch<b class='flag-5'>模型</b>使用<b class='flag-5'>OpenVINO</b>?優(yōu)化并<b class='flag-5'>部署</b>在AI愛(ài)克斯開(kāi)發(fā)板

    如何將Pytorch自訓(xùn)練模型變成OpenVINO IR模型形式

    本文章將依次介紹如何將Pytorch自訓(xùn)練模型經(jīng)過(guò)一系列變換變成OpenVINO IR模型形式,而后使用OpenVINO Python
    的頭像 發(fā)表于 06-07 09:31 ?1651次閱讀
    如何將Pytorch自訓(xùn)練<b class='flag-5'>模型</b>變成<b class='flag-5'>OpenVINO</b> IR<b class='flag-5'>模型</b>形式

    OpenVINO? C++ API編寫(xiě)YOLOv8-Seg實(shí)例分割模型推理程序

    本文章將介紹使用 OpenVINO 2023.0 C++ API 開(kāi)發(fā)YOLOv8-Seg 實(shí)例分割(Instance Segmentation)模型的 AI 推理程序。本文 C++ 范例程序的開(kāi)發(fā)環(huán)境是 Windows + V
    的頭像 發(fā)表于 06-25 16:09 ?1284次閱讀
    用<b class='flag-5'>OpenVINO</b>? C++ <b class='flag-5'>API</b>編寫(xiě)YOLOv8-Seg實(shí)例分割<b class='flag-5'>模型</b>推理程序

    三種主流模型部署框架YOLOv8推理演示

    深度學(xué)習(xí)模型部署OpenVINO、ONNXRUNTIME、TensorRT三個(gè)主流框架,均支持Python與C++的SDK使用。對(duì)YOLOv5~YOLOv8的系列
    的頭像 發(fā)表于 08-06 11:39 ?2378次閱讀

    OpenVINO? C# API詳解與演示

    OpenVINO C# API 支持 NuGet 程序包安裝方式,這與 OpenVINO C++ 庫(kù)的安裝過(guò)程相比,更加簡(jiǎn)單。如果使用 Visual Studio 開(kāi)發(fā) AI 項(xiàng)目,則可以通過(guò) NuGet 程序包管理功能直接安裝
    的頭像 發(fā)表于 10-13 16:39 ?608次閱讀
    <b class='flag-5'>OpenVINO</b>?  C# <b class='flag-5'>API</b>詳解與演示

    基于OpenVINO Python API部署RT-DETR模型

    平臺(tái)實(shí)現(xiàn) OpenVINO 部署 RT-DETR 模型實(shí)現(xiàn)深度學(xué)習(xí)推理加速, 在本文中,我們將首先介紹基于 OpenVINO Python
    的頭像 發(fā)表于 10-20 11:15 ?779次閱讀
    基于<b class='flag-5'>OpenVINO</b> <b class='flag-5'>Python</b> <b class='flag-5'>API</b><b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

    基于OpenVINO C++ API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 開(kāi)發(fā)者實(shí)戰(zhàn)》,在該文章中,我們基于 OpenVINO
    的頭像 發(fā)表于 11-03 14:30 ?638次閱讀
    基于<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b><b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

    基于OpenVINO C# API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 開(kāi)發(fā)者實(shí)戰(zhàn)》和《基于 OpenVINO C++
    的頭像 發(fā)表于 11-10 16:59 ?606次閱讀
    基于<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b><b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

    NNCF壓縮與量化YOLOv8模型OpenVINO部署測(cè)試

    OpenVINO2023版本衍生出了一個(gè)新支持工具包NNCF(Neural Network Compression Framework – 神經(jīng)網(wǎng)絡(luò)壓縮框架),通過(guò)對(duì)OpenVINO IR格式模型的壓縮與量化更好的提升
    的頭像 發(fā)表于 11-20 10:46 ?1294次閱讀
    NNCF壓縮與量化YOLOv8<b class='flag-5'>模型</b>與<b class='flag-5'>OpenVINO</b><b class='flag-5'>部署</b>測(cè)試

    OpenVINO C# API在intel平臺(tái)部署YOLOv10目標(biāo)檢測(cè)模型

    模型設(shè)計(jì)策略,從效率和精度兩個(gè)角度對(duì)YOLOs的各個(gè)組成部分進(jìn)行了全面優(yōu)化,大大降低了計(jì)算開(kāi)銷(xiāo),增強(qiáng)了性能。在本文中,我們將結(jié)合OpenVINO C# API使用最新發(fā)布的OpenVINO
    的頭像 發(fā)表于 06-21 09:23 ?770次閱讀
    用<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b>在intel平臺(tái)<b class='flag-5'>部署</b>YOLOv10目標(biāo)檢測(cè)<b class='flag-5'>模型</b>