吴忠躺衫网络科技有限公司

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

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

3天內不再提示

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

新機器視覺 ? 來源:小白學視覺 ? 2023-12-21 10:17 ? 次閱讀

來源:小白學視覺

YOLOv5兼具速度和精度,工程化做的特別好,Git clone到本地即可在自己的數據集上實現目標檢測任務的訓練和推理,在產業界中應用廣泛。開源社區對YOLOv5支持實例分割的呼聲高漲,YOLOv5在v7.0中正式官宣支持實例分割。

本文主要介紹在C++中使用OpenVINO工具包部署YOLOv5-Seg模型,主要步驟有:

配置OpenVINO C++開發環境

下載并轉換YOLOv5-Seg預訓練模型

使用OpenVINO Runtime C++ API編寫推理程序

下面,本文將依次詳述

1.1 配置OpenVINO C++開發環境

配置OpenVINO C++開發環境的詳細步驟,請參考《在Windows中基于Visual Studio配置OpenVINO C++開發環境》。

1.2 下載并轉換YOLOv5預訓練模型

下載并轉換YOLOv5-seg預訓練模型的詳細步驟,請參考:https://mp.weixin.qq.com/s/K3wP5YLAU4p5jsdiMYjuMg,本文所使用的OpenVINO是2022.3 LTS版。

首先,運行命令獲得 yolov5s-seg ONNX 格式模型:yolov5s-seg.onnx:


python export.py --weights yolov5s-seg.pt --include onnx

然后運行命令獲得yolov5s-seg IR格式模型:yolov5s-seg.xml和yolov5s-seg.bin,如下圖所示


mo -m yolov5s-seg.onnx --compress_to_fp16

242196be-9f94-11ee-8b88-92fbcf53809c.png

圖 1-1 yolov5-seg ONNX格式和IR格式模型

1.3 使用OpenVINO Runtime C++ API編寫推理程序

一個端到端的AI推理程序,主要包含五個典型的處理流程:

采集圖像&圖像解碼

圖像數據預處理

AI推理計算

對推理結果進行后處理

將處理后的結果集成到業務流程

24363650-9f94-11ee-8b88-92fbcf53809c.png

圖 1-2 端到端的AI推理程序處理流程

1.3.1 采集圖像&圖像解碼

OpenCV提供imread()函數將圖像文件載入內存,


Mat cv::imread (const String &filename, int flags=IMREAD_COLOR)

若是從視頻流(例如,視頻文件、網絡攝像頭、3D攝像頭(Realsense)等)中,一幀一幀讀取圖像數據到內存,則使用cv::VideoCapture類,對應范例代碼請參考OpenCV官方范例代碼:https://github.com/opencv/opencv/tree/4.x/samples/cpp。

243a3584-9f94-11ee-8b88-92fbcf53809c.png

圖 1-3 從視頻流讀取圖像幀范例

1.3.2 YOLOv5-Seg模型的圖像預處理

YOLOv5-Seg模型構架是在YOLOv5模型構架基礎上,增加了一個叫“Proto”的小型卷積神經網絡,用于輸出檢測對象掩碼(Mask),如下圖所示:

2455333e-9f94-11ee-8b88-92fbcf53809c.png

圖 1-4 YOLOv5-Seg模型輸出的代碼定義

詳細參看:https://github.com/ultralytics/yolov5/blob/master/models/yolo.py#L92

由此可知,YOLOv5-Seg模型對數據預處理的要求跟YOLOv5模型一模一樣,YOLOv5-Seg模型的預處理代碼可以復用YOLOv5模型的C++預處理代碼。

另外,從代碼可以看出YOLOv5-Seg模型的輸出有兩個張量,一個張量輸出檢測結果,一個張量輸出proto,其形狀可以用Netron打開yolov5-seg.onnx查知,如下圖所示。

2459b864-9f94-11ee-8b88-92fbcf53809c.png

圖 1-5 YOLOv5-Seg模型的輸入和輸出

“output0”是檢測輸出,第一個維度表示batch size,第二個維度表示25200條輸出,第三個維度表示有117個字段,其中前85個字段(0~84)表示:cx、cy、w、h、confidence和80個類別分數,后32個字段與”output1”做矩陣乘法,可以獲得尺寸為160x160的檢測目標的掩碼(mask)。

1.3.3 執行AI推理計算

基于OpenVINO Runtime C++ API實現AI推理計算主要有兩種方式:一種是同步推理方式,一種是異步推理方式,本文主要介紹同步推理方式。

主要步驟有:

初始化Core類:ov::Core core;

編譯模型:core.compile_model()

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

讀取圖像數據并做預處理:letterbox()

將預處理后的blob數據傳入模型輸入節點:infer_request.set_input_tensor()

調用infer()方法執行推理計算:infer_request.infer()

獲得推理結果:infer_request.get_output_tensor()

基于OpenVINO Runtime C++API的同步推理代碼如下所示:


 // -------- Step 1. Initialize OpenVINO Runtime Core --------
    ov::Core core;
    // -------- Step 2. Compile the Model --------
    auto compiled_model = core.compile_model(model_file, "GPU.1"); //GPU.1 is dGPU A770
    // -------- 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 --------
    cv::Mat img = cv::imread(image_file); //Load a picture into memory
    std::vector paddings(3);       //scale, half_h, half_w
    cv::Mat resized_img = letterbox(img, paddings); //resize to (640,640) by letterbox
    // BGR->RGB, u8(0-255)->f32(0.0-1.0), HWC->NCHW
    cv::Mat blob = cv::blobFromImage(resized_img, 1 / 255.0, cv::Size(640, 640), cv::Scalar(0, 0, 0), true);
    // -------- Step 5. Feed the blob into the input node of YOLOv5 -------
    // 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 detect = infer_request.get_output_tensor(0);
    auto detect_shape = detect.get_shape();
    std::cout << "The shape of Detection tensor:"<< detect_shape << std::endl;
    auto proto = infer_request.get_output_tensor(1);
    auto proto_shape = proto.get_shape();
