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

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

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

3天內不再提示

基于C#和OpenVINO?在英特爾獨立顯卡上部署PP-TinyPose模型

英特爾物聯網 ? 來源:英特爾物聯網 楊雪鋒 ? 作者:英特爾物聯網 楊雪 ? 2022-11-18 18:27 ? 次閱讀

作者:英特爾物聯網行業創新大使 楊雪鋒

OpenVINO 2022.2版開始支持英特爾獨立顯卡,還能通過“累計吞吐量”同時啟動集成顯卡 + 獨立顯卡助力全速 AI 推理。本文基于 C# 和 OpenVINO,將 PP-TinyPose 模型部署在英特爾獨立顯卡上。

1.1 PP-TinyPose 模型簡介

PP-TinyPose 是飛槳 PaddleDetecion 針對移動端設備優化的實時關鍵點檢測模型,可流暢地在移動端設備上執行多人姿態估計任務。PP-TinyPose 可以基于人體17個關鍵點數據集訓練后,識別人體關鍵點,獲得人體姿態,如圖 1所示。

6c8852f8-6593-11ed-8abf-dac502259ad0.png

圖 1 PP-TinyPose識別效果圖

PP-TinyPose 開源項目倉庫:

https://gitee.com/paddlepaddle/PaddleDetection/tree/release/2.5/configs/keypoint/tiny_pose

1.1.1

PP-TinyPose 框架

PP-TinyPose 提供了完整的人體關鍵點識別解決方案,主要包括行人檢測以及關鍵點檢測兩部分。行人檢測通過PP-PicoDet模型來實現,關鍵點識別通過 Lite-HRNet 骨干網絡+DARK關鍵點矯正算法來實現,如下圖所示:

6cb65284-6593-11ed-8abf-dac502259ad0.png

圖 2 PP-TinyPose人體關鍵點識別

1.2 構建開發環境

本文構建的開發環境,如下所示:

OpenVINOTM:2022.2.0

OpenCV:4.5.5

Visual Studio:2022

C#框架:.NET 6.0

OpenCvSharp:OpenCvSharp4

1.2.1

下載項目完整源代碼

項目所使用的源碼已在完整開源,讀者可以直接克隆到本地。

git clone 
https://gitee.com/guojin-yan/Csharp_and_OpenVINO_deploy_PP-TinyPose.git

1.3 在 C# 中調用 OpenVINO Runtime API

由于 OpenVINO Runtime 只有 C++Python API 接口,需要在 C# 中通過動態鏈接庫方式調用 OpenVINO Runtime C++ API。具體教程參考《在C#中調用OpenVINO 模型》,對應的參考范例:

https://github.com/guojin-yan/OpenVinoSharp.git

1.3.1

在 C# 中構建 Core 類

為了更方便的使用,可以在 C# 中,將調用細節封裝到 Core 類中。根據模型推理的步驟,構建模型推理類:

(1)構造函數

public Core(string model_file, string device_name){
// 初始化推理核心
ptr = NativeMethods.core_init(model_file, device_name);
}

向右滑動查看完整代碼

在該方法中,主要是調用推理核心初始化方法,初始化推理核心,讀取本地模型,將模型加載到設備、創建推理請求等模型推理步驟。

(2)設置模型輸入形狀

// @brief 設置推理模型的輸入節點的大小
// @param input_node_name 輸入節點名
// @param input_size 輸入形狀大小數組
public void set_input_sharp(string input_node_name, ulong[] input_size) {
// 獲取輸入數組長度
int length = input_size.Length;
if (length == 4) {
// 長度為4,判斷為設置圖片輸入的輸入參數,調用設置圖片形狀方法
ptr = NativeMethods.set_input_image_sharp(ptr, input_node_name, ref input_size[0]);
}
else if (length == 2) {
// 長度為2,判斷為設置普通數據輸入的輸入參數,調用設置普通數據形狀方法
ptr = NativeMethods.set_input_data_sharp(ptr, input_node_name, ref input_size[0]);
}
else {
// 為防止輸入發生異常,直接返回
return;
}
}

向右滑動查看完整代碼

(3)加載推理數據

 // @brief 加載推理數據
    // @param input_node_name 輸入節點名
    // @param input_data 輸入數據數組
    public void load_input_data(string input_node_name, float[] input_data) {
      ptr = NativeMethods.load_input_data(ptr, input_node_name, ref input_data[0]);
    }
    // @brief 加載圖片推理數據
    // @param input_node_name 輸入節點名
    // @param image_data 圖片矩陣
    // @param image_size 圖片矩陣長度
    public void load_input_data(string input_node_name, byte[] image_data, ulong image_size, int type) {
      ptr = NativeMethods.load_image_input_data(ptr, input_node_name, ref image_data[0], image_size, type);
    }

