在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

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

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

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

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

當(dāng)今,深度學(xué)習(xí)技術(shù)在計算機(jī)視覺領(lǐng)域取得了巨大的突破,使得各種圖像處理任務(wù)變得更加智能化。其中,Semantic Segmentation(語義分割)是一項重要的任務(wù),它有助于計算機(jī)理解圖像中不同對象的位置和邊界。本文將介紹如何使用OpenVINOC++ API 部署 FastSAM 模型,以實現(xiàn)快速高效的語義分割。在前文中我們發(fā)表了《基于OpenVINO Python API 部署 FastSAM 模型 | 開發(fā)者實戰(zhàn)》,在該文章中我們向大家展示了基于 OpenVINO Python API 的基本部署流程。在實際部署過程中會考慮到由效率問題,使得我們可能更傾向于采用更高效的部署方式,故今天我們將向大家展示使用OpenVINOC++ API 部署 FastSAM 模型,并且對比預(yù)處理、推理、后處理等時間的消耗。

FastSAM 官方倉庫[1]

OpenVINO 官方倉庫[2]

FastSAM 模型部署實現(xiàn)代碼倉庫[3]

a0c44824-8478-11ee-939d-92fbcf53809c.png

首先簡單解釋一下這個 C++ 版本OpenVINO的推理構(gòu)建流程。首先需要一個 Core 去讀取前面生成的 xml 文件(這個文件包含了模型的網(wǎng)絡(luò)結(jié)構(gòu),與其對應(yīng)的同名文件 bin 后綴的是模型的權(quán)重和偏置)。

讀取完成之后他會返回一個 Model 類,可以通過這個 Model 類來生成生成最終編譯完成的模型。在這里的編譯不是我們常規(guī)意義上的編譯代碼,本質(zhì)上是在模型中插入一些函數(shù)指針,也就是所謂的預(yù)處理和后處理的函數(shù)。當(dāng)我們有這個 PrePostProcessor 的步驟之后在我們每次調(diào)用推理的時候就可以不用自己去手動的處理圖像的一些簡單操作,比如轉(zhuǎn)換圖像大小、轉(zhuǎn)換數(shù)據(jù)排列順序、以及顏色編碼順序等等。

拿到這個 CompiledModel 之后可以調(diào)用這個 create_infer_request 來創(chuàng)建最終我們需要的推理請求的類。最后調(diào)用 infer 進(jìn)行模型推理。

01模型的轉(zhuǎn)化和優(yōu)化

在之前的文章我們已經(jīng)了解到了模型的導(dǎo)出方式,大家可以參考《基于OpenVINO Python API 部署 FastSAM模型 | 開發(fā)者實戰(zhàn)》,或者參考筆者的 GitHub[4] 中的導(dǎo)出部分。

02初始化推理引擎和加載模型

在 C++ 初始化OpenVINO推理引擎和 Python 的基本結(jié)構(gòu)相似,也是使用一個 Ov::Core 來創(chuàng)建 Ov::Model。

m_model = m_core.read_model(xml_path);
m_ppp = std::make_shared(m_model);
 
 
m_ppp->input().tensor()
  .set_element_type(ov::f32) 
  .set_color_format(ov::RGB)
  .set_layout("NCHW");
 
/*

左滑查看更多

還可添加你模型所需要的預(yù)處理和后處理的操作

  m_ppp->input().preprocess()
       .convert_layout("NCHW"); //比如排列順序轉(zhuǎn)換
*/
     
m_model = m_ppp->build();set_shape(ov::Shape({1, 3, 640, 640}))

左滑查看更多

03預(yù)處理輸入圖像

本次我們采用的是手動預(yù)處理輸出數(shù)據(jù),需要預(yù)處理輸入圖像的大小位模型所需的輸入的大小即 640 x 640,其次我們需要轉(zhuǎn)換這個由 opencv 讀取來的 BGR 圖像位 RGB,最后需要將這個數(shù)據(jù)排列順序由 NWHC 轉(zhuǎn)換為 NCWH。實現(xiàn)代碼如下:

ov::Tensor FastSAM::Preprocess(const cv::Mat &image)
{
  float height = (float)image.rows;
  float width = (float)image.cols;
  
  int target_size = input_height;
  float r = std::min(target_size / height, target_size / width);
  int padw = (int)std::round(width * r);
  int padh = (int)std::round(height * r);
  
    
  if((int)width != padw || (int)height != padh) 
    cv::resize(image, m_image, cv::Size(padw, padh));
  else 
    m_image = image.clone();
  
  float _dw = target_size - padw;
  float _dh = target_size - padh;
  _dw /= 2.0f;
  _dh /= 2.0f;
  int top = int(std::round(_dh - 0.1f));
  int bottom = int(std::round(_dh + 0.1f));
  int left = int(std::round(_dw - 0.1f));
  int right = int(std::round(_dw + 0.1f));
  cv::copyMakeBorder(m_image, m_image, top, bottom, left, right, cv::BORDER_CONSTANT,
            cv::Scalar(114, 114, 114));
  
  this->ratio = 1 / r;
  this->dw = _dw;
  this->dh = _dh;
  
  Normalize2Vec(m_image);
  
  return ov::f32, ov::Shape({1, 3, (unsigned long)input_height, (unsigned long)input_width}), input_data.data());  
}

