资讯详情

资讯详情

基于英特尔 Ultra 处理器的 NPU、核显GPU 加速 YOLO12 模型推理运算

一、 基于 Intel Ultra 处理器的 NPU、核显 GPU 加速 YOLO12 模型推理在本专栏的前面文章中介绍过使用OpenVINO在CPU上加速YOLO-V8模型的推理有了明显的提升效果。而随着英特尔推出的Intel Ultra系列处理器集成了NPU专用的神经网络处理单元以及增强了的核显Arc Xe GPU系列都为AI推理任务提供了更多的硬件加速选项即使没有NVIDIA的显卡也可以轻松实现推理加速。Intel Ultra系列处理器中的NPU是专门为AI推理任务设计的低功耗加速器相比传统CPU在处理深度学习模型时具有更高的能效比。而Arc Xe系列集显GPU同样支持通过OpenVINO进行加速可以充分利用GPU的并行计算能力。本文基于Intel Ultra处理器分别实现CPU、NPU、核显GPU下的YOLO12n模型的推理并对比CPU、NPU、核显GPU三种设备在YOLO12n模型推理中的性能表现。关于YOLO V12的介绍和使用可以参考下面这篇文章实时目标检测新潮流 YOLO V12 整体介绍及微调训练本次实验使用的硬件配置设备类型型号CPUIntel® Core™ Ultra X7 358HNPUIntel® AI Boost核显 GPUIntel® Arc™ B390 GPU (iGPU)最后本实验结果在相同的处理条件下NPU相比CPU帧率提升约22.37%核显GPU相比CPU帧率提升约62.28%核显GPU相比NPU提升约32.62%。下面是本次实验主要使用的依赖版本ultralytics8.4.149 opencv-python5.0.0.93torch2.14.0torchvision0.29.0supervision0.30.2nncf3.3.0openvino2025.0.0其中openvino是英特尔的深度学习推理工具包支持在CPU、GPU、NPU等多种硬件上进行模型加速。nncf是神经网络压缩框架用于支持INT8量化。supervision是一个计算机视觉工具库用于简化目标检测结果的可视化和处理。二、验证可用设备首先需要确认系统中可用的OpenVINO加速设备。通过以下代码可以列出当前支持的所有设备importopenvinoasov coreov.Core()devicescore.available_devicesprint(可用设备列表,devices)fordindevices:print(f{d}:{core.get_property(d,FULL_DEVICE_NAME)})如图所示系统识别出了CPU、GPU、NPU三种设备。如果缺少某个设备大概率是缺少对应的驱动程序可以前往英特尔官方网站下载并安装最新的驱动英特尔驱动下载地址https://www.intel.com/content/www/us/en/download-center/home.html三、将 YOLO12n 转化为 OpenVINO 格式为了在CPU、NPU和GPU上运行相同模型保证环境一致对比加速效果这里需要先将PyTorch格式的YOLO12n模型转换为OpenVINO格式。对此ultralytics框架已经封装好了转换方法可以通过model.export()方法一键完成。这里使用INT8量化来进一步提升推理速度。fromultralyticsimportYOLO modelYOLO(yolo12n.pt)# 关键dynamicFalse 固定输入尺寸为 640int8True 开启量化提速model.export(formatopenvino,imgsz640,dynamicFalse,int8True,batch1,nmsFalse)关键参数说明参数说明format导出格式这里设置为openvinoimgsz输入图像尺寸固定为640x640dynamic是否支持动态输入尺寸设为False可提高推理速度int8是否开启INT8量化可显著提升速度batch批次大小设为1用于实时推理场景nms是否在模型中集成NMS非极大值抑制设为False运行后可以看到转换过程转换完成后在当前目录下生成yolo12n_int8_openvino_model文件夹该文件夹包含了OpenVINO格式的模型文件和相关配置可以直接用于后续的硬件加速推理。四、CPU 推理首先测试在CPU上进行推理作为基准性能。这里使用supervision库提供的标准测试视频车辆检测场景通过实时计算帧率来评估处理速度。使用ultralytics库传入openvino模型内部会自动调用openvino进行推理运算简化实现过程。importtimeimportcv2importsupervisionassvfromultralyticsimportYOLOfromsupervision.assetsimportdownload_assets,VideoAssets# 如果不存在则下载视频video_namedownload_assets(VideoAssets.VEHICLES)modelYOLO(yolo12n_int8_openvino_model)# 初始化展现对象corner_annotatorsv.BoxCornerAnnotator(corner_length15,thickness2,colorsv.Color(r255,g255,b0))# 读取视频capcv2.VideoCapture(video_name)# 初始化计时器prev_tickcv2.getTickCount()whileTrue:# 循环读取每一帧ret,framecap.read()# 由于原视频帧比较大方便处理和后面展现缩小一些framecv2.resize(frame,(1280,720))ifnotret:breakttime.time()resultmodel(frame,deviceintel:cpu)[0]use_timetime.time()-t detectionssv.Detections.from_ultralytics(result)# 绘制边框framecorner_annotator.annotate(frame,detectionsdetections)# 计算帧率current_tickcv2.getTickCount()fpscv2.getTickFrequency()/(current_tick-prev_tick)prev_tickcurrent_tick cv2.putText(frame,(FPS: {:.2f}.format(fps)), USE_TIME: str(use_time),(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow(video,frame)cv2.waitKey(1)cap.release()cv2.destroyAllWindows()运行后CPU处理速度平均FPS为22.8左右。需要注意的是不同型号的Ultra CPU处理速度会有差异下面为博主的处理速度。从截图可以看到每帧的推理时间USE_TIME在0.023s左右整体帧率稳定在22-23 FPS。这个性能作为后续NPU和GPU加速的对比基准。五、使用 NPU 加速Intel Ultra处理器中集成的NPU神经处理单元是专门为AI推理任务设计的硬件加速器具有低功耗、高能效比的特点。使用NPU进行推理时只需要将device参数设置为intel:npu即可。importtimeimportcv2importsupervisionassvfromultralyticsimportYOLOfromsupervision.assetsimportdownload_assets,VideoAssets# 如果不存在则下载视频video_namedownload_assets(VideoAssets.VEHICLES)modelYOLO(yolo12n_int8_openvino_model)# 初始化展现对象corner_annotatorsv.BoxCornerAnnotator(corner_length15,thickness2,colorsv.Color(r255,g255,b0))# 读取视频capcv2.VideoCapture(video_name)# 初始化计时器prev_tickcv2.getTickCount()whileTrue:# 循环读取每一帧ret,framecap.read()# 由于原视频帧比较大方便处理和后面展现缩小一些framecv2.resize(frame,(1280,720))ifnotret:breakttime.time()resultmodel(frame,deviceintel:npu)[0]use_timetime.time()-t detectionssv.Detections.from_ultralytics(result)# 绘制边框framecorner_annotator.annotate(frame,detectionsdetections)# 计算帧率current_tickcv2.getTickCount()fpscv2.getTickFrequency()/(current_tick-prev_tick)prev_tickcurrent_tick cv2.putText(frame,(FPS: {:.2f}.format(fps)), USE_TIME: str(use_time),(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow(video,frame)cv2.waitKey(1)cap.release()cv2.destroyAllWindows()运行后可以看到NPU处理速度平均FPS为27.9左右相比CPU的22.8 FPS提升了约22.37%从截图可以看到每帧的推理时间由之前的0.023s降低到了0.014s左右速度提升明显。NPU的优势在于功耗更低适合在笔记本等移动设备上长时间运行同时不会像CPU那样占用大量计算资源可以为其他任务留出更多的处理能力。可以在任务管理器下查看 NPU 的使用情况六、使用 Intel 核显 GPU 加速Intel Ultra处理器集成的核显GPU同样支持通过OpenVINO进行AI推理加速。相比NPUGPU拥有更强的并行计算能力可以处理更复杂的计算任务。使用核显GPU进行推理时只需要将device参数设置为intel:gpu即可。importtimeimportcv2importsupervisionassvfromultralyticsimportYOLOfromsupervision.assetsimportdownload_assets,VideoAssets# 如果不存在则下载视频video_namedownload_assets(VideoAssets.VEHICLES)modelYOLO(yolo12n_int8_openvino_model)# 初始化展现对象corner_annotatorsv.BoxCornerAnnotator(corner_length15,thickness2,colorsv.Color(r255,g255,b0))# 读取视频capcv2.VideoCapture(video_name)# 初始化计时器prev_tickcv2.getTickCount()whileTrue:# 循环读取每一帧ret,framecap.read()# 由于原视频帧比较大方便处理和后面展现缩小一些framecv2.resize(frame,(1280,720))ifnotret:breakttime.time()resultmodel(frame,deviceintel:gpu)[0]use_timetime.time()-t detectionssv.Detections.from_ultralytics(result)# 绘制边框framecorner_annotator.annotate(frame,detectionsdetections)# 计算帧率current_tickcv2.getTickCount()fpscv2.getTickFrequency()/(current_tick-prev_tick)prev_tickcurrent_tick cv2.putText(frame,(FPS: {:.2f}.format(fps)), USE_TIME: str(use_time),(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow(video,frame)cv2.waitKey(1)cap.release()cv2.destroyAllWindows()运行后可以看到核显GPU处理速度平均FPS为37.0左右相比NPU的27.9 FPS提升了约32.62%相比CPU的22.8 FPS提升了约62.28%从截图可以看到每帧的推理时间进一步降低到了0.008s左右核显GPU在三种设备中表现最优。这得益于GPU强大的并行计算能力可以同时处理大量的矩阵运算非常适合深度学习模型的推理任务。可以在任务管理器查看GPU的使用情况七、总结本文基于Intel Ultra处理器实现并对比了CPU、NPU、核显GPU三种设备在YOLO12n模型推理中的性能表现。Intel Ultra系列处理器通过NPU和 核显GPU为AI推理任务又提供了丰富的硬件加速选项配合OpenVINO工具包可以实现高效的AI应用部署。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →