RM新时代网站-首页

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

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

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

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

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

作者:馮浩遼寧科技大學(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)域。

審核編輯:湯梓紅

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

收藏 人收藏

    評論

    相關(guān)推薦

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

    象的位置和邊界。本文將介紹如何使用 OpenVINO C++ API 部署 FastSAM 模型,以實現(xiàn)快速高效的語義分割。在前文中我們發(fā)表
    的頭像 發(fā)表于 11-17 09:53 ?911次閱讀
    如何使用<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>

    通過Cortex來非常方便的部署PyTorch模型

    ,依賴于 實時推理 。在實時推理中,一個模型通常被部署為一個微服務(wù)(通常是一個 JSON API),通過它,一個軟件可以查詢模型并接收預(yù)測。讓我們以 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模型庫中的DeepLabV3+模型

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

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

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

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

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

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

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

    OpenVINO? C++ API編寫YOLOv8-Seg實例分割模型推理程序

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

    OpenVINO? C# API詳解與演示

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

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

    平臺實現(xiàn) OpenVINO 部署 RT-DETR 模型實現(xiàn)深度學(xué)習(xí)推理加速, 在本文中,我們將首先介紹基于 OpenVINO Python
    的頭像 發(fā)表于 10-20 11:15 ?958次閱讀
    基于<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 模型 | 開發(fā)者實戰(zhàn)》,在該文章中,我們基于 OpenVINO
    的頭像 發(fā)表于 11-03 14:30 ?829次閱讀
    基于<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 模型 | 開發(fā)者實戰(zhàn)》和《基于 OpenVINO C++
    的頭像 發(fā)表于 11-10 16:59 ?753次閱讀
    基于<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部署測試

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

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

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

    使用OpenVINO Model Server在哪吒開發(fā)板上部署模型

    OpenVINO Model Server(OVMS)是一個高性能的模型部署系統(tǒng),使用C++實現(xiàn),并在Intel架構(gòu)上的部署進行了優(yōu)化,使用Open
    的頭像 發(fā)表于 11-01 14:19 ?270次閱讀
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒開發(fā)板上<b class='flag-5'>部署</b><b class='flag-5'>模型</b>
    RM新时代网站-首页