左滑查看更多

04執(zhí)行推理

在執(zhí)行完這個 Preprocess 之后會返回一個 ov::Tensor, 將前面預(yù)處理好的 input tensor 設(shè)置為輸入數(shù)據(jù),然后執(zhí)行 infer 即可進(jìn)行推理。

m_request.set_input_tensor(input_tensor);
m_request.infer();

左滑查看更多

05獲取和處理輸出數(shù)據(jù)

在推理完成之后可以通過調(diào)用 get_output_tensor 來獲取指定索引的輸出指針,這里我們采用的模型只有兩個維度的輸出。

auto* p0 = m_request.get_output_tensor(0).data(); // 獲取第一個維度輸出
auto* p1 = m_request.get_output_tensor(1).data(); // 獲取第二個維度輸出

左滑查看更多

a0e61fee-8478-11ee-939d-92fbcf53809c.png

當(dāng)拿我們到這個輸出的數(shù)據(jù)之后我們需要解析后做后處理,首先是對第一個維度的數(shù)據(jù)解析做非極大抑制,將得到的 bbox 的坐標(biāo)進(jìn)行還原,使得這個坐標(biāo)對應(yīng)的是原始圖像掩碼的坐標(biāo)而不是輸入圖像掩碼的坐標(biāo)。最后把還原后的數(shù)據(jù)的最后掩碼維度和模型輸出維度進(jìn)行矩陣相乘后的到最終的 mask。

std::vector FastSAM::Postprocess(std::vector &preds, const cv::Mat& oriImage)
{
  std::vector result;
 
  std::vector remat;
  NMS(remat, preds[0], 100);
  cv::Mat proto = preds[1];
  cv::Mat box = remat[0];
  cv::Mat mask = remat[1];
  ScaleBoxes(box, oriImage);
 
  return ProcessMaskNative(oriImage, proto, mask, box, oriImage.size());
}

左滑查看更多

06繪制掩碼到原圖上

繪制掩碼就比較簡單了,將原始圖像輸入,和 mask 掩碼矩陣傳入進(jìn)來。最后會把生成的掩碼添加到 image 上。

void FastSAM::Render(cv::Mat &image, const std::vector& vremat)
{
 
  cv::Mat bbox = vremat[0];
  float *pxvec = bbox.ptr(0);
   
  for (int i = 1; i < vremat.size(); i++) {
 ? ? ? ?cv::Mat mask = vremat[i];
 ? ? ? ?auto color = RandomColor();
 
 ? ? ? ?for (int y = 0; y < mask.rows; y++) {
 ? ? ? ?const float *mp = mask.ptr(y);
    uchar *p = image.ptr(y);
    for (int x = 0; x < mask.cols; x++) {
 ? ? ? ? ? ?if (mp[x] == 1.0) {
 ? ? ? ? ? ?p[0] = cv::saturate_cast(p[0] * 0.5 + color[0] * 0.5);
      p[1] = cv::saturate_cast(p[1] * 0.5 + color[1] * 0.5);
      p[2] = cv::saturate_cast(p[2] * 0.5 + color[2] * 0.5);
      }
      p += 3;
    }
    }
  }
}

左滑查看更多

07實現(xiàn)效果展示

FastSAM With OpenVINO推理時間(未加渲染時間)

使用設(shè)備: xBoard、iGPU

a1356072-8478-11ee-939d-92fbcf53809c.png

審核編輯:湯梓紅

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

    關(guān)注

    61

    文章

    10132

    瀏覽量

    173499
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1552

    瀏覽量

    63254
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2116

    瀏覽量

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

    關(guān)注

    1

    文章

    3459

    瀏覽量

    49767
  • OpenVINO
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    377

原文標(biāo)題:基于 OpenVINO? C++ API 的 FastSAM 模型的部署 | 開發(fā)者實戰(zhàn)

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

