新聞中心

EEPW首頁(yè) > 智能計(jì)算 > 設(shè)計(jì)應(yīng)用 > 在英特爾? 酷睿? Ultra AI PC上用NPU部署YOLOv11與YOLOv12

在英特爾? 酷睿? Ultra AI PC上用NPU部署YOLOv11與YOLOv12

作者:顏國(guó)進(jìn),李翊瑋 時(shí)間:2025-03-26 來(lái)源:OpenVINO 中文社區(qū) 收藏

最新的英特爾? 酷睿? Ultra 處理器(第二代)讓我們能夠在臺(tái)式機(jī)、移動(dòng)設(shè)備和邊緣中實(shí)現(xiàn)大多數(shù) AI 體驗(yàn),將 AI 加速提升到新水平,在 AI 時(shí)代為邊緣計(jì)算提供動(dòng)力。英特爾? 酷睿? Ultra 處理器提供了一套全面的專為 AI 定制的集成計(jì)算引擎,包括 CPU、GPU 和 NPU,提供高達(dá) 99 總平臺(tái) TOPS。近期,YOLO系列發(fā)布了YOLOv12, 對(duì) YOLO 框架進(jìn)行了全面增強(qiáng),特別注重集成注意力機(jī)制,同時(shí)又不犧牲 YOLO 所期望的實(shí)時(shí)處理能力,是 YOLO 系列的一次進(jìn)化,突破了人工視覺的極限。

本文引用地址:http://2s4d.com/article/202503/468646.htm

本文中,我們將使用英特爾? 酷睿? Ultra 處理器AI PC設(shè)備,結(jié)合? C# API 使用最新發(fā)布的? 2025.0 部署YOLOv11 和 YOLOv12 目標(biāo)檢測(cè),并在AIPC設(shè)備上,進(jìn)行速度測(cè)試:

? C# API項(xiàng)目鏈接:

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

本文使用的項(xiàng)目源碼鏈接為:

https://github.com/guojin-yan/YoloDeployCsharp/blob/yolov1/demo/yolo_openvino_demo/

1 前言

1.1 英特爾? 酷睿? Ultra 處理器(第二代)

全新英特爾? 酷睿? Ultra 200V系列處理器對(duì)比上代 Ultra 100,升級(jí)了模塊化結(jié)構(gòu)、封裝工藝,采用全新性能核與能效核、英特爾硬件線程調(diào)度器、Xe2微架構(gòu)銳炫GPU、第四代NPU…由此也帶來(lái)了CPU性能提升18%,GPU性能提升30%,整體功耗降低50%,以及120TOPS平臺(tái)AI算力。

酷睿Ultra 200V系列處理器共有9款SKU,包括1款酷睿Ultra 9、4款酷睿Ultra 7以及4款酷睿Ultra 5,全系8核心8線程(4個(gè)性能核與4個(gè)能效核),具體規(guī)格如下:

圖片

作為新一代旗艦,酷睿Ultra 9 288V性能核頻率最高5.1GHz、能效核頻率最高3.7GHz,擁有12MB三級(jí)緩存。GPU方面,集成銳炫140V顯卡,擁有8個(gè)全新Xe2核心、8個(gè)光線追蹤單元,頻率最高2.05GHz,可以實(shí)現(xiàn)67TOPSAI算力。而NPU集成6個(gè)第四代神經(jīng)計(jì)算引擎,AI算力提升至48TOPS。

圖片

在當(dāng)前項(xiàng)目測(cè)試,使用的是英特爾? 酷睿? Ultra 9 288V設(shè)備,處理器信息如下表所示:

圖片

1.2 OpenVINO? C# API

英特爾發(fā)行版 OpenVINO? 工具套件基于 oneAPI 而開發(fā),可以加快高性能和深度學(xué)習(xí)視覺應(yīng)用開發(fā)速度工具套件,適用于從邊緣到云的各種英特爾平臺(tái)上,幫助用戶更快地將更準(zhǔn)確的真實(shí)世界結(jié)果部署到生產(chǎn)系統(tǒng)中。通過簡(jiǎn)化的開發(fā)工作流程,OpenVINO? 可賦能開發(fā)者在現(xiàn)實(shí)世界中部署高性能應(yīng)用程序和算法。

圖片

OpenVINO? 2025.0版本在生成式AI和硬件支持方面實(shí)現(xiàn)了多項(xiàng)重大突破。生成式AI推理速度大幅提升,特別是Whisper語(yǔ)音模型和圖像修復(fù)技術(shù)的加速,讓AI應(yīng)用的實(shí)時(shí)性和效率得到顯著改善。同時(shí),新增支持Qwen 2.5和DeepSeek-R1等中文大模型,優(yōu)化了長(zhǎng)文本處理和7B模型的推理吞吐量。在硬件方面,新一代酷睿Ultra和Xeon處理器帶來(lái)了更強(qiáng)的FP16推理能力,同時(shí)OpenVINO還推出了全球首個(gè)支持torch.compile的NPU后端,提升了異構(gòu)計(jì)算能力。GPU優(yōu)化和Windows Server原生支持也讓硬件性能得到更大釋放,邊緣計(jì)算領(lǐng)域的優(yōu)化使IoT設(shè)備能效大幅提高。

OpenVINO? C# API 是一個(gè) OpenVINO? 的 .Net wrapper,應(yīng)用最新的 OpenVINO? 庫(kù)開發(fā),通過 OpenVINO? C API 實(shí)現(xiàn) .Net 對(duì) OpenVINO? Runtime 調(diào)用,使用習(xí)慣與 OpenVINO? C++ API 一致。OpenVINO? C# API 由于是基于 OpenVINO? 開發(fā),所支持的平臺(tái)與 OpenVINO? 完全一致,具體信息可以參考 OpenVINO?。通過使用 OpenVINO? C# API,可以在 .NET、.NET Framework等框架下使用 C# 語(yǔ)言實(shí)現(xiàn)深度學(xué)習(xí)模型在指定平臺(tái)推理加速。

下表為當(dāng)前發(fā)布的 OpenVINO? C# API NuGet Package,支持多個(gè)目標(biāo)平臺(tái),可以通過NuGet一鍵安裝所有依賴。

圖片

圖片

1.3 YOLOv11與YOLOv12

YOLO系列目標(biāo)檢測(cè)模型自2016年提出以來(lái),始終以"實(shí)時(shí)檢測(cè)"為核心優(yōu)勢(shì),通過端到端架構(gòu)和網(wǎng)格化預(yù)測(cè)思想,在目標(biāo)檢測(cè)領(lǐng)域持續(xù)引領(lǐng)技術(shù)革新。從YOLOv1的7x7網(wǎng)格基礎(chǔ)框架,到Y(jié)OLOv8的骨干網(wǎng)絡(luò)優(yōu)化,再到Y(jié)OLOv10的C3K2模塊創(chuàng)新,該系列通過特征提取增強(qiáng)、后處理優(yōu)化和計(jì)算效率提升,不斷突破速度與精度的平衡極限。

YOLOv11特色由Ultralytics公司開發(fā),通過改進(jìn)CSPNet主干網(wǎng)絡(luò)和頸部架構(gòu),實(shí)現(xiàn)參數(shù)精簡(jiǎn)與精度提升的雙重突破。其核心創(chuàng)新在于:

◆ 增強(qiáng)型特征提取:采用跨階段特征融合技術(shù),在復(fù)雜場(chǎng)景中捕捉細(xì)微目標(biāo)特征

◆ 動(dòng)態(tài)計(jì)算優(yōu)化:通過自適應(yīng)計(jì)算分配策略,在保持45ms推理速度的同時(shí),mAP提升3.2%

◆ 輕量化設(shè)計(jì):相比YOLOv8減少18%參數(shù)量,更適合邊緣設(shè)備部署

YOLOv12的開發(fā)人員通過其最新模型在開創(chuàng)性版本中樹立了領(lǐng)域的新標(biāo)準(zhǔn)。YOLOv12 以其無(wú)與倫比的速度、準(zhǔn)確性和多功能性而聞名,是 YOLO 系列的一次進(jìn)化,突破了人工視覺的極限。YOLOv12 對(duì) YOLO 框架進(jìn)行了全面增強(qiáng),特別注重集成注意力機(jī)制,同時(shí)又不犧牲 YOLO 模型所期望的實(shí)時(shí)處理能力。

◆ 以注意力為中心的設(shè)計(jì):YOLOv12 具有區(qū)域注意力模塊,該模塊通過分割特征圖來(lái)保持效率,將計(jì)算復(fù)雜度降低一半,同時(shí)使用 FlashAttention 來(lái)緩解實(shí)時(shí)檢測(cè)的內(nèi)存帶寬限制。

◆ 分層結(jié)構(gòu):該模型采用殘差高效層聚合網(wǎng)絡(luò)(R-ELAN)來(lái)優(yōu)化特征集成并減少梯度阻塞,并簡(jiǎn)化了最后階段以實(shí)現(xiàn)更輕、更快的架構(gòu)。

◆ 架構(gòu)增強(qiáng):通過用 7x7 可分離卷積取代傳統(tǒng)位置編碼,YOLOv12 有效地保留了位置信息。自適應(yīng) MLP 比率可以更好地分配計(jì)算資源,在實(shí)時(shí)約束下支持多樣化數(shù)據(jù)集。

◆ 訓(xùn)練和優(yōu)化:該模型使用 SGD 和自定義學(xué)習(xí)計(jì)劃訓(xùn)練了 600 多個(gè)時(shí)期,實(shí)現(xiàn)了高精度。它采用 Mosaic 和 Mixup 等數(shù)據(jù)增強(qiáng)技術(shù)來(lái)提高泛化能力,從而提升了 YOLOv12 快速、準(zhǔn)確檢測(cè)物體的能力。

兩代模型分別代表了YOLO系列在傳統(tǒng)架構(gòu)優(yōu)化與新型注意力機(jī)制融合兩個(gè)方向的最新突破,其中YOLOv12更開創(chuàng)性地將Transformer優(yōu)勢(shì)融入實(shí)時(shí)檢測(cè)框架,標(biāo)志著該系列進(jìn)入"注意力增強(qiáng)"新階段。

2 模型獲取

2.1 配置環(huán)境

安裝模型下載以及轉(zhuǎn)換環(huán)境,此處使用Anaconda進(jìn)行程序集管理,輸入以下指令創(chuàng)建一個(gè)yolo環(huán)境:

conda create -n yolo python=3.10
conda activate yolo
pip install ultralytics

圖片

2.2 下載并轉(zhuǎn)換ONNX模型

首先導(dǎo)出目標(biāo)識(shí)別模型,此處以官方預(yù)訓(xùn)練模型為例,目前ultralytics已經(jīng)集成了,依次輸入以下指令即可:

yolo export model=yolo11s.pt format=onnx

圖片

目前OpenVINO?支持直接調(diào)用ONNX模型,因此此處只導(dǎo)出ONNX模型即可,如需要導(dǎo)出OpenVINO?格式的模型,可以參考OpenVINO?官方文檔。

3 Yolo 項(xiàng)目配置

3.1 項(xiàng)目創(chuàng)建與環(huán)境配置

在Windows平臺(tái)開發(fā)者可以使用Visual Studio平臺(tái)開發(fā)程序,但無(wú)法跨平臺(tái)實(shí)現(xiàn),為了實(shí)現(xiàn)跨平臺(tái),此處采用dotnet指令進(jìn)行項(xiàng)目的創(chuàng)建和配置。

首先使用dotnet創(chuàng)建一個(gè)測(cè)試項(xiàng)目,在終端中輸入一下指令:

dotnet new console --framework net8.0 --use-program-main -o yolo_sample

此處以Windows平臺(tái)為例安裝項(xiàng)目依賴,首先是安裝OpenVINO? C# API項(xiàng)目依賴,在命令行中輸入以下指令即可:

dotnet add package OpenVINO.CSharp.API
dotnet add package OpenVINO.runtime.win
dotnet add package OpenVINO.CSharp.API.Extensions
dotnet add package OpenVINO.CSharp.API.Extensions.OpenCvSharp

關(guān)于在不同平臺(tái)上搭建 OpenVINO? C# API 開發(fā)環(huán)境請(qǐng)參考以下文章: 

◆ 在Windows上搭建OpenVINO?C#開發(fā)環(huán)境

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

◆ 在Linux上搭建OpenVINO?C#開發(fā)環(huán)境

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

◆ 在MacOS上搭建OpenVINO?C#開發(fā)環(huán)境

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

接下來(lái)安裝使用到的圖像處理庫(kù) OpenCvSharp,在命令行中輸入以下指令即可:

dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4.Extensions
dotnet add package OpenCvSharp4.runtime.win

關(guān)于在其他平臺(tái)上搭建 OpenCvSharp 開發(fā)環(huán)境請(qǐng)參考以下文章:

◆ 【OpenCV】在Linux上使用OpenCvSharp

https://mp.weixin.qq.com/s/z6ahGWlkaQs3pUtN15Lzpg

◆ 【OpenCV】在MacOS上使用OpenCvSharp

https://mp.weixin.qq.com/s/8njRodtg7lRMggBfpZDHgw

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

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="OpenCvSharp4" Version="4.10.0.20241108" />
    <PackageReference Include="OpenCvSharp4.Extensions" Version="4.10.0.20241108" />
    <PackageReference Include="OpenCvSharp4.runtime.win" Version="4.10.0.20241108" />
    <PackageReference Include="OpenVINO.CSharp.API" Version="2025.0.0.1" />
    <PackageReference Include="OpenVINO.runtime.win" Version="2025.0.0.1" />
  </ItemGroup>

</Project>

3.2 定義模型預(yù)測(cè)方法

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

◆ 初始化 OpenVINO Runtime Core

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

◆ 將模型編譯到指定設(shè)備

◆ 創(chuàng)建推理通道

◆ 處理圖像輸入數(shù)據(jù)

◆ 設(shè)置推理輸入數(shù)據(jù)

◆ 模獲取推理結(jié)果

◆ 處理結(jié)果數(shù)據(jù)

按照 OpenVINO? C# API 部署深度學(xué)習(xí)模型的步驟,編寫YOLOv10模型部署流程,在之前的項(xiàng)目里,我們已經(jīng)部署了YOLOv5~9等一系列模型,其部署流程是基本一致的,YOLOv10模型部署代碼如下所示:

internal class YoloDet
{
    public static void predict(string model_path, string image_path, string device)
    {
        DateTime start = DateTime.Now;
        // -------- Step 1. Initialize OpenVINO Runtime Core --------
        Core core = new Core();
        DateTime end = DateTime.Now;
        Console.WriteLine("1. Initialize OpenVINO Runtime Core success, time spend: " + (end - start).TotalMilliseconds + "ms.");
        // -------- Step 2. Read inference model --------
        start = DateTime.Now;
        Model model = core.read_model(model_path);
        end = DateTime.Now;
        Console.WriteLine("2. Read inference model success, time spend: " + (end - start).TotalMilliseconds + "ms.");
        // -------- Step 3. Loading a model to the device --------
        start = DateTime.Now;
        CompiledModel compiled_model = core.compile_model(model, device);
        end = DateTime.Now;
        Console.WriteLine("3. Loading a model to the device success, time spend:" + (end - start).TotalMilliseconds + "ms.");
        // -------- Step 4. Create an infer request --------
        start = DateTime.Now;
        InferRequest infer_request = compiled_model.create_infer_request();
        end = DateTime.Now;
        Console.WriteLine("4. Create an infer request success, time spend:" + (end - start).TotalMilliseconds + "ms.");
        // -------- Step 5. Process input images --------
        start = DateTime.Now;
        Mat image = new Mat(image_path); // Read image by opencvsharp
        int max_image_length = image.Cols > image.Rows ? image.Cols : image.Rows;
        Mat max_image = Mat.Zeros(new OpenCvSharp.Size(max_image_length, max_image_length), MatType.CV_8UC3);
        Rect roi = new Rect(0, 0, image.Cols, image.Rows);
        image.CopyTo(new Mat(max_image, roi));
        float factor = (float)(max_image_length / 640.0);
        end = DateTime.Now;
        Console.WriteLine("5. Process input images success, time spend:" + (end - start).TotalMilliseconds + "ms.");
        // -------- Step 6. Set up input data --------
        start = DateTime.Now;
        Tensor input_tensor = infer_request.get_input_tensor();
        Shape input_shape = input_tensor.get_shape();
        Mat input_mat = CvDnn.BlobFromImage(max_image, 1.0 / 255.0, new OpenCvSharp.Size(input_shape[2], input_shape[3]), new Scalar(), true, false);
        float[] input_data = new float[input_shape[1] * input_shape[2] * input_shape[3]];
        Marshal.Copy(input_mat.Ptr(0), input_data, 0, input_data.Length);
        input_tensor.set_data<float>(input_data);

        end = DateTime.Now;
        Console.WriteLine("6. Set up input data success, time spend:" + (end - start).TotalMilliseconds + "ms.");
        // -------- Step 7. Do inference synchronously --------
        infer_request.infer();
        start = DateTime.Now;
        infer_request.infer();
        end = DateTime.Now;
        Console.WriteLine("7. Do inference synchronously success, time spend:" + (end - start).TotalMilliseconds + "ms.");
        // -------- Step 8. Get infer result data --------
        start = DateTime.Now;
        Tensor output_tensor = infer_request.get_output_tensor();
        int output_length = (int)output_tensor.get_size();
        float[] output_data = output_tensor.get_data<float>(output_length);
        end = DateTime.Now;
        Console.WriteLine("8. Get infer result data success, time spend:" + (end - start).TotalMilliseconds + "ms.");

        // -------- Step 9. Process reault  --------
        start = DateTime.Now;
        // Storage results list
        List<Rect> position_boxes = new List<Rect>();
        List<int> class_ids = new List<int>();
        List<float> confidences = new List<float>();
        // Preprocessing output results
        for (int i = 0; i < 8400; i++)
        {
            for (int j = 4; j < 84; j++)
            {
                float conf = output_data[8400 * j + i];
                int label = j - 4;
                if (conf > 0.2)
                {
                    float cx = output_data[8400 * 0 + i];
                    float cy = output_data[8400 * 1 + i];
                    float ow = output_data[8400 * 2 + i];
                    float oh = output_data[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);
                    position_boxes.Add(box);
                    class_ids.Add(label);
                    confidences.Add(conf);
                }
            }

        }
        // NMS non maximum suppression
        int[] indexes = new int[position_boxes.Count];
        CvDnn.NMSBoxes(position_boxes, confidences, 0.5f, 0.5f, out indexes);

        end = DateTime.Now;
        Console.WriteLine("9. Process reault  success, time spend:" + (end - start).TotalMilliseconds + "ms.");
        for (int i = 0; i < indexes.Length; i++)
        {
            int index = indexes[i];
            Cv2.Rectangle(image, position_boxes[index], new Scalar(0, 0, 255), 2, LineTypes.Link8);
            Cv2.Rectangle(image, new OpenCvSharp.Point(position_boxes[index].TopLeft.X, position_boxes[index].TopLeft.Y + 30),
                new OpenCvSharp.Point(position_boxes[index].BottomRight.X, position_boxes[index].TopLeft.Y), new Scalar(0, 255, 255), -1);
            Cv2.PutText(image, class_ids[index] + "-" + confidences[index].ToString("0.00"),
                new OpenCvSharp.Point(position_boxes[index].X, position_boxes[index].Y + 25),
                HersheyFonts.HersheySimplex, 0.8, new Scalar(0, 0, 0), 2);
        }
        string output_path = Path.Combine(Path.GetDirectoryName(Path.GetFullPath(image_path)),
            Path.GetFileNameWithoutExtension(image_path) + "_result.jpg");
        Cv2.ImWrite(output_path, image);
        Console.WriteLine("The result save to " + output_path);
        Cv2.ImShow("Result", image);
        Cv2.WaitKey(0);
    }
}

接下來(lái)就是在C#static void Main(string[] args)方法里調(diào)用該方法,調(diào)用代碼如下所示:

YoloDet.predict("E:/Model/Yolo/yolo11x.onnx", "./demo_2.jpg", "NPU");
YoloDet.predict("E:/Model/Yolo/yolo12x.onnx", "./demo_2.jpg", "CPU");

4 項(xiàng)目編譯和運(yùn)行

4.1 項(xiàng)目編譯和運(yùn)行

接下來(lái)輸入項(xiàng)目編譯指令進(jìn)行項(xiàng)目編譯,輸入以下指令即可:

dotnet build

接下來(lái)運(yùn)行編譯后的程序文件,在CMD中輸入以下指令,運(yùn)行編譯后的項(xiàng)目文件:

dotnet run --no-build

4.2 模型推理效果

下面分別使用x格式的模型演示YOLOv11和YOLOv12模型運(yùn)行結(jié)果:

首先是YOLOv11x模型推理效果,如下圖所示

圖片

下面是YOLOv12x模型推理效果,如下圖所示:

圖片

5 YOLO系列模型推理性能表現(xiàn)

下面四個(gè)表格通過對(duì)YOLOv8、YOLOv11和YOLOv12系列模型在英特爾? 酷睿? Ultra 9 288V處理器上推理速度的對(duì)比分析,我們可以看到它們?cè)贑PU、NPU和GPU平臺(tái)上的表現(xiàn)差異。下面將詳細(xì)描述每個(gè)系列在不同硬件平臺(tái)上的推理速度,并對(duì)比其性能。

圖片

表 1 YOLOv8全系模型在英特爾? 酷睿? Ultra 9 288V 處理器上推理速度

表1列出了YOLOv8全系模型的推理時(shí)間,在YOLOv8系列中,隨著模型復(fù)雜度的增加,推理時(shí)間也隨之增長(zhǎng)。在CPU上,YOLOv8n(最小模型)需要24.78ms,YOLOv8x(最大模型)則達(dá)到629.35ms,推理時(shí)間大幅增加。在NPU上,YOLOv8n的推理時(shí)間為3.60ms,YOLOv8x則為33.72ms。GPU上,YOLOv8n的推理時(shí)間最短,僅為2.64ms,而YOLOv8x則為23.86ms。可以看出,YOLOv8系列在NPU和GPU加速下的表現(xiàn)非常優(yōu)越,特別是YOLOv8n和YOLOv8s,它們?cè)贕PU上的推理時(shí)間僅為2.64ms和4.62ms,顯示了YOLOv8系列在加速硬件上的高效性。

圖片

表 2  YOLOv11全系模型在英特爾? 酷睿? Ultra 9 288V 處理器上推理速度

表2介紹了YOLOv11系列,YOLOv11系列的推理時(shí)間相較于YOLOv8系列較長(zhǎng),尤其是在CPU上。YOLOv11n在CPU上的推理時(shí)間為19.90ms,相比YOLOv8n的24.78ms稍快;但隨著模型復(fù)雜度增加,YOLOv11x的CPU推理時(shí)間為499.18ms,依然長(zhǎng)于YOLOv8x的629.35ms。NPU加速方面,YOLOv11n的推理時(shí)間為3.97ms,YOLOv11x為38.50ms,雖然NPU加速顯著提升了推理速度,但整體表現(xiàn)遜色于YOLOv8系列。GPU方面,YOLOv11n在GPU上為2.55ms,YOLOv11x為20.40ms,也表現(xiàn)得相對(duì)較慢。

圖片

表 3 YOLOv12全系模型在英特爾? 酷睿? Ultra 9 288V 處理器上推理速度

YOLOv12系列的推理時(shí)間在所有系列中表現(xiàn)較慢,尤其是在CPU上。YOLOv12n的推理時(shí)間為23.31ms,相比YOLOv8n和YOLOv11n都略長(zhǎng),而YOLOv12x的推理時(shí)間為559.51ms,明顯比其他系列的最大模型更慢。在NPU上,YOLOv12n的推理時(shí)間為6.55ms,YOLOv12x為82.29ms,雖然在NPU加速下,推理速度有所提升,但相對(duì)其他系列仍然較慢。YOLOv12系列在推理速度方面的表現(xiàn)整體較為遜色,特別是在沒有GPU加速的情況下。

從推理速度的整體表現(xiàn)來(lái)看,YOLOv8系列無(wú)疑是表現(xiàn)最好的。YOLOv8在NPU和GPU加速下的推理速度非常高效,尤其是在YOLOv8n和YOLOv8s這兩個(gè)小型模型上,其推理時(shí)間明顯優(yōu)于YOLOv11和YOLOv12系列,且在GPU和NPU加速下依然保持較短的推理時(shí)間。相比之下,YOLOv11系列的表現(xiàn)略遜,雖然NPU加速有助于提升推理速度,但整體推理時(shí)間仍然較長(zhǎng)。

YOLOv12系列則在推理時(shí)間上表現(xiàn)最差,尤其是在沒有GPU加速的情況下,其推理時(shí)間遠(yuǎn)高于YOLOv8和YOLOv11系列。

6 總結(jié)

英特爾? 酷睿? Ultra 處理器憑借其出色的性能和高效的能耗管理,內(nèi)置的高算力顯卡及神經(jīng)計(jì)算單元(功耗約2W),是深度學(xué)習(xí)和應(yīng)用的理想選擇。通過結(jié)合OpenVINO? 工具套件和YOLOv11、YOLOv12等先進(jìn)模型,我們可以顯著提升推理性能,并確保在不同計(jì)算單元上高效運(yùn)行。

本文介紹了如何配置開發(fā)環(huán)境、使用C# API進(jìn)行模型部署,以及如何利用處理器的優(yōu)勢(shì)優(yōu)化應(yīng)用程序性能。隨著AI技術(shù)的不斷發(fā)展,英特爾的硬件和軟件工具將繼續(xù)為開發(fā)者提供更強(qiáng)大的支持,推動(dòng)人工智能在各個(gè)領(lǐng)域的應(yīng)用與創(chuàng)新。希望通過本文的學(xué)習(xí),讀者能夠在實(shí)際項(xiàng)目中靈活運(yùn)用這些技術(shù),實(shí)現(xiàn)更高效、更智能的解決方案。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