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

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

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

3天內不再提示

基于哪吒開發(fā)板部署YOLOv8模型

英特爾物聯網 ? 來源:英特爾物聯網 ? 2024-11-15 14:13 ? 次閱讀

作者:

顏國進 英特爾邊緣計算創(chuàng)新大使

2024英特爾“走近開發(fā)者”互動活動-哪吒開發(fā)套件免費試 用 AI 創(chuàng)新計劃:哪吒開發(fā)板是專為支持入門級邊緣 AI 應用程序和設備而設計,能夠滿足人工智能學習、開發(fā)、實訓等應用場景。為了測試該開發(fā)板的推理性能,同時測試所推出的 OpenVINO C# API (https://github.com/guojin-yan/OpenVINO-CSharp-API) 項目能否應用到該開發(fā)板上,我們使用該開發(fā)板,結合 OpenVINO C# API 的異步推理功能,加速深度學習推理速度。

1哪吒開發(fā)板

1.1 產品簡介

哪吒(Nezha)開發(fā)套件以信用卡大小(85 x 56mm)的開發(fā)板-哪吒(Nezha)為核心,哪吒采用Intel N97處理器(Alder Lake-N),最大睿頻 3.6GHz,Intel UHD Graphics 內核 GPU,可實現高分辨率顯示;板載 LPDDR5 內存、eMMC 存儲及 TPM 2.0,配備 GPIO 接口,支持 Windows 和 Linux 操作系統(tǒng),這些功能和無風扇散熱方式相結合,為各種應用程序構建高效的解決方案,適用于如自動化、物聯網網關、數字標牌和機器人等應用。

該開發(fā)板是類樹莓派的 x86 主機,可支持 Linux Ubuntu 及完整版 Windows 操作系統(tǒng)。板載英特爾 N97 處理器,最高運行頻率可達 3.6 GHz,且內置顯卡(iGPU),板載 64GB eMMC 存儲及 LPDDR5 4800MHz(4GB/8GB),支持 USB 3.0、HDMI 視頻輸出、3.5mm 音頻接口、1000Mbps 以太網口。完全可把它作為一臺 mini 小電腦來看待,且其可外接 Arduino,STM32單片機,擴展更多應用及各種傳感器模塊。

此外, 其主要接口與 Jetson Nano 載板兼容,GPIO 與樹莓派兼容,能夠最大限度地復用樹莓派、Jetson Nano 等生態(tài)資源,無論是自動化、物聯網網關、數字標牌或是攝像頭物體識別、3D 打印,還是 CNC 實時插補控制都能穩(wěn)定運行??勺鳛檫吘売嬎阋嬗糜谌斯ぶ悄墚a品驗證、開發(fā);也可以作為域控核心用于機器人產品開發(fā)。

1.2 功能特點

Intel Processor N97

板載 LPDDR5 內存, 8GB

板載 eMMC 存儲, 64GB

1Gigabit LAN x 1

HDMI 1.4b x 1

USB 3.2 Gen 2 (Type-A) x 3, 10針 USB 2.0 x 2/UART x 1

40針 GPIO x 1

12V 直流輸入, 5A

TPM 2.0

下圖為哪吒開發(fā)板產品介紹圖片:

104f3a38-9db3-11ef-93f3-92fbcf53809c.png

2環(huán)境配置

2.1NET 8.0 安裝

進入微軟官網下載地址:

https://dotnet.microsoft.com/zh-cn/download

顯示如下頁面直接下載即可:

107c22aa-9db3-11ef-93f3-92fbcf53809c.png

下載完成過后,右擊以管理員方式運行即可,進入一下頁面后,直接點擊安裝,按照默認方式安裝即可:

1092ddce-9db3-11ef-93f3-92fbcf53809c.png

安裝完成后,在 CMD 中輸入 dotnet --info 指令,查看是否安裝成功:

10bd51d0-9db3-11ef-93f3-92fbcf53809c.png

2.2VS Code 配置 C# 環(huán)境

VS Code 安裝較為簡單,大家直接網上下載安裝包安裝即可,此處不做太多的贅述。進入 VS Code,在擴展中,依次安裝一下插件:

10cbc094-9db3-11ef-93f3-92fbcf53809c.png

安裝完成后,便可以進行 C# 項目編輯。

3創(chuàng)建并配置 YOLOv8 推理項目

3.1創(chuàng)建 YOLOv8 推理項目

此處我們使用 CMD 創(chuàng)建項目,首先輸入以下指令:

dotnet new console -o yolov8_async_csharp -f net8.0