收藏 0人收藏

    評論

    相關(guān)推薦

    C#集成OpenVINO?:簡化AI模型部署

    在開源測控、機(jī)器視覺、數(shù)采與分析三大領(lǐng)域中,如何快速將AI模型集成到應(yīng)用程序中, 實現(xiàn)AI賦能和應(yīng)用增值? 最容易的方式是:在C#中,使用 OpenVINO工具套件 集成AI模型。 1
    的頭像 發(fā)表于 02-17 10:03 ?1541次閱讀
    <b class='flag-5'>C</b>#集成<b class='flag-5'>OpenVINO</b>?:簡化AI<b class='flag-5'>模型</b><b class='flag-5'>部署</b>

    在Ubuntu上搭建OpenVINO C++程序開發(fā)環(huán)境

    在應(yīng)用 Anomalib 和 OpenVINO 實現(xiàn)瑕疵檢測的過程中,經(jīng)常會在 Ubuntu 下訓(xùn)練并部署 AI 模型。筆者一直在 Windows 上開發(fā)程序,比較喜歡 Visual Studio
    發(fā)表于 08-09 09:42 ?1256次閱讀
    在Ubuntu上搭建<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C++</b>程序開發(fā)環(huán)境

    為什么無法在運行時C++推理中讀取OpenVINO?模型

    使用模型優(yōu)化器 2021.1 版OpenVINO?轉(zhuǎn)換模型 使用 Runtime 2022.3 版本在 C++ 推理實現(xiàn) ( core.read_model()) 中讀取
    發(fā)表于 03-05 06:17

    使用OpenVINO運行C++ API創(chuàng)建輸入tensor并執(zhí)行推理遇到的問題求解

    使用 OpenVINO? 運行時 C++ API 創(chuàng)建輸入 tensor 并執(zhí)行推理: ov::Tensor input_tensor = ov::Tensor(input_type
    發(fā)表于 08-15 08:22

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

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

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

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

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

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

    OpenVINO? C# API詳解與演示

    OpenVINO C# API 支持 NuGet 程序包安裝方式,這與 OpenVINO C++ 庫的安裝過程相比,更加簡單。如果使用 Vi
    的頭像 發(fā)表于 10-13 16:39 ?1041次閱讀
    <b class='flag-5'>OpenVINO</b>?  <b class='flag-5'>C</b># <b class='flag-5'>API</b>詳解與演示

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

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

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

    象的位置和邊界。本文將介紹如何使用 OpenVINO Python API 部署 FastSAM 模型,以實現(xiàn)快速高效的語義分割。
    的頭像 發(fā)表于 10-27 11:04 ?977次閱讀

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

    應(yīng)用中,我們?yōu)榱伺c當(dāng)前軟件平臺集成更多會采用 C++ 平臺,因此在本文中,我們將基于 OpenVINO C++ API 向大家展示了不包含后處理的 RT-DETR
    的頭像 發(fā)表于 11-03 14:30 ?1251次閱讀
    基于<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C++</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 C++
    的頭像 發(fā)表于 11-10 16:59 ?996次閱讀
    基于<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b># <b class='flag-5'>API</b><b class='flag-5'>部署</b>RT-DETR<b class='flag-5'>模型</b>

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

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

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優(yōu)化與整理,已經(jīng)是非常貼近開發(fā)的使用習(xí)慣與
    的頭像 發(fā)表于 07-26 09:20 ?1332次閱讀

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

    OpenVINO Model Server(OVMS)是一個高性能的模型部署系統(tǒng),使用C++實現(xiàn),并在Intel架構(gòu)上的部署進(jìn)行了優(yōu)化,使用
    的頭像 發(fā)表于 11-01 14:19 ?562次閱讀
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒開發(fā)板上<b class='flag-5'>部署</b><b class='flag-5'>模型</b>
    主站蜘蛛池模板: 加勒比日本在线 | 黄视频日本 | 国产成人精品系列在线观看 | 欧美三级视频在线播放 | 亚洲伊人久久大香线蕉啊 | 88av视频在线 | 日本黄色www | 六月丁香深爱六月综合激情 | 黄色短视频软件 | 久久婷婷久久一区二区三区 | 澳门久久精品 | 亚洲人在线 | 成人一级毛片 | 狠狠色丁香久久综合网 | 国产亚洲欧美日本一二三本道 | 男人和女人做a免费视频 | 午夜黄色网址 | 天堂在线资源网 | 欧美成人午夜精品免费福利 | 色操网| 免费一级毛片在线播放不收费 | 毛片爽爽爽免费看 | 2021国产精品午夜久久 | 国产亚洲高清在线精品不卡 | 四虎传媒 | 亚洲区视频在线观看 | 美女扒开尿口让男生添 漫画 | xxxxbbbb欧美| 日本不卡在线视频 | 欧美另类色| 欧美精品二区 | 在线精品国产成人综合第一页 | 日本免费人成在线网站 | 97影院理论在线观看 | 一区二区三区四区欧美 | 女人色视频| 国产福利午夜 | 免费国产不卡午夜福在线观看 | 萌白酱一线天粉嫩喷水在线观看 | 自拍偷自拍亚洲精品被多人伦好爽 | 一级录像 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品