色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

英特爾物聯網 ? 來源:英特爾物聯網 ? 2023-06-25 16:09 ? 次閱讀

文章作者:英特爾邊緣計算創新大使戰鵬州

01. 簡介

本文章將介紹使用 OpenVINO2023.0 C++ API 開發YOLOv8-Seg 實例分割(Instance Segmentation)模型的 AI 推理程序。本文 C++ 范例程序的開發環境是 Windows + Visual Studio Community 2022。

請讀者先配置基于 Visual Studio 的 OpenVINO C++ 開發環境。

請克隆本文的代碼倉:

git clone

https://gitee.com/ppov-nuc/yolov8_openvino_cpp.git

02. 導出YOLOv8-Seg OpenVINO IR 模型

YOLOv8 是 Ultralytics 公司基于 YOLO 框架,發布的一款面向物體檢測與跟蹤、實例分割、圖像分類和姿態估計任務的 SOTA 模型工具套件。

首先用命令:

pip install -r requirements.txt

安裝 ultralytics 和 openvino-dev 。

然后使用命令:

yolo export model=yolov8n-seg.pt format=openvino half=True

向右滑動查看完整代碼

導出 FP16 精度的 OpenVINO IR 模型,如下圖所示。

792bbbb4-1013-11ee-962d-dac502259ad0.png

接著使用命令:

benchmark_app -m yolov8n-seg.xml -d GPU.1

向右滑動查看完整代碼

獲得 yolov8n-seg.xml 模型在 A770m 獨立顯卡上的異步推理計算性能,如下圖所示。

79579bb2-1013-11ee-962d-dac502259ad0.png

03.使用 OpenVINO C++ API

編寫 YOLOv8-Seg 實例分割模型推理程序

使用 OpenVINO C++ API 編寫 YOLOv8-Seg 實例分割模型推理程序主要有5個典型步驟:

1采集圖像&圖像解碼

2圖像數據預處理

3AI 推理計算(基于 OpenVINO C++ API )

4對推理結果進行后處理

5將處理后的結果可視化

79889b04-1013-11ee-962d-dac502259ad0.png

YOLOv8-Seg 實例分割模型推理程序的圖像數據預處理和AI推理計算的實現方式跟 YOLOv8 目標檢測模型推理程序的實現方式幾乎一模一樣,可以直接復用。

3.1圖像數據預處理

使用 Netron 打開 yolov8n-seg.onnx ,如下圖所示,可以看到:

輸入節點的名字:“ images ”;數據:float32[1,3,640,640]

輸出節點1的名字:“ output0 ”;數據:float32[1,116,8400]。其中116的前84個字段跟 YOLOv8 目標檢測模型輸出定義完全一致,即cx,cy,w,h 和80類的分數;后32個字段為掩膜置信度,用于計算掩膜數據。

輸出節點2的名字:“ output1 ”;數據:float32[1,32,160,160]。output0 后32個字段與 output1 的數據做矩陣乘法后得到的結果,即為對應目標的掩膜數據

79bb847e-1013-11ee-962d-dac502259ad0.png

圖像數據預處理的目標就是將任意尺寸的圖像數據轉變為形狀為[1,3,640,640],精度為 FP32 的張量。YOLOv8-Seg 模型的輸入尺寸為正方形,為了解決將任意尺寸數據放縮為正方形帶來的圖像失真問題,在圖像放縮前,采用 letterbox 算法先保持圖像的長寬比,如下圖所示,然后再使用 cv::blobFromImage 函數對圖像進行放縮。

圖像數據預處理的范例程序如下所示:

Mat letterbox(const Mat& source)
{
  int col = source.cols;
  int row = source.rows;
  int _max = MAX(col, row);
  Mat result = Mat::zeros(_max, _max, CV_8UC3);
  source.copyTo(result(Rect(0, 0, col, row)));
  return result;
}
Mat img = cv::imread("bus.jpg"); 
Mat letterbox_img = letterbox(img);
Mat blob = blobFromImage(letterbox_img, 1.0/255.0, Size(640,640), Scalar(), true);

