精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

使用OpenVINO C# API部署YOLO-World實現實時開放詞匯對象檢測

英特爾物聯網 ? 來源:CSharp與邊緣模型部署 ? 2024-08-30 16:27 ? 次閱讀

以下文章來源于CSharp與邊緣模型部署 ,作者椒顏PiPi蝦

作者:顏國進

英特爾邊緣計算創新大使

YOLO-World是一個融合了實時目標檢測與增強現實(AR)技術的創新平臺,旨在將現實世界與數字世界無縫對接。該平臺以YOLO(You Only Look Once)算法為核心,實現了對視頻中物體的快速準確識別,并通過AR技術將虛擬元素與真實場景相結合,為用戶帶來沉浸式的交互體驗。在本文中,我們將結合OpenVINO C# API使用最新發布的OpenVINO 2024.0部署 YOLO-World實現實時開放詞匯對象檢測:

OpenVINO C# API項目鏈接:

https://github.com/guojin-yan/OpenVINO-CSharp-API.git

使用OpenVINO C# API 部署 YOLO-World全部源碼:

https://github.com/guojin-yan/OpenVINO-CSharp-API-Samples/tree/master/model_samples/yolo-world/yolo-world-opencvsharp-net4.8

1前言

1OpenVINO C# API

英特爾發行版OpenVINO工具套件基于oneAPI而開發,可以加快高性能計算機視覺深度學習視覺應用開發速度工具套件,適用于從邊緣到云的各種英特爾平臺上,幫助用戶更快地將更準確的真實世界結果部署到生產系統中。通過簡化的開發工作流程,OpenVINO可賦能開發者在現實世界中部署高性能應用程序和算法。

wKgaombRhkWATb94AAJXBZDBmVM540.png

2024年3月7日,英特爾發布了開源 OpenVINO 2024.0 工具包,用于在各種硬件上優化和部署人工智能推理。OpenVINO是英特爾出色的開源AI工具包,不僅可以在x86_64 CPU上加速AI推斷,還可以在ARM CPU和其他架構、英特爾集成顯卡和獨立顯卡等硬件上加速AI推斷,包括最近推出的NPU 插件,用于利用新酷睿超“Meteor Lake”系統芯片中的英特爾神經處理單元。OpenVINO 2024.0 更注重生成式人工智能(GenAI),為TensorFlow句子編碼模型提供了更好的開箱即用體驗,支持專家混合(MoE)。同時還提高了LLM的INT4權重壓縮質量,增強了LLM在英特爾CPU上的性能,簡化了Hugging Face模型的優化和轉換,并改進了其他Hugging Face集成。

OpenVINO C# API是一個OpenVINO的.Net wrapper,應用最新的OpenVINO庫開發,通過 OpenVINOC API實現.Net對OpenVINO Runtime調用,使用習慣與OpenVINO C++ API一致。OpenVINO C# API 由于是基于OpenVINO開發,所支持的平臺與OpenVINO完全一致,具體信息可以參考OpenVINO。通過使用OpenVINO C# API,可以在 .NET、.NET Framework等框架下使用C#語言實現深度學習模型在指定平臺推理加速。

2YOLO-World

YOLO-World是一種創新的實時開放詞匯對象檢測技術,由騰訊AI實驗室開發。它旨在解決傳統目標檢測方法在開放場景中受預定義類別限制的問題,通過視覺語言建模和大規模數據集預訓練,增強了YOLO系列檢測器對開放詞匯的檢測能力。

該技術的核心思想在于,利用一個可重參數化的視覺語言路徑聚合網絡(RepVL-PAN)來連接文本和圖像特征,并引入基于區域的文本對比損失進行預訓練。這種設計使得YOLO-World能夠在沒有見過具體樣本的情況下,檢測出廣泛的物體類別。同時,它還能在保持高性能的同時,降低計算要求,從而適用于實時應用。

通過這種方式,YOLO-World能夠增強對開放詞匯的檢測能力,使其能夠在沒有預先定義類別的情況下識別出廣泛的物體。這種能力使得YOLO-World在實時應用中,如自動駕駛、視頻監控、工業質檢等領域具有廣泛的應用前景。同時,YOLO-World還通過優化模型架構和訓練策略,實現了高性能和實時性的平衡。它能夠在保持高準確率的同時,降低計算要求,從而滿足實際應用中對于實時性的需求。

總的來說,YOLO-World是一種高效、實時且靈活的開放詞匯目標檢測器,具有廣泛的應用前景和巨大的潛力。它不僅能夠解決傳統目標檢測方法在開放場景中的局限性,還能夠為各行業提供實時、準確的物體檢測解決方案。

2模型獲取