向右滑動查看完整代碼

加載推理數據主要包含圖片數據和普通的矩陣數據,其中對于圖片的預處理,也已經在 C++ 中進行封裝,保證了圖片數據在傳輸中的穩定性。

(4)模型推理

  // @brief 模型推理
    public void infer() {
      ptr = NativeMethods.core_infer(ptr);
    }

(5)讀取推理結果數據

 // @brief 讀取推理結果數據
    // @param output_node_name 輸出節點名
    // @param data_size 輸出數據長度
    // @return 推理結果數組
    public T[] read_infer_result(string output_node_name, int data_size) {
      // 獲取設定類型
      string t = typeof(T).ToString();
      // 新建返回值數組
      T[] result = new T[data_size];
      if (t == "System.Int32") { // 讀取數據類型為整形數據
        int[] inference_result = new int[data_size];
        NativeMethods.read_infer_result_I32(ptr, output_node_name, data_size, ref inference_result[0]);
        result = (T[])Convert.ChangeType(inference_result, typeof(T[]));
        return result;
      }
      else { // 讀取數據類型為浮點型數據
        float[] inference_result = new float[data_size];
        NativeMethods.read_infer_result_F32(ptr, output_node_name, data_size, ref inference_result[0]);
        result = (T[])Convert.ChangeType(inference_result, typeof(T[]));
        return result;
      }
    }

在讀取模型推理結果時,支持讀取整形數據和浮點型數據。

(6)清除地址

 // @brief 刪除創建的地址
    public void delet() {
      NativeMethods.core_delet(ptr);
    }

完成上述封裝后,在 C# 平臺下,調用 Core 類,就可以方便實現 OpenVINO 推理程序了。

1.4 下載并轉換 PP-PicoDet 模型

1.4.1

PP-PicoDet 模型簡介

Picodet_s_320_lcnet_pedestrian Paddle 格式模型信息如下表所示,其默認的輸入為動態形狀,需要將該模型的輸入形狀變為靜態形狀。

6cf2dc7c-6593-11ed-8abf-dac502259ad0.png

表 1 Picodet_s_320_lcnet_pedestrian Paddle 格式模型信息

1.4.2

模型下載與轉換

第一步,下載模型

命令行直接輸入以下模型導出代碼,使用 PaddleDetecion 自帶的方法,下載預訓練模型并將模型轉為導出格式。

導出 picodet_s_320_lcnet_pedestrian 模型:

python tools/export_model.py -c 
configs/picodet/application/pedestrian_detection/picodet_s_320_lcnet_pedestrian.yml -o export.benchmark=False 
export.nms=False 
weights=https://bj.bcebos.com/v1/paddledet/models/keypoint/tinypose_enhance/picodet_s_320_lcnet_pedestrian.p
dparams --output_dir=output_inference

導出 picodet_s_192_lcnet_pedestrian 模型:

 python tools/export_model.py -c 
 configs/picodet/application/pedestrian_detection/picodet_s_192_lcnet_pedestrian.yml -o export.benchmark=False 
 export.nms=False 
 weights=https://bj.bcebos.com/v1/paddledet/models/keypoint/tinypose_enhance/picodet_s_192_lcnet_pedestrian.p
 dparams --output_dir=output_inference

此處導出模型的命令與我們常用的命令導出增加了兩個指令:

export.benchmark=False 和 export.nms=False

主要是關閉模型后處理以及打開模型極大值抑制。如果不關閉模型后處理,模型會增加一個輸入,且在模型部署時會出錯。

第二步,將模型轉換為ONNX格式

該方式需要安裝 paddle2onnx 和 onnxruntime 模塊。導出方式比較簡單,比較注意的是需要指定模型的輸入形狀,用于固定模型批次的大小。在命令行中輸入以下指令進行轉換:

paddle2onnx --model_dir output_inference/picodet_s_320_lcnet_pedestrian --model_filename model.pdmodel --
params_filename model.pdiparams --input_shape_dict "{'image':[1,3,320,320]}" --opset_version 11 --save_filepicodet_s_320_lcnet_pedestrian.onnx

第三步,轉換為IR格式

利用 OpenVINO 模型優化器,可以實現將 ONNX 模型轉為 IR 格式

mo --input_model picodet_s_320_lcnet_pedestrian.onnx --input_shape [1,3,256,192] --data_type FP16

