本文评测来自好友Jack OmniXRI的测试。本篇结尾有原文链接,大家可以访问他的Blog,如果大家对边缘计算技术的发展很感兴趣,相信他的Blog一定不会让你失望的。
去(2023)年11月英特尔总裁季辛格亲自来台北出席Intel Innovation Taipei 2023,同时展示了最新一代的AIPC的CPU Core Ultra(内部代号:Meteor Lake)。这是Intel首次将神经网络处理单元(Neural Network Processing Unit, NPU)放进 CPU 中,除了让算力大幅提升,功耗降低外,且很容易搭配自家推论优化工具 OpenVINO Toolkit 的使用,让目前最流行的大语言模型(LLM)及生成式智能(AIGC, GenAI)应用也能更顺畅地被运行。
今年1月 CES 2024 已有许多厂商展出 AIPC 笔电产品[1],但目前市面上尚无桌机相关产品,不过已有部份厂商推出迷你电脑(NUC),如华硕(ASUS)的NUC 14 Pro[2], 东擎(ASRock)的NUCS/NUC BOX 155H/125H[3]。此次本文将使用ASUS NUC 14 Pro来进行开箱测试。
以往在AI计算机视觉应用中,对象侦测(Object Detection)是很常见的技术,其中又以YOLO系列最具代表性。当影像进行推论后,通常会将找到的对象标示一个矩形边界盒(Bounding Box),不过当对象较多且倾斜一个角度时,很容易出现和相邻对象重叠,不易识别的问题。因此就有旋转边界盒(Oriented Bounding Boxes, OBB)侦测技术被提出[4],将找到的对象计算出旋转角度后,再标示一个旋转的边界盒,如此就能产生一个更贴近原始对象的外框,让辨识上能更清楚地呈现结果。
接下来就从 AIPC 硬件规格、安装工作环境、旋转对象侦测及在不同硬件运行效能分析比较等方面帮大家做一个完整的介绍。如果大家手上没有AIPC,也不用担心,本文的OpenVINO范例在Intel Core(6到14代), Atom,Pentium甚至Xeon(Google Colab),Arm(Apple M1,M2)等系列CPU及内显iGPU (HD Graph, Iris,Arc)都能执行,只是效能会有所不同而已。
1. AIPC 硬件规格简介
本次使用的硬件为【Asus NUC 14 PRO】[2],主要就是使用 Intel Core Ultra CPU, 自带 GPU 及 NPU,非常适合进行AI推论应用,基本规格如下所示。
CPU: Intel® Core™ Ultra 5 125H, 3.6GHz, 4 x Performance-core, 8 x Efficient-core, 2 x Low Power-core (with GPU / NPU)
GPU: Intel® Arc™ GPU
NPU: 10 TOPS
RAM: DDR5 5600 32GB
SSD: Samsung MZVL2512HDJD-00B07 512GB
Wireless: Intel® Wi-Fi 6E AX211, 2x2, and Bluetooth® 5.3
LAN: 2.5G Ethernet, 10/100/1000/2500 Mbps
Size: 117mm x 112mm x 37mm
Weight: 600g
I/O Port:
1 x USB 3.2 Gen2x2 Type C (20Gbps)
3 x USB 3.2 Gen2 Type A
1 x 2.0 Type-A
2 x Thunderbolt 4 Type-C Ports
2 x HDMI 2.1 (TMDS) ports
1 x RJ45 LAN Port
2. 安装 OpenVINO Notebooks 推理环境
Intel OpenVINO Toolkit [5] 是目前最适合用于 Core Ultra 的推理工具,它可完美整合各种AI框架(如TensorFlow, PyTorch, ONNX)开发的模型及AI推理用的硬件,让Intel CPU, 内显(iGPU), 外显(dGPU), 神经加速器(NPU), 都能充份发挥运算效能。
为了更方便学习 OpenVINO, Intel 也于2021.4版后推出 Jupyter Notebook 型式的范例(在[1]中称为Interactive Tutorials (Python)),并开源在 Github,称为 Notebooks[6]。目前提供近160种范例,其中有超过一半是 AIGC 及 LLM 相关应用,最新版还提供了快速查找页面[7],方便大家可依不同分类查找。
目前想使用 Notebooks 的范例,有两种方式。一是使用云端执行,只要范例上有 【Open in Colab】 或 【Launch in Binder】符号,点击后即可快速体验,不过缺点是受限于云端资源提供有限,不是所有范例都可在云端执行。另一是安装在本地(硬盘)端,可完整享用所有示例,缺点是有很多示例要大量下载模型需要花费很多时间等待。
以下简单说明 Windows 环境安装步骤[8],其它操作系统则可参考 Github 说明[6]。
安装 Python (3.8 ~ 3.10) 皆可,点击 3.10.11此链接可直接下载安装,若已有 Python 则本步骤可略过。
安装 Git,点击2.35.1此连可直接下载安装,若已有 Git 则本步骤可略过。
点击 Microsoft Visual C++ Redistributable,此连可直接下载安装,若已有安装则本步骤可略过。
接下来开启命令行模式,按 Windows键+R ,输入 cmd,注意不要使用 PowerShell。
由于C:\通常为SSD,容量可能不足,建议可先切换到其它磁盘空间(如x:\),安装 venv后(若已安装venv可略过),再操作建立 Python 虚拟环境动作,默认名称为 openvino_env,用户可自行更换。
x:
pip install venv
python -m venv openvino_env
启动刚才创建好的虚拟环境 openvino_env,启动成功,提示符号会变成 (openvino_env)x:> 。
openvino_env\Scripts\activate
从 Github 上取得 Notebooks,并进入对应路径。请注意预设会取得最新版本的 Notebooks ,若有需要其它版本请自行切换。
git clone --depth=1 https://github.com/openvinotoolkit/openvino_notebooks.git
cd openvino_notebooks
安装完整 Notebooks ,此步骤会依网络传输速度不同,约需10~40分钟。
python -m pip install --upgrade pip wheel setuptools
pip install -r requirements.txt
启动 Jupyter Lab ,此时会自动开启系统默认网页浏览器,左侧即会显示所有示例,可双击后进入。若没有自动开启,则可手动开启,再输入网址 即可。如果要结束操作,则除了关闭浏览器外,还在命令行窗口双击两次 Ctrl+C,才可回到(openvino_env)x:\openvino_notebooks> 。localhost:8888
jupyter lab openvino_notebooks
若要结束 Python 虚拟环境可执行下列命令或直接关闭窗口亦可。
deactivate
下次再进入启动动时仅需执行下列指令即可。
x:
openvino_env\Scripts\activate
cd openvino_notebooks
jupyter lab openvino_notebooks
注:如需更完整的安装及问题排除,可参考Github[8]。
3. 旋转对象侦测简介
目前 Notebooks latest 版中在「yolov8-optimization」档案夹下提供下列几个范例。
影像实例分割 yolov8-instance-segmentation.ipynb
关键点(姿态)侦测 yolov8-keypoint-detection.ipynb
一般对象侦测 yolov8-object-detection.ipynb
旋转对象检测 yolov8-obb.ipynb
其中旋转边界盒(Oriented Bounding Boxes, OBB)侦测范例「yolov8-obb.ipynb」只有latest版中有提供,在2023.1~2024.0版只有前三项范例,且档名前多了「230-」识别文字。
「yolov8-obb.ipynb」这个范例有提供Colab云端版[9],如果只是想体验的朋友可直接点击链接。这里为了验证AIPC,所以会采用本地端执行。
由于OBB的数据集标注时多了一个旋转角度,所以大多数的数据集(如ImageNet, MS COCO)和标注工具(如 LabelImg, Labelme)都没有支持。Yolov8使用了一个公开资料集 DOTAv1进行模型预训练,主要为空拍影像,共分15类对象,如下所示。如果有需要标注此类影像时,可选用 Roboflow [10] 云平台来完成工作。
0: plane 飛機
1: ship 船舶
2: storage tank 儲存槽
3: baseball diamond 棒球場
4: tennis court 網球場
5: basketball court 籃球場
6: ground track field 田徑場
7: harbor 港口
8: bridge 橋樑
9: large vehicle 大車
10: small vehicle 小車
11: helicopter 直升機
12: roundabout 圓環
13: soccer ball field 足球場
14: swimming pool 游泳池
启动 Jupyter Lab,进到yolov8-optimization 档案夹,双击「yolov8-obb.ipynb」,就能开启这个范例。执行前可先点选菜单上「Edit」-Clear Outputs of All Cells」,清除所有输出内容,这样比较好观察输出过程的动作。接着再点击「Kernel」-「Restart Kernel and Run All Cells ...」就能一口气把程序执行完毕。
「yolov8-obb.ipynb」中已有完整注解说明,这里简单摘要一下程序大致动作。
Prerequisites:安装 Intel OpenVINO、NNCF、Yolov8 必要套件及运行程序必要库。
Get PyTorch model:下载欲执行的 PyTorch 模型,这里默认是「yolov8l-obb」,如果想下载更小一点的模型,可参考[4]。
Prepare dataset and dataloader:加载 DOTA8 少部分数据集以利后续测试使用。
Run inference:执行推论。这里要指定推论装置「device=“cpu”」,主要是要验证PyTorch在未优化前在CPU上推论效能。推论完成会顺便把耗时显示出来。
Convert PyTorch model to OpenVINO IR:将PyTorch模型转换成OpenVINO IR格式,即xml存放网络结构,bin储放权重值。
Select inference device: 选择推论装置。若在Colab上,只能选'CPU',即Xeon。而本地端则可选择'CPU','GPU'(这里指内显iGPU Iris)和'NPU',通常可以设'AUTO'让程序自动去挑选合适(效能高)的装置进行推论。
Compile model:编译模型。
Prepare the model for inference:准备用于推理的模型。
Run inference:使用IR进行推理。
Quantization:使用 NNCF 对模型进行量化,使其从浮点数32或16位(FP32/FP16)降至整数8位(INT8)。这里需要花一些时间,通常只需准备一个小的数据集进行调校即可。
Compare inference time and model sizes:比较推理时间和模型大小。这里会调用OpenVINO的benchmark_app来帮助分析效能。
4. 运行性能分析比较
接下来就根据上述程序,切换步骤6的选择装置,再进行测试,来了解整体运作效益。主要测试项目及结果如所示。
PyTorch 纯CPU测试结果:预处理7ms, 推论2046ms, 后处理6.0ms,相当于0.49 FPS。(注:模型不经量化及压缩)
性能测试工具:openvino benchmark_app
OpenVINO 模型压缩率(FP16 to INT8 with NNCF):1.997%
模型权重数字格式采FP32/INT8进行比较
分别使用AUTO/CPU/iGPU进行比较,其中AUTO执行时自动采用iGPU为主,NPU部份在此范例无法正常运行,故不列出。
由上表结果可知,在推论精度保持接近程度时,可得到下列结果。
在纯CPU下运行FP32模型时,OpenVINO速度比PyTorch快约8倍
FP32 模型经OpenVINO INT8量化及NNCF模型压缩后推论速度可提升2至3倍。
iGPU 相较 CPU 推论速度快3到4倍,但缺点是加载编译时间非常长。
将 Device 改成 AUTO 时,OpenVINO 会先自动调用 CPU 来加快启动时间,待 iGPU 开始运行时再交回控制权,如此就能有接近 iGPU 的推论效能,也能有接近 CPU 的启动速度。
以上范例,当 Device 选择 NPU 时,会产生 的错误,猜想可能是有用到OpenVINO无法软转换的元素。 get_shape was called on a descriptor::Tensor with dynamic shape
为了让大家了解 NPU 的推理效能,这里改用一般对象侦测范例「yolov8-object-detection.ipynb」进行比较,这个范例最后会使用一小段图像进行侦测,并显示每秒处理影像数量(FPS)。
由上图可看出,推理效能和先前得到结果接近,iGPU表现最佳,NPU次之,CPU最慢,AUTO略低于iGPU效能。整体来说iGPU大约是CPU的4倍,是NPU的2倍性能。
另外补充一下,推理效能的倍数在不同模型及硬件下,可能会略有不同,这和模型的结构及大小都有关连,这里的测试数据仅供参考。
小结
目前AIPC还在起步阶段,在Intel OpenVINO的协助下,已可以轻松的调用CPU,iGPU 和 NPU 进行推理。虽然NPU在效能上已比CPU来得高,但仍不如iGPU,NPU主要重点是放在低功耗,相信不久的将来NPU的效能就会有大幅提升,那么高性能低功耗的边缘推论设备就能变得无处不在,只要发挥大家的创意,那么生活就会变得更聪明更佳便利。
原文地址:https://omnixri.blogspot.com/2024/04/vmaker-edge-ai-16aipc-yolov8.html?fbclid=IwZXh0bgNhZW0CMTAAAR2-eutylCuWqIl0nfza1LTx09WLf2tDHrLo654UYMsWwtS5VnEywRgvVXo_aem_AaQzw67mXzV8xAlYgGo8yd6NtjBtH5Jn3i22vh9C0KdFs9VlqxvtTmMq-6sDBxU7LQGNN358nfgSP_cOKqPGtTOQ