YOLO-World模型可以通過[YOLO-World GitHub](https://github.com/AILab-CVC/YOLO-World.git)獲取,小編嘗試了一下,步驟比較復雜,且配置起來比較麻煩,因此如果是初學者,不建議使用,下面介紹一個比較簡單的導出方式:通過Ultralytics 導出。

Ultralytics 提供了一系列用于計算機視覺任務的工具,包括目標檢測、圖像分類、語義分割和人臉識別等。這些工具基于流行的深度學習框架如PyTorch,并通過簡化復雜任務的實現過程,使用戶能夠更輕松地進行模型訓練和性能評估。

首先安裝Ultralytics 環境:

Ultralytics 可以通過pip安裝,在環境中輸入以下指令即可:

pip install ultralytics

然后通過Python導出模型:

模型導出代碼如下所示:

from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO('yolov8s-worldv2.pt')
# Define custom classes
model.set_classes(["person", "bus"])
# Export the model
model.export(format='onnx')

模型導出后結構如下圖所示:

wKgZombRhnKANB7EAAIOYk6m67c735.png

與其他模型不同的時,YOLO-World模型在推理時需要指定目標對象名稱,因此其輸入包括一個目標對象名稱的節點,但是目前ONNX模型不支持字符輸入。因此在模型導出時,根據自己的模型需求,對需要進行識別的對象名稱,進行定義;接著在導出模型時,會將定義的類別字符轉換為權重,直接加載到模型中。

這樣在模型推理時,就無需再進行文本權重轉換,提升模型推理的速度;但這樣也會導致導出的模型無法再修改類別,如果需要更改類別,就需要重新導出模型。

3項目配置

1源碼下載與項目配置

首先使用Git克隆項目源碼。輸入以下指令:

git clone https://github.com/guojin-yan/OpenVINO-CSharp-API-Samples.git

代碼下載完成后,使VS 2022打開解決方案Samples.sln文件,找到yolo-world-opencvsharp-net4.8項目,如下圖所示:

wKgaombRhn-ALBbsAAIkZTWJ2Do025.png

接下來安裝依賴項。首先是安裝OpenVINO C# API項目依賴,通過NuGet安裝一下包即可:

OpenVINO.CSharp.API
OpenVINO.runtime.win
OpenVINO.CSharp.API.Extensions
OpenVINO.CSharp.API.Extensions.OpenCvSharp

關于在不同平臺上搭建 OpenVINO C# API 開發環境請參考以下文章:

《在Windows上搭建OpenVINOC#開發環境》:

https://github.com/guojin-yan/OpenVINO-CSharp-API/blob/csharp3.1/docs/inatall/Install_OpenVINO_CSharp_Windows_cn.md

《在Linux上搭建OpenVINOC#開發環境》

https://github.com/guojin-yan/OpenVINO-CSharp-API/blob/csharp3.1/docs/inatall/Install_OpenVINO_CSharp_Linux_cn.md

《在MacOS上搭建OpenVINOC#開發環境》

https://github.com/guojin-yan/OpenVINO-CSharp-API/blob/csharp3.1/docs/inatall/Install_OpenVINO_CSharp_MacOS_cn.md

接下來安裝使用到的圖像處理庫 OpenCvSharp,通過NuGet安裝一下包即可:

OpenCvSharp4
OpenCvSharp4.Extensions
OpenCvSharp4.runtime.win

關于在其他平臺上搭建 OpenCvSharp 開發環境請點擊參閱以下文章:《【OpenCV】在Linux上使用OpenCvSharp》、《【OpenCV】在MacOS上使用OpenCvSharp》。

添加完成項目依賴后,項目的配置文件如下所示:



 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2定義模型預測方法

使用OpenVINO C# API部署模型主要包括以下幾個步驟:

初始化 OpenVINO Runtime Core

讀取本地模型(將圖片數據預處理方式編譯到模型)

將模型編譯到指定設備

創建推理通道

處理圖像輸入數據

設置推理輸入數據

模型推理

獲取推理結果

處理結果數據

下面根據模型部署流程,詳細介紹一下該模型的部署代碼:

該項目主要使用到OpenCvSharp與OpenVINO C# API這兩個工具包,因此需要添加以下命名空間:

using OpenCvSharp;
using OpenVinoSharp;
using OpenVinoSharp.Extensions.process;

1) 初始化 OpenVINO Runtime Core

Core core = new Core();

2) 讀取本地模型

Model model = core.read_model(tb_model_path.Text);

3) 將模型編譯到指定設備

CompiledModel compiled_model = core.compile_model(model, cb_device.SelectedItem.ToString());

4) 創建推理通道

InferRequest request = compiled_model.create_infer_request();

5) 處理圖像輸入數據

Mat image = Cv2.ImRead(tb_input_path.Text);
Mat mat = new Mat();
Cv2.CvtColor(image, mat, ColorConversionCodes.BGR2RGB);
mat = OpenVinoSharp.Extensions.process.Resize.letterbox_img(mat, (int)input_shape[2], out factor);
mat = Normalize.run(mat, true);
float[] input_data = Permute.run(mat);