1.5 下載并轉換 PP-TinyPose 模型

1.5.1

PP-TinyPose 模型簡介

PP-TinyPose 模型信息如下表所示,其默認的輸入為動態形狀,需要將該模型的輸入形狀變為靜態形狀。

6d127000-6593-11ed-8abf-dac502259ad0.png

表 2 PP-TinyPose 256×192 Paddle 模型信息

1.5.2

模型下載與轉換

第一步,下載模型

命令行直接輸入以下代碼,或者瀏覽器輸入后面的網址即可。

wget https://bj.bcebos.com/v1/paddledet/models/keypoint/tinypose_enhance/tinypose_256x192.zip

下載好后將其解壓到文件夾中,便可以獲得 Paddle 格式的推理模型。

第二步,轉換為 ONNX 格式

該方式需要安裝 paddle2onnx 和 onnxruntime 模塊。在命令行中輸入以下指令進行轉換,其中轉換時需要指定 input_shape,否者推理時間會很長:

paddle2onnx --model_dir output_inference/tinypose_256_192/paddle --model_filename model.pdmodel --
params_filename model.pdiparams --input_shape_dict "{'image':[1,3,256,192]}" --opset_version 11 --save_file 
tinypose_256_192.onnx

第三步,轉換為 IR 格式

利用OpenVINO 模型優化器,可以實現將 ONNX 模型轉為 IR 格式。

cd .openvino	ools
mo --input_model paddle/model.pdmodel --input_shape [1,3,256,192] --data_type FP16

1.6 編寫 OpenVINO 推理程序

1.6.1

實現行人檢測

第一步,初始化 PicoDet 行人識別類

 // 行人檢測模型
string mode_path_det = @"E:Text_ModelTinyPosepicodet_v2_s_320_pedestrianpicodet_s_320_lcnet_pedestrian.onnx";
// 設備名稱
string device_name = "CPU";
PicoDet pico_det = new PicoDet(mode_path_det, device_name);

首先初始化行人識別類,將本地模型讀取到內存中,并將模型加載到指定設備中。

第二步,設置輸入輸出形狀

Size size_det = new Size(320, 320);
pico_det.set_shape(size_det, 2125);

根據我們使用的模型,設置模型的輸入輸出形狀。

第三步,實現行人檢測

// 測試圖片
string image_path = @"E:Git_space基于Csharp和OpenVINO部署PP-TinyPoseimagedemo_3.jpg";
Mat image = Cv2.ImRead(image_path);
List result_rect = pico_det.predict(image);

在進行模型推理時,使用 OpenCvSharp 讀取圖像,然后帶入預測,最終獲取行人預測框。最后將行人預測框繪制到圖片上,如下圖所示。

6d38c480-6593-11ed-8abf-dac502259ad0.png

圖 3 行人位置預測結果

1.6.2

實現人體姿態識別

第一步,初始化 P 人體姿勢識別 PPTinyPose 類

 // 關鍵點檢測模型
// onnx格式
string mode_path_pose = @"E:Text_ModelTinyPose	inypose_128_96	inypose_128_96.onnx";
// 設備名稱
string device_name = "CPU";
PPTinyPose tiny_pose = new PPTinyPose(mode_path_pose, device_name);

首先初始化人體姿勢識別 PPTinyPose 類,將本地模型讀取到內存中,并加載到設備上。

第二步,設置輸入輸出形狀

Size size_pose = new Size(128, 96);
tiny_pose.set_shape(size_pose);

PP-TinyPose 模型輸入與輸出有對應關系,因此只需要設置輸入尺寸

第三步,實現姿勢預測

// 測試圖片
string image_path = @"E:Git_space基于Csharp和OpenVINO部署PP-TinyPoseimagedemo_3.jpg";
Mat image = Cv2.ImRead(image_path);
Mat result_image = tiny_pose.predict(image);

在進行模型推理時,使用 OpenCvSharp 讀取圖像,然后帶入預測,最終獲取人體姿勢結果,如下圖所示。

6d6df448-6593-11ed-8abf-dac502259ad0.png

圖 4 人體姿態繪制效果圖

1.6.3

推理速度測試

本項目在蝰蛇峽谷上完成測試,CPU 為 i7-12700H,自帶英特爾 銳炬 Xe集成顯卡;獨立顯卡為英特爾銳炫 A770M 獨立顯卡 + 16G 顯存,如下圖所示。

72afcf08-6593-11ed-8abf-dac502259ad0.png

圖 5 蝰蛇峽谷

測試代碼已開源:

https://gitee.com/guojin-yan/Csharp_and_OpenVINO_deploy_PP-TinyPose.git