向右滑動查看完整代碼

3.2AI同步推理計算

用 OpenVINO C++ API 實現同步推理計算,主要有七步:

1實例化 Core 對象:ov::Core core;

2編譯并載入模型:core.compile_model();

3創建推理請求:infer_request = compiled_model.create_infer_request();

4讀取圖像數據并完成預處理;

5將輸入數據傳入模型:infer_request.set_input_tensor(input_tensor);

6啟動推理計算:infer_request.infer();

7獲得推理結果:output0= infer_request.get_output_tensor(0) ;

output1= infer_request.get_output_tensor(1) ;

范例代碼如下所示:

 // -------- Step 1. Initialize OpenVINO Runtime Core --------
  ov::Core core;
  // -------- Step 2. Compile the Model --------
  auto compiled_model = core.compile_model("yolov8n-seg.xml", "CPU");
  // -------- Step 3. Create an Inference Request --------
  ov::InferRequest infer_request = compiled_model.create_infer_request();
  // -------- Step 4.Read a picture file and do the preprocess --------
  Mat img = cv::imread("bus.jpg");
  // Preprocess the image
  Mat letterbox_img = letterbox(img);
  float scale = letterbox_img.size[0] / 640.0;
  Mat blob = blobFromImage(letterbox_img, 1.0 / 255.0, Size(640, 640), Scalar(), true);
  // -------- Step 5. Feed the blob into the input node of the Model -------
  // Get input port for model with one input
  auto input_port = compiled_model.input();
  // Create tensor from external memory
  ov::Tensor input_tensor(input_port.get_element_type(), input_port.get_shape(), blob.ptr(0));
  // Set input tensor for model with one input
  infer_request.set_input_tensor(input_tensor);
  // -------- Step 6. Start inference --------
  infer_request.infer();
  // -------- Step 7. Get the inference result --------
  auto output0 = infer_request.get_output_tensor(0); //output0
  auto output1 = infer_request.get_output_tensor(1); //otuput1

向右滑動查看完整代碼

3.3推理結果后處理

實例分割推理程序的后處理是從結果中拆解出預測別類(class_id),類別分數(class_score),類別邊界框(box)和類別掩膜(mask),范例代碼如下所示:

// -------- Step 8. Postprocess the result --------
  Mat output_buffer(output0_shape[1], output0_shape[2], CV_32F, output0.data());
  Mat proto(32, 25600, CV_32F, output1.data()); //[32,25600]
  transpose(output_buffer, output_buffer); //[8400,116]
  float score_threshold = 0.25;
  float nms_threshold = 0.5;
  std::vector class_ids;
  std::vector class_scores;
  std::vector boxes;
  std::vector mask_confs;
  // Figure out the bbox, class_id and class_score
  for (int i = 0; i < output_buffer.rows; i++) {
 ? ? ? ?Mat classes_scores = output_buffer.row(i).colRange(4, 84);
 ? ? ? ?Point class_id;
 ? ? ? ?double maxClassScore;
 ? ? ? ?minMaxLoc(classes_scores, 0, &maxClassScore, 0, &class_id);


 ? ? ? ?if (maxClassScore > score_threshold) {
      class_scores.push_back(maxClassScore);
      class_ids.push_back(class_id.x);
      float cx = output_buffer.at(i, 0);
      float cy = output_buffer.at(i, 1);
      float w = output_buffer.at(i, 2);
      float h = output_buffer.at(i, 3);
      int left = int((cx - 0.5 * w) * scale);
      int top = int((cy - 0.5 * h) * scale);
      int width = int(w * scale);
      int height = int(h * scale);
      cv::Mat mask_conf = output_buffer.row(i).colRange(84, 116);
      mask_confs.push_back(mask_conf);
      boxes.push_back(Rect(left, top, width, height));
    }
  }
  //NMS
  std::vector indices;
  NMSBoxes(boxes, class_scores, score_threshold, nms_threshold, indices);

向右滑動查看完整代碼

完整范例參考參見:yolov8_seg_ov_infer.cpp ,運行結果如下圖所示:

04 結論

OpenVINOC++ API 簡單清晰,易學易用。本文用不到100行(不含可視化檢測結果) C++ 代碼就實現了基于 OpenVINO 的 YOLOv8-Seg 實例分割模型推理程序,在英特爾 獨立顯卡 A770m 上獲得了較好的推理計算性能。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 英特爾
    +關注

    關注

    61

    文章

    10002

    瀏覽量

    172115
  • WINDOWS
    +關注

    關注

    4

    文章

    3556

    瀏覽量

    89081
  • API
    API
    +關注

    關注

    2

    文章

    1509

    瀏覽量

    62255
  • 程序
    +關注

    關注

    117

    文章

    3794

    瀏覽量

    81270
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73773

原文標題:用OpenVINO? C++ API編寫YOLOv8-Seg實例分割模型推理程序 | 開發者實戰

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

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

    YOLOv5兼具速度和精度,工程化做的特別好,Git clone到本地即可在自己的數據集上實現目標檢測任務的訓練和推理,在產業界中應用廣泛。開源社區對YOLOv5支持實例
    的頭像 發表于 12-21 10:17 ?2193次閱讀
    在<b class='flag-5'>C++</b>中使用<b class='flag-5'>OpenVINO</b>工具包部署<b class='flag-5'>YOLOv5-Seg</b><b class='flag-5'>模型</b>

    使用OpenVINO運行C++ API創建輸入tensor并執行推理遇到的問題求解

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

    TensorRT 8.6 C++開發環境配置與YOLOv8實例分割推理演示

    YOLOv8實例分割TensorRT 推理代碼已經完成C++類封裝,三行代碼即可實現YOLOv8
    的頭像 發表于 04-25 10:49 ?5982次閱讀
    TensorRT 8.6 <b class='flag-5'>C++</b>開發環境配置與<b class='flag-5'>YOLOv8</b><b class='flag-5'>實例</b><b class='flag-5'>分割</b><b class='flag-5'>推理</b>演示

    在AI愛克斯開發板上OpenVINO?加速YOLOv8分類模型

    本系列文章將在 AI 愛克斯開發板上使用 OpenVINO 開發套件依次部署并測評 YOLOv8 的分類模型、目標檢測模型實例
    的頭像 發表于 05-05 11:47 ?1089次閱讀
    在AI愛克斯開發板上<b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv8</b>分類<b class='flag-5'>模型</b>

    在AI愛克斯開發板上OpenVINO?加速YOLOv8目標檢測模型

    《在 AI 愛克斯開發板上 OpenVINO 加速 YOLOv8 分類模型》介紹了在 AI 愛克斯開發板上使用 OpenVINO 開發套件
    的頭像 發表于 05-12 09:08 ?1360次閱讀
    在AI愛克斯開發板上<b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv8</b>目標檢測<b class='flag-5'>模型</b>

    AI愛克斯開發板上使用OpenVINO加速YOLOv8目標檢測模型

    《在AI愛克斯開發板上OpenVINO加速YOLOv8分類模型》介紹了在AI愛克斯開發板上使用OpenVINO 開發套件部署并測評
    的頭像 發表于 05-26 11:03 ?1299次閱讀
    AI愛克斯開發板上使用<b class='flag-5'>OpenVINO</b>加速<b class='flag-5'>YOLOv8</b>目標檢測<b class='flag-5'>模型</b>

    在AI愛克斯開發板上OpenVINO?加速YOLOv8-seg實例分割模型

    《在 AI 愛克斯開發板上 OpenVINO 加速 YOLOv8 目標檢測模型》介紹了在 AI 愛克斯開發板上使用 OpenVINO 開發
    的頭像 發表于 06-05 11:52 ?1049次閱讀
    在AI愛克斯開發板上<b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv8-seg</b><b class='flag-5'>實例</b><b class='flag-5'>分割</b><b class='flag-5'>模型</b>

    教你如何用兩行代碼搞定YOLOv8各種模型推理

    大家好,YOLOv8 框架本身提供的API函數是可以兩行代碼實現 YOLOv8 模型推理,這次我把這段代碼封裝成了一個類,只有40行代碼左右
    的頭像 發表于 06-18 11:50 ?3131次閱讀
    教你如何用兩行代碼搞定<b class='flag-5'>YOLOv8</b>各種<b class='flag-5'>模型</b><b class='flag-5'>推理</b>

    在AI愛克斯開發板上OpenVINO?加速YOLOv8-seg實例分割模型

    《在 AI 愛克斯開發板上 OpenVINO 加速 YOLOv8 目標檢測模型》介紹了在 AI 愛克斯開發板上使用 OpenVINO 開發
    的頭像 發表于 06-30 10:43 ?982次閱讀
    在AI愛克斯開發板上<b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?加速<b class='flag-5'>YOLOv8-seg</b><b class='flag-5'>實例</b><b class='flag-5'>分割</b><b class='flag-5'>模型</b>

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

    深度學習模型部署有OpenVINO、ONNXRUNTIME、TensorRT三個主流框架,均支持Python與C++的SDK使用。對YOLOv5~Y
    的頭像 發表于 08-06 11:39 ?2792次閱讀

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

    應用中,我們為了與當前軟件平臺集成更多會采用 C++ 平臺,因此在本文中,我們將基于 OpenVINO C++ API 向大家展示了不包含后處理的 RT-DETR
    的頭像 發表于 11-03 14:30 ?906次閱讀
    基于<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C++</b> <b class='flag-5'>API</b>部署RT-DETR<b class='flag-5'>模型</b>

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

    Python API 部署 RT-DETR 模型 | 開發者實戰》和《基于 OpenVINO C++ API 部署 RT-DETR
    的頭像 發表于 11-10 16:59 ?789次閱讀
    基于<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b># <b class='flag-5'>API</b>部署RT-DETR<b class='flag-5'>模型</b>

    基于QT5+OpenCV+OpenVINO C++的應用打包過程

    QT C++寫了一個YOLOv5模型推理演示應用。
    的頭像 發表于 01-26 10:17 ?1440次閱讀
    基于QT5+OpenCV+<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C++</b>的應用打包過程

    OpenVINO C# API在intel平臺部署YOLOv10目標檢測模型

    模型設計策略,從效率和精度兩個角度對YOLOs的各個組成部分進行了全面優化,大大降低了計算開銷,增強了性能。在本文中,我們將結合OpenVINO C# API使用最新發布的
    的頭像 發表于 06-21 09:23 ?1102次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b># <b class='flag-5'>API</b>在intel平臺部署<b class='flag-5'>YOLOv</b>10目標檢測<b class='flag-5'>模型</b>
    主站蜘蛛池模板: 伊人久久精品中文字幕| 亚洲精品中文字幕无码A片蜜桃| 香蕉鱼视频观看在线视频下载| 百性阁论坛首页| 美女用手扒开粉嫩的屁股| 中文字幕亚洲欧美在线视频| 久久久精品免费免费直播 | 午夜色网站| 国产乱人精品视频AV麻豆| 羞羞漫画在线播放| 国产综合在线视频| 一本色道久久综合亚洲精品蜜桃冫 | 久久激情网| 中文字幕在线播放视频| 男男女女爽爽爽视频免费| WWW污污污抽搐喷潮COM| 日韩中文无线码在线视频| 精品亚洲视频在线观看| 亚洲欧美综合中文字幕| 久久精品无码人妻无码AV蜜臀| 在线亚洲中文字幕36页| 男人电影天堂手机| 干性感美女| 亚洲在线国产日韩欧美| 毛片在线网址| 超碰97免费人妻| 亚洲 无码 在线 专区| 久久免费高清| a免费在线观看视频| 忘忧草日本在线WWW日本| 黄页免费观看| 99久久久无码国产精品不卡按摩 | 亚洲中文字幕国产综合| 老师你下面好紧夹死了| 超碰在线视频caoporn| 亚州精品视频| 麻豆沈芯语| 粉嫩AV国产一区二区福利姬| 亚洲精品无码AAAAAA片| 免费成人高清在线视频| 国产传媒在线观看|