6) 設置推理輸入數據

Tensor input_tensor = request.get_input_tensor();
input_tensor.set_data(input_data);

7) 模型推理

request.infer();

8) 獲取推理結果

Tensor output_boxes = request.get_tensor("boxes");
float[] boxes = output_boxes.get_data((int)output_boxes.get_size());
Tensor output_scores = request.get_tensor("scores");
float[] scores = output_scores.get_data((int)output_scores.get_size());
Tensor output_labels = request.get_tensor("labels");
int[] labels = output_labels.get_data((int)output_labels.get_size());

9) 處理結果數據

DetResult postprocess(float[] result, int categ_nums, float factor) 
{
  Mat result_data = new Mat(4 + categ_nums, 8400, MatType.CV_32F,result);
  result_data = result_data.T();


  // Storage results list
  List position_boxes = new List();
  List classIds = new List();
  List confidences = new List();
  // Preprocessing output results
  for (int i = 0; i < result_data.Rows; i++)
 ? ?{
 ? ? ? ?Mat classesScores = new Mat(result_data, new Rect(4, i, categ_nums, 1));
 ? ? ? ?Point maxClassIdPoint, minClassIdPoint;
 ? ? ? ?double maxScore, minScore;
 ? ? ? ?// Obtain the maximum value and its position in a set of data
 ? ? ? ?Cv2.MinMaxLoc(classesScores, out minScore, out maxScore,
 ? ? ? ? ? ?out minClassIdPoint, out maxClassIdPoint);
 ? ? ? ?// Confidence level between 0 ~ 1
 ? ? ? ?// Obtain identification box information
 ? ? ? ?if (maxScore > 0.25)
    {
      float cx = result_data.At(i, 0);
      float cy = result_data.At(i, 1);
      float ow = result_data.At(i, 2);
      float oh = result_data.At(i, 3);
      int x = (int)((cx - 0.5 * ow) * factor);
      int y = (int)((cy - 0.5 * oh) * factor);
      int width = (int)(ow * factor);
      int height = (int)(oh * factor);
      Rect box = new Rect();
      box.X = x;
      box.Y = y;
      box.Width = width;
      box.Height = height;


      position_boxes.Add(box);
      classIds.Add(maxClassIdPoint.X);
      confidences.Add((float)maxScore);
    }
  }
  // NMS non maximum suppression
  int[] indexes = new int[position_boxes.Count];
  float score = float.Parse(tb_score.Text);
  float nms = float.Parse(tb_nms.Text);
  CvDnn.NMSBoxes(position_boxes, confidences, score, nms, out indexes);
  DetResult re = new DetResult();
  // 
  for (int i = 0; i < indexes.Length; i++)
 ? ?{
 ? ? ? ?int index = indexes[i];
 ? ? ? ?re.add(classIds[index], confidences[index], position_boxes[index]);
 ? ?}
 ? ?return re;
}

以上就是使用OpenVINO C# API 部署YOLO-World模型的關鍵代碼,具體代碼可以下載項目源碼進行查看。

4項目運行與演示

配置好項目后,點擊運行,本次我們提供給大家的是使用.NET Framework4.8開發的窗體應用程序,如下圖所示,主要還包含五個部分,分別為推理設置區域、控制按鈕、推理信息輸出區域、原圖展示區域、推理結果展示區域。在使用時,用戶可以根據自己需求,選擇導出的模型以及待推理數據,支持圖片數據以及視頻數據,接著輸入自己導出的lables名稱,同時還可以修改推理設備、數據處理所需的參數等,接著就可以依次點擊加載模型、模型推理按鈕,進行模型推理。最后模型推理結果如圖所示。

該模型在導出時,只定義了bus、person類別,因此在模型推理后,可以識別出圖片中的bus、person元素。

wKgZombRhruAbGuNAAEeESJ_pis145.png

接著又測試了導出時只定義person類別的模型,如下圖所示,最后識別出來的結果只有person。

wKgZombRhtiAf03wAAEU16zcf10952.png

最后,我們提供了一個行人檢測視頻案例,點擊此處查看視頻。

5總結

在該項目中,我們結合之前開發的OpenVINO C# API 項目部署YOLOv9模型,成功實現了對象目標檢測與實例分割,并且根據不同開發者的使用習慣,同時提供了OpenCvSharp以及Emgu.CV兩種版本,供各位開發者使用。最后如果各位開發者在使用中有任何問題,歡迎大家與我聯系。

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

    關注

    60

    文章

    9722

    瀏覽量

    170500
  • API
    API
    +關注

    關注

    2

    文章

    1456

    瀏覽量

    61440
  • 目標檢測
    +關注

    關注

    0

    文章

    196

    瀏覽量

    15560
  • OpenVINO
    +關注

    關注

    0

    文章

    73

    瀏覽量

    130