測試結果如下表所示

72ea449e-6593-11ed-8abf-dac502259ad0.png

表 3 PP-PicoDet 與 PP-TinyPose 模型運行時間(ms)

注:模型讀取:讀取本地模型,加載到設備,創建推理通道;

加載數據:將待推理數據進行處理并加載到模型輸入節點;

模型推理:模型執行推理運算;

結果處理:在模型輸出節點讀取輸出數據,并轉化為我們所需要的結果數據。

1.7 總結與未來工作展望

本文完整介紹了在 C# 中基于 OpenVINO 部署 PP-TinyPose 模型的完整流程,并開源了完整的項目代碼。

從表3的測試結果可以看到,面對級聯的小模型,由于存在數據從 CPU 傳到 GPU,GPU 處理完畢后,結果從 GPU 傳回 CPU 的時間消耗,獨立顯卡相對 CPU 并不具備明顯優勢。

未來

改進方向

借助 OpenVINO 預處理 API,將預處理和后處理集成到 GPU 中去。

參考教程:使用OpenVINO 預處理API進一步提升YOLOv5推理性能

借助OpenVINO 異步推理 API,提升 GPU 利用率。

參考教程:蝰蛇峽谷上實現 YOLOv5 模型的 OpenVINO 異步推理程序

仔細分析 CPU 和 GPU 之間的數據傳輸性能瓶頸,嘗試鎖頁內存、異步傳輸等優化技術,“隱藏” CPU 和 GPU 之間的數據傳輸時間消耗。

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

    關注

    61

    文章

    10174

    瀏覽量

    174011
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11045

    瀏覽量

    216089
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4915

    瀏覽量

    130705
  • 物聯網
    +關注

    關注

    2927

    文章

    45949

    瀏覽量

    388530
  • 顯卡
    +關注

    關注

    16

    文章

    2503

    瀏覽量

    69215

原文標題:基于C#和OpenVINO?在英特爾獨立顯卡上部署PP-TinyPose模型 | 開發者實戰

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

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

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

    開源測控、機器視覺、數采與分析三大領域中,如何快速將AI模型集成到應用程序中, 實現AI賦能和應用增值? 最容易的方式是:C#中,使用 Open
    的頭像 發表于 02-17 10:03 ?1843次閱讀
    <b class='flag-5'>C#</b>集成<b class='flag-5'>OpenVINO</b>?:簡化AI<b class='flag-5'>模型</b><b class='flag-5'>部署</b>

    使用OpenVINO C# API輕松部署飛槳PP-OCRv4模型

    ? 作者:算力魔方創始人/英特爾創新大使劉力 《超4萬6千星的開源OCR黑馬登場,PaddleOCR憑什么脫穎而出?》 收到了讀者熱烈反響,很多讀者提出:如何在C#部署飛槳PP-OC
    的頭像 發表于 02-12 10:42 ?1303次閱讀
    使用<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C#</b> API輕松<b class='flag-5'>部署</b>飛槳<b class='flag-5'>PP</b>-OCRv4<b class='flag-5'>模型</b>

    英特爾?獨立顯卡OpenVINO?工具套件結合使用時,無法運行推理怎么解決?

    使用英特爾?獨立顯卡OpenVINO?工具套件時無法運行推理
    發表于 03-05 06:56

    請問OpenVINO?工具套件英特爾?Distribution是否與Windows? 10物聯網企業版兼容?

    無法基于 Windows? 10 物聯網企業版的目標系統上使用 英特爾? Distribution OpenVINO? 2021* 版本推斷模型
    發表于 03-05 08:32

    英特爾高清顯卡4600幫助

    和NVIDIA GTX 960M。顯示器的色溫配置為R-75,G-75,B-75(每個的最大設置為100)。英特爾高清顯卡4600可以選擇“默認RGB”,“限制RGB”或“全RGB”。此外,還有一個啟用或禁用
    發表于 10-26 14:53

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

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

    Arm虛擬硬件上部署PP-PicoDet模型

    1、Arm虛擬硬件上部署PP-PicoDet模型  經典的深度學習工程是從確認任務目標開始的,我們首先來簡單地介紹一下目標檢測任務以及本期部署
    發表于 09-16 14:42

    英特爾推出了英特爾銳炬Xe MAX獨立顯卡

    英特爾推出了英特爾銳炬 Xe MAX 獨立顯卡,該顯卡專為輕薄型筆記本電腦設計,現已通過合作伙伴問世。
    的頭像 發表于 11-01 12:15 ?9028次閱讀

    英特爾推出面向OEM市場的入門級Xe獨立顯卡

    磨蹭了一年之后,英特爾終于出貨了新一代的獨立顯卡也就是DG1,型號為Iris Xe MAX,當時英特爾表示這款
    的頭像 發表于 01-27 10:39 ?2135次閱讀

    英特爾獨立顯卡上部署YOLOv5 v7.0版實時實例分割模型

    本文將介紹基于 OpenVINO 英特爾獨立顯卡上部署
    的頭像 發表于 12-20 11:32 ?4894次閱讀

    AI作畫升級,OpenVINO? 和英特爾獨立顯卡助你快速生成視頻

    今天,我們對這一應用場景再次升級,除了能夠作畫,利用OpenVINO對Stable Diffusion v2模型的支持及優化,我們還能夠在在英特爾獨立
    的頭像 發表于 04-24 10:52 ?1949次閱讀
    AI作畫升級,<b class='flag-5'>OpenVINO</b>? 和<b class='flag-5'>英特爾</b><b class='flag-5'>獨立</b><b class='flag-5'>顯卡</b>助你快速生成視頻

    使用OpenVINO優化并部署訓練好的YOLOv7模型

    英特爾銳炫 顯卡+ oneAPI 和 OpenVINO 實現英特爾 視頻 AI 計算盒訓推一體-上篇》一文中,我們詳細介紹基于
    的頭像 發表于 08-25 11:08 ?1936次閱讀
    使用<b class='flag-5'>OpenVINO</b>優化并<b class='flag-5'>部署</b>訓練好的YOLOv7<b class='flag-5'>模型</b>

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

    C# 環境下使用該模型應用到工業檢測中,因此本文中,我們將向大家展示使用 OpenVINO Csharp API 部署 RT-DETR
    的頭像 發表于 11-10 16:59 ?1107次閱讀
    基于<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>

    使用PyTorch英特爾獨立顯卡上訓練模型

    《PyTorch 2.5重磅更新:性能優化+新特性》中的一個新特性就是:正式支持英特爾獨立顯卡上訓練模型
    的頭像 發表于 11-01 14:21 ?1903次閱讀
    使用PyTorch<b class='flag-5'>在</b><b class='flag-5'>英特爾</b><b class='flag-5'>獨立</b><b class='flag-5'>顯卡</b>上訓練<b class='flag-5'>模型</b>

    C#中使用OpenVINO?:輕松集成AI模型

    作者:算力魔方創始人/英特爾創新大使劉力 C#不僅在PC游戲開發、大型商業系統領域應用廣泛,還成為開源測控、機器視覺與運動控制,以及PC數集與分析領域中的主流開發語言! 開源測控、機器視覺、數采
    的頭像 發表于 02-07 14:05 ?752次閱讀
    <b class='flag-5'>C#</b>中使用<b class='flag-5'>OpenVINO</b>?:輕松集成AI<b class='flag-5'>模型</b>!
    主站蜘蛛池模板: 在线观看国产小视频 | 幸福草电视剧演员表介绍 | 好紧的小嫩嫩17p | 国产乱子影视频上线免费观看 | 又亲又揉摸下面视频免费看 | 亚洲爆乳少妇精品无码专区 | 日本伦子欲 | 久久久青青 | 成年人视频免费在线播放 | 甜性涩爱下载 | 亚色九九九全国免费视频 | 国内精品蜜汁乔依琳视频 | 成年人在线视频免费观看 | 偷上邻居熟睡少妇 | 俄罗斯一级毛片aaaa | 久久www成人看片 | 67194成在线观看免费 | 免费观看a视频 | 精品国产在天天线在线麻豆 | 两个奶头被吃得又翘又痛 | 色欲蜜臀AV免费视频 | 教室眠催白丝美女校花 | 强奷乱码中文字幕熟女免费 | 99re久久热在线视频 | 亚洲视频在线观看网站 | 中文字幕视频免费在线观看 | 成年人国产视频 | 国产高清免费视频免费观看 | 国产成人欧美日韩在线电影 | 亚洲日本国产综合高清 | WWW亚洲精品久久久无码 | 国产色精品VR一区二区 | 欧美精品AV无码一区二区 | 人妻超级精品碰碰在线97视频 | 中文字幕成人免费高清在线 | 蜜芽国产在线精品欧美 | 国产成人一区免费观看 | yellow在线观看免费高清的日本 | 国产精品久久vr专区 | 午夜AV亚洲一码二中文字幕青青 | 伊人大香人妻在线播放 |

    電子發燒友

    中國電子工程師最喜歡的網站

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