本文评测来自好友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)都能执行,只是效能会有所不同而已。
本次使用的硬件为【Asus NUC 14 PRO】[2],主要就是使用 Intel Core Ultra CPU, 自带 GPU 及 NPU,非常适合进行AI推论应用,基本规格如下所示。
Fig. 1 Asus NUC 14 Pro外观及内部参考图。[2]
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]。
x:
pip install venv
python -m venv openvino_env
openvino_env\Scripts\activate
git clone --depth=1 https://github.com/openvinotoolkit/openvino_notebooks.git
cd openvino_notebooks
python -m pip install --upgrade pip wheel setuptools
pip install -r requirements.txt
jupyter lab openvino_notebooks
deactivate
x:
openvino_env\Scripts\activate
cd openvino_notebooks
jupyter lab openvino_notebooks
注:如需更完整的安装及问题排除,可参考Github[8]。
Fig. 2 Intel OpenVINO Notebooks Jupyter Lab启动画面。(OmniXRI整理制作,2024/04/15)
目前 Notebooks latest 版中在「yolov8-optimization」档案夹下提供下列几个范例。
其中旋转边界盒(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」中已有完整注解说明,这里简单摘要一下程序大致动作。
Fig. 3 左:OBB 推论结果,右上:推理模型,右下:DOTA 数据集分类。
接下来就根据上述程序,切换步骤6的选择装置,再进行测试,来了解整体运作效益。主要测试项目及结果如所示。
Fig.4 Yolov8-OBB 在不同硬件推论效能比较表。
由上表结果可知,在推论精度保持接近程度时,可得到下列结果。
以上范例,当 Device 选择 NPU 时,会产生 的错误,猜想可能是有用到OpenVINO无法软转换的元素。 get_shape was called on a descriptor::Tensor with dynamic shape
为了让大家了解 NPU 的推理效能,这里改用一般对象侦测范例「yolov8-object-detection.ipynb」进行比较,这个范例最后会使用一小段图像进行侦测,并显示每秒处理影像数量(FPS)。
Fig. 5 Yolov8 对象检测在不同硬件效能评比。(OmniXRI整理制作,2024/04/15)
由上图可看出,推理效能和先前得到结果接近,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