原文標題:使用OpenVINO? C# API部署YOLO-World實現實時開放詞匯對象檢測丨開發者實戰

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

收藏 人收藏

    評論

    相關推薦

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

    作者:英特爾物聯網行業創新大使 楊雪鋒 OpenVINO 2022.2版開始支持英特爾獨立顯卡,還能通過“累計吞吐量”同時啟動集成顯卡 + 獨立顯卡助力全速 AI 推理。本文基于 C#
    的頭像 發表于 11-18 18:27 ?2294次閱讀

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

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

    【EASY EAI Nano】RV1126實時讀取攝像頭并進行yolo檢測顯示

    實現了三個并行模塊,分別是 攝像頭讀取,使用opencv轉換到適合大小 yolo檢測 托管到Qt進行現實 檢測的DEMO從每幀10次
    發表于 01-14 18:53

    為什么無法通過Heroku部署OpenVINO?工具套件?

    無法通過 Heroku 部署OpenVINO?工具套件: Importeror:libpython3.9.so.1.0:無法打開共享對象文件:無此類文件或目錄
    發表于 08-14 08:58

    解析OpenVINO? + SSD 實時對象檢測

    前面我們了解OpenVINO 如何部署圖像分類網絡ResNet,本文我們將會學習OpenVINO對象檢測網絡的
    的頭像 發表于 05-18 09:35 ?1850次閱讀
    解析<b class='flag-5'>OpenVINO</b>? + SSD <b class='flag-5'>實時</b><b class='flag-5'>對象</b><b class='flag-5'>檢測</b>

    C#實現ActiveX控件開發部署升級篇

    C#實現ActiveX控件開發部署升級篇(安徽力普拉斯電源技術有限公司總經理)-該文檔為C#實現ActiveX控件開發
    發表于 09-27 17:29 ?4次下載
    <b class='flag-5'>C#</b><b class='flag-5'>實現</b>ActiveX控件開發<b class='flag-5'>部署</b>升級篇

    C#實現ActiveX控件開發與部署

    C#實現ActiveX控件開發與部署(肇慶理士電源技術有限公司鳥瞰圖)-該文檔為C#實現ActiveX控件開發與
    發表于 09-27 17:36 ?6次下載
    <b class='flag-5'>C#</b><b class='flag-5'>實現</b>ActiveX控件開發與<b class='flag-5'>部署</b>

    OpenVINO? C# API詳解與演示

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

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

    RT-DETR 是在 DETR 模型基礎上進行改進的,一種基于 DETR 架構的實時端到端檢測器,它通過使用一系列新的技術和算法,實現了更高效的訓練和推理,我們將在 Python、C+
    的頭像 發表于 10-20 11:15 ?758次閱讀
    基于<b class='flag-5'>OpenVINO</b> Python <b class='flag-5'>API</b><b class='flag-5'>部署</b>RT-DETR模型

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

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

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

    RT-DETR 是在 DETR 模型基礎上進行改進的,一種基于 DETR 架構的實時端到端檢測器,它通過使用一系列新的技術和算法,實現了更高效的訓練和推理,在前文我們發表了《基于 OpenVI
    的頭像 發表于 11-03 14:30 ?615次閱讀
    基于<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模型

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

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

    OpenVINO? Java API應用RT-DETR做目標檢測器實戰

    本文將從零開始詳細介紹環境搭建的完整步驟,我們基于英特爾開發套件AIxBoard為硬件基礎實現了Java在Ubuntu 22.04系統上成功使用OpenVINO? Java API,并且成功運行了RT-DETR
    的頭像 發表于 03-18 15:04 ?577次閱讀
    <b class='flag-5'>OpenVINO</b>? Java <b class='flag-5'>API</b>應用RT-DETR做目標<b class='flag-5'>檢測</b>器實戰

    OpenVINO? C# API部署YOLOv9目標檢測和實例分割模型

    YOLOv9模型是YOLO系列實時目標檢測算法中的最新版本,代表著該系列在準確性、速度和效率方面的又一次重大飛躍。
    的頭像 發表于 04-03 17:35 ?604次閱讀
    <b class='flag-5'>OpenVINO</b>? <b class='flag-5'>C#</b> <b class='flag-5'>API</b><b class='flag-5'>部署</b>YOLOv9目標<b class='flag-5'>檢測</b>和實例分割模型

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

    的模型設計策略,從效率和精度兩個角度對YOLOs的各個組成部分進行了全面優化,大大降低了計算開銷,增強了性能。在本文中,我們將結合OpenVINO C# API使用最新發布的OpenVINO
    的頭像 發表于 06-21 09:23 ?713次閱讀
    用<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目標<b class='flag-5'>檢測</b>模型