std::cout << "The shape of Proto tensor:" << proto_shape << std::endl;

1.3.4 推理結果進行后處理

后處理工作主要是從”detect ”輸出張量中拆解出檢測框的位置和類別信息,并用cv::NMSBoxes()過濾掉多于的檢測框;從”detect ”輸出張量的后32個字段與”proto”輸出張量做矩陣乘法,獲得每個檢測目標的形狀為160x160的掩碼輸出,最后將160x160的掩碼映射回原始圖像完成所有后處理工作。

1.4 總結

配置OpenVINO C++開發環境后,可以直接編譯運行yolov5seg_openvino_dGPU.cpp,結果如下圖所示。使用OpenVINO Runtime C++ API函數開發YOLOv5推理程序,簡單方便,并可以任意部署在英特爾CPU、集成顯卡和獨立顯卡上。

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

    關注

    4

    文章

    3569

    瀏覽量

    89299
  • 開源
    +關注

    關注

    3

    文章

    3402

    瀏覽量

    42711
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73854
  • 開發環境
    +關注

    關注

    1

    文章

    230

    瀏覽量

    16697
  • OpenVINO
    +關注

    關注

    0

    文章

    95

    瀏覽量

    226

原文標題:1.4 總結

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    YOLOv5】LabVIEW+TensorRT的yolov5部署實戰(含源碼)

    今天主要和大家分享LabVIEW中使用純TensoRT工具包快速部署并實現yolov5的物體識別
    的頭像 發表于 08-21 22:20 ?1385次閱讀
    【<b class='flag-5'>YOLOv5</b>】LabVIEW+TensorRT的<b class='flag-5'>yolov5</b><b class='flag-5'>部署</b>實戰(含源碼)

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

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

    介紹英特爾?分布式OpenVINO?工具包

    性能。 英特爾?OpenlandOpen?管理軟件包包括英特爾?深度學習部署工具包(英特爾?DLDT)。適用于Linux *的OpenVINO?工具包的英特爾?分發版:
    發表于 07-26 06:45

    如何在OpenVINO工具包中使用帶推理引擎的blob?

    無法確定如何在OpenVINO?工具包中使用帶推理引擎的 blob。
    發表于 08-15 07:17

    使用 OpenVINO? 工具包進行停車場監控

    使用 OpenVINO? 工具包進行停車場監控
    的頭像 發表于 01-03 09:45 ?767次閱讀
    使用 <b class='flag-5'>OpenVINO</b>? <b class='flag-5'>工具包</b>進行停車場監控

    使用 OpenVINO? 工具包監控機器操作員

    使用 OpenVINO? 工具包監控機器操作員
    的頭像 發表于 01-03 09:45 ?790次閱讀
    使用 <b class='flag-5'>OpenVINO</b>? <b class='flag-5'>工具包</b>監控機器操作員

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

    下載并轉換YOLOv5預訓練模型的詳細步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優化并部署YOLOv5
    的頭像 發表于 02-15 16:53 ?5249次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

    NNCF壓縮與量化YOLOv8模型OpenVINO部署測試

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

    OpenVINO C# APIintel平臺部署YOLOv10目標檢測模型

    模型設計策略,從效率和精度兩個角度對YOLOs的各個組成部分進行了全面優化,大大降低了計算開銷,增強了性能。本文中,我們將結合OpenVINO C# API使用最新發布的
    的頭像 發表于 06-21 09:23 ?1159次閱讀
    用<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b># API<b class='flag-5'>在</b>intel平臺<b class='flag-5'>部署</b><b class='flag-5'>YOLOv</b>10目標檢測<b class='flag-5'>模型</b>
    扬中棋牌游戏中心| 888真人娱乐城| 增城太阳城巧克力| 新利娱乐| 百家乐官网平台网| 网上百家乐官网解密| 百家乐二游戏机| 大发888娱乐场网页版| 伟德亚洲| 大发百家乐官网现金网| 老钱庄百家乐官网的玩法技巧和规则| 真人百家乐破解软件下载| 大发888网页版体育| 百家乐官网牌机的破解法| 来博百家乐现金网| 威尼斯人娱乐电子游戏| 百家乐官网如何稳赢| 真人百家乐官网套红利| 博彩百家乐画谜网| 鱼台县| 明升百家乐官网娱乐城| 百家乐去哪里玩最好| 足球博彩论坛| 任我赢百家乐官网软件| 老钱庄百家乐官网的玩法技巧和规则| 威尼斯人娱乐城总部| 宾利百家乐官网现金网| 海立方百家乐海立方| 开花财国际| 任你博百家乐官网娱乐城| 大发888娱乐城官| 悠游棋牌游戏| 试玩区百家乐官网1000| 速博百家乐的玩法技巧和规则| 百家乐官网交流群号| 百家乐波音平台有假吗| 唐海县| 丽景湾百家乐官网的玩法技巧和规则| 闲和庄百家乐的玩法技巧和规则| 棋牌游戏平台| 百樂坊百家乐官网的玩法技巧和规则 |