輸入指令后,結果如下圖所示:

10d7fe68-9db3-11ef-93f3-92fbcf53809c.png

3.2配置 YOLOv8 推理項目

該項目中需要配置 OpenCV 和 OpenVINO 依賴,其中 OpenCV 我們在 C# 使用的是 OpenCvSharp4,而 OpenVINO 就是使用的我們開發(fā)的[OpenVINO C# API] (https://github.com/guojin-yan/OpenVINO-CSharp-API) 項目,該項目均可以通過 NUGET 安裝,在該項目中,輸入以下指令,進行以來安裝:

OpenCvSharp4 安裝指令:

dotnet add package OpenCvSharp4 --version 4.9.0.20240103
dotnet add package OpenCvSharp4.runtime.win --version 4.9.0.20240103

OpenVINO C# API 安裝指令:

dotnet add package OpenVINO.CSharp.API --version 2024.3.0.2
dotnet add package OpenVINO.runtime.win --version 2024.3.0.1
dotnet add package OpenVINO.CSharp.API.Extensions.OpenCvSharp --version 1.0.6.1

4編寫推理代碼

下面為該項目所使用的所有代碼,為了提高推理速度,此處使用的為異步推理過程。

using OpenCvSharp.Dnn;
using OpenCvSharp;
using OpenVinoSharp;
using OpenVinoSharp.Extensions.result;
using OpenVinoSharp.Extensions.process;
using System.Diagnostics;
using OpenVinoSharp.preprocess;
namespace openvino_async_csharp
{
  internal class Program
 {
    static void Main(string[] args)
{
      Console.WriteLine("Hello, World!");
      yolov8_async_det();
   }
    static void yolov8_async_det()
{
      string video_path = "video.mp4";
      string model_path = "yolov8s.onnx";
      Core core = new Core();
      Model model = core.read_model(model_path);
      CompiledModel compiled_model = core.compile_model(model, "GPU.0");
      VideoCapture capture = new VideoCapture(video_path);
      if (!capture.IsOpened())
     {
        Console.WriteLine("ERROR: 視頻無法打開");
        return;
     }
      List requests = new List { compiled_model.create_infer_request(), compiled_model.create_infer_request() };
      Mat frame = new Mat();
      capture.Read(frame);
      float factor = 0f;
      float[] input_data = preprocess(frame, out factor);
      requests[0].get_input_tensor().set_data(input_data);
      requests[0].start_async();
      Stopwatch sw = new Stopwatch();
      float[] total_infs = new float[3];


      while (true)
     {
        Mat next_frame = new Mat();
        if (!capture.Read(next_frame))
       {
          break;
       }
        sw.Restart();
        input_data = preprocess(frame, out factor);
        requests[1].get_input_tensor().set_data(input_data);
        sw.Stop();
        total_infs[0] = sw.ElapsedMilliseconds;
        sw.Restart();
        requests[1].start_async();
        requests[0].wait();
        sw.Stop();
        total_infs[1] = sw.ElapsedMilliseconds;
        sw.Restart();
        float[] output_data = requests[0].get_output_tensor().get_data(8400 * 84);
        DetResult result = postprocess(output_data, factor);
        sw.Stop();
        total_infs[2] = sw.ElapsedMilliseconds;


        Cv2.PutText(frame, "PreProcess: " + (1000.0 / total_infs[0]).ToString("0.00") + "FPS " + (total_infs[0]).ToString("0.00") + "ms",
          new Point(20, 40), HersheyFonts.HersheyPlain, 2, new Scalar(255, 0, 255), 2);
        Cv2.PutText(frame, "Inference: " + (1000.0 / total_infs[1]).ToString("0.00") + "FPS " + (total_infs[1]).ToString("0.00") + "ms",
          new Point(20, 70), HersheyFonts.HersheyPlain, 2, new Scalar(255, 0, 255), 2);
        Cv2.PutText(frame, "PostProcess: " + (1000.0 / total_infs[2]).ToString("0.00") + "FPS " + (total_infs[2]).ToString("0.00") + "ms",
          new Point(20, 100), HersheyFonts.HersheyPlain, 2, new Scalar(255, 0, 255), 2);
        Cv2.PutText(frame, "Total: " + (1000.0 / (total_infs[0] + total_infs[1] + total_infs[2])).ToString("0.00")
          + "FPS  " + ((total_infs[0] + total_infs[1] + total_infs[2])).ToString("0.00") + "ms",
          new Point(20, 130), HersheyFonts.HersheyPlain, 2, new Scalar(255, 0, 255), 2);
        Mat res_mat = Visualize.draw_det_result(result, frame);
        Cv2.ImShow("Result", res_mat);
        Cv2.WaitKey(10);
        swap(requests);
        frame = next_frame;
     }
   }
    public static float[] preprocess(Mat img, out float factor)
   {
      Mat mat = new Mat();
      Cv2.CvtColor(img, mat, ColorConversionCodes.BGR2RGB);
      mat = Resize.letterbox_img(mat, 640, out factor);
      mat = Normalize.run(mat, true);
      return Permute.run(mat);
   }
    public static DetResult postprocess(float[] result, float factor)
{
      // Storage results list
      List positionBoxes = new List();
      List classIds = new List();
      List confidences = new List();
      // Preprocessing output results
      for (int i = 0; i < 8400; i++)
 ? ? ? ? ?{
 ? ? ? ? ? ? ? for (int j = 4; j < 84; j++)
 ? ? ? ? ? ? ?{
 ? ? ? ? ? ? ? ? ? float source = result[8400 * j + i];
 ? ? ? ? ? ? ? ? ? int label = j - 4;
 ? ? ? ? ? ? ? ? ? if (source > 0.2)
         {
            float maxSource = source;
            float cx = result[8400 * 0 + i];
            float cy = result[8400 * 1 + i];
            float ow = result[8400 * 2 + i];
            float oh = result[8400 * 3 + i];
            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(x, y, width, height);
            positionBoxes.Add(box);
            classIds.Add(label);
            confidences.Add(maxSource);
         }
       }
     }
      DetResult re = new DetResult();
      int[] indexes = new int[positionBoxes.Count];
      CvDnn.NMSBoxes(positionBoxes, confidences, 0.2f, 0.5f, out indexes);
      for (int i = 0; i < indexes.Length; i++)
 ? ? ? ? ?{
 ? ? ? ? ? ? ? int index = indexes[i];
 ? ? ? ? ? ? ? re.add(classIds[index], confidences[index], positionBoxes[index]);
 ? ? ? ? ?}
 ? ? ? ? ? return re;
 ? ? ?}


 ? ? ? public static void swap(List requests) 
{
      //(requests[0], requests[1]) = (requests[1], requests[0]);
      var tmp = requests[0];
      requests[0] = requests[1];
      requests[1] = tmp;
   }
 }
}

打開創(chuàng)建的項目,編輯 Program.cs 文件,將上述代碼替換該文件中的代碼即可。

5項目編譯與運行

輸入以下指令后進行項目編譯:

dotnet build --configuration Release
10f4257a-9db3-11ef-93f3-92fbcf53809c.png

通過上圖可以看出,該項目編譯成功,未出現任何問題,接下來輸入以下指令進行項目運行:

dotnet run --configuration Release
1100c910-9db3-11ef-93f3-92fbcf53809c.png

上圖為運行后的輸出和推理效果,可以看出使用異步推理后,可以實現20幀以上的推理速度。

為了對比推理效果,此處還開展了同步推理實現,異步推理速度可以實現到 25FPS 以上,而同步推理只能達到 12FPS 左右,其推理速度提升了一倍,且滿足視頻的實時推理要求。

6總結

在該項目中,我們使用哪吒開發(fā)板套件,通過前期推出的 OpenVINO C# API 項目,實現了在開發(fā)板環(huán)境下部署 YOLOv8 模型,并進行了視頻推理測試。在使用哪吒開發(fā)板套件的 IGPU 設備進行推理時,其推理速度平均可以達到 25FPS 以上,可以實現視頻實時推理。

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

    關注

    61

    文章

    9969

    瀏覽量

    171812
  • 接口
    +關注

    關注

    33

    文章

    8610

    瀏覽量

    151219
  • AI
    AI
    +關注

    關注

    87

    文章

    30932

    瀏覽量

    269181
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5058

    瀏覽量

    97530
  • OpenVINO
    +關注

    關注

    0

    文章

    93

    瀏覽量

    207

原文標題:開發(fā)者實戰(zhàn)|使用 OpenVINO? C# 異步推理接口部署 YOLOv8 ——在哪吒開發(fā)板上也可以實現視頻推理

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

收藏 人收藏

    評論

    相關推薦

    【愛芯派 Pro 開發(fā)板試用體驗】yolov8模型轉換

    通過開發(fā)板上預制的ax_run_model 工具,測試模型速度和精度。 示例都是yolov5的,沒有yolov8,模型怎么運行還需進一步
    發(fā)表于 11-20 12:19

    使用YOLOv8做目標檢測和實例分割的演示

    YOLOv8是來自Ultralytics的最新的基于YOLO的對象檢測模型系列,提供最先進的性能。
    的頭像 發(fā)表于 02-06 10:11 ?7512次閱讀

    YOLOv8自定義數據集訓練到模型部署推理簡析

    如果你只是想使用而不是開發(fā),強烈推薦通過pip安裝方式獲取YOLOv8包!YOLOv8安裝命令行
    的頭像 發(fā)表于 03-24 09:27 ?4671次閱讀

    TensorRT 8.6 C++開發(fā)環(huán)境配置與YOLOv8實例分割推理演示

    YOLOv8實例分割TensorRT 推理代碼已經完成C++類封裝,三行代碼即可實現YOLOv8對象檢測與實例分割模型推理,不需要改任何代碼即可支持自定義數據訓練部署推理
    的頭像 發(fā)表于 04-25 10:49 ?5815次閱讀
    TensorRT 8.6 C++<b class='flag-5'>開發(fā)</b>環(huán)境配置與<b class='flag-5'>YOLOv8</b>實例分割推理演示

    在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8分類模型

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

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

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

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

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

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

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

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

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

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

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

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

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

    解鎖YOLOv8修改+注意力模塊訓練與部署流程

    很多人也想跟修改YOLOv5源碼一樣的方式去修改YOLOv8的源碼,但是在github上面卻發(fā)現找到的YOLOv8項目下面TAG分支是空的
    的頭像 發(fā)表于 08-11 14:14 ?4369次閱讀
    解鎖<b class='flag-5'>YOLOv8</b>修改+注意力模塊訓練與<b class='flag-5'>部署</b>流程

    YOLOv8實現任意目錄下命令行訓練

    的,在其他目錄下的預訓練模型文件,YOLOv8還是會一樣去下預訓練模型文件,直接無視model參數指定,于是多數開發(fā)者都是確保在當前目錄下有YOLO
    的頭像 發(fā)表于 09-04 10:50 ?1118次閱讀
    <b class='flag-5'>YOLOv8</b>實現任意目錄下命令行訓練

    基于YOLOv8的自定義醫(yī)學圖像分割

    YOLOv8是一種令人驚嘆的分割模型;它易于訓練、測試和部署。在本教程中,我們將學習如何在自定義數據集上使用YOLOv8。但在此之前,我想告訴你為什么在存在其他優(yōu)秀的分割
    的頭像 發(fā)表于 12-20 10:51 ?784次閱讀
    基于<b class='flag-5'>YOLOv8</b>的自定義醫(yī)學圖像分割

    基于OpenCV DNN實現YOLOv8模型部署與推理演示

    基于OpenCV DNN實現YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統(tǒng)、烏班圖系統(tǒng)、Jetson的Jetpack系統(tǒng)
    的頭像 發(fā)表于 03-01 15:52 ?1646次閱讀
    基于OpenCV DNN實現<b class='flag-5'>YOLOv8</b>的<b class='flag-5'>模型</b><b class='flag-5'>部署</b>與推理演示
    主站蜘蛛池模板: 性奴公司 警花| 一本道中文无码亚洲| ava云直播| 日本熟妇乱人伦A片精品软件| 扒开老师粉嫩的泬10P| 特级aa 毛片免费观看| 狠狠啪在线香蕉| 100国产精品人妻无码| 日本19禁啪啪吃奶大尺度| 国产1769一七六九视频在线| 亚洲精品乱码久久久久久直播| 久久久国产精品免费A片蜜臀| CHINESE熟女老女人HD视频| 王雨纯羞羞| 理论片87福利理论电影| 俄罗斯19girl video9| 妖精视频免费看| 日韩插啊免费视频在线观看| 国产露脸无码A区久久| 2021国产精品久久久久精品免费网| 日本亚洲精品无码区国产电影| 红豆视频免费资源观看| qvod电影在线观看| 亚洲色综合中文字幕在线| 青柠电影高清在线观看| 寂寞少妇直播| 高清国语自产拍免费| 18黄女脱内衣| 亚欧免费观看在线观看更新| 女王黄金vk| 好湿好滑好硬好爽好深视频| 爆操日本美女| 中文字幕爆乳JULIA女教师| 偷窥wc美女毛茸茸视频| 男女高潮又爽又黄又无遮挡| 国内精品久久| 成人a视频片在线观看免费| 中文字幕亚洲无线码在线| 午夜福利免费体检区| 青草国产超碰人人添人人碱| 久久视热频这里只精品|