【ATU Book-i.MX8系列 - ArmNN】ArmNN 使用介绍

一.   概述

此篇文章为 eIQ 系列的延伸介绍,相信各位对 NXP 所开发的 eIQ 机器学习开发环境 有一定程度上的认识了 !! 这里将介绍 eIQ 之中的一个神经网路框架,或称机器学习框架( Machine Learning Framework)。 后续将带领各位如何在 ArmNN 的框架上,使用不同的硬体处理器( CPU 或 NPU 的切换 )。如下图,文章架构图所示 !! 此架构图隶属于 i.MX8M Plus 的方案博文中,并属于机器学习内的推理引擎(Inference Engine) 的 ArmNN 部分,目前章节介绍 “ArmNN 使用介绍”

 

若新读者欲理解更多人工智能、机器学习以及深度学习的资讯,可点选查阅下方博文
大大通精彩博文   【ATU Book-i.MX8系列】博文索引

 

 

ArmNN 系列博文-文章架构示意图

 

二.  ArmNN 介绍

 目前版本 : Arm NN 21.08 

ArmNN 是一套开源的机器学习推理引擎框架,由 ARM 与 Linaro 主导开发的人工智能计画,能够提供用户更简单、轻松、快速的机器学习体验。特别的是 ArmNN 并非有自己的推理引擎,而是可以运行多种深度学习模组框架的 推理引擎(inference engine) 或 委托器(delegates) ,像是 Caffe, TensorFlow, TensorFlow Lite, 以及 ONNX 。 除此之外,亦提供 CPU / GPU/ NPU 等硬体加速资源,并可以搭配 C++ 或 Python 语言进行推理 !! 能够给予 Arm 的硬体更棒的加速体验 !!

 

 ArmNN 后端推理框架图 

如下图所示,首先由各家模组 解译(parser) 完成后,将托付给 Graph builder 与 Runtime Optimizer 至各硬体设备进行优化,而后续则有三种处理方式 ; 第一种左侧路线,就是纯 CPU 的运算。第二种就是中间路线,利用 ARM Compute Library 与 ARM Neon 核心作多线程优化进行推理。而第三种则是右侧路线,委托给神经网路推理引擎(NNRT),并透过 OVXLIB 与 OpenVX driver 来启动 GPU 或 NPU 进行硬体加速来完成推理!!

 

ArmNN 后端推理框架图

 资料来源 : 官方网站 

 

 

下列提供关于 ArmNN 之 Caffe, TensorFlow, TensorFlow Lite, ONNX 等神经网路框架的推理范例,如下列表格所示。

若欲查看更多范例,请查看 i.MX Machine Learning User's Guide.pdf 的 ArmNN 章节。

  原厂提供范例 (Caffe)

 Arm NN binary

 Model file name

 Model definition 

 Input data

 Renamed model

 CaffeAlexNet-Armnn

 bvlc_alexnet.caffemodel

 deploy.prototxt

 shark.jpg

 bvlc_alexnet_1.caffemodel

 CaffeInception_BN-Armnn

 Inception21k.caffemodel

 deploy.prototxt

 shark.jpg

 Inception-BNbatchsize1.caffemodel

 CaffeMnist-Armnn

lenet_iter_9000.caffemodel

 lenet.prototxt

 t10k-images.idx3-ubyte 

 t10k-labels.idx1-ubyte

 lenet_iter_9000.caffemodel

 PS : 此范例适用于 BSP L5.10.72 之前的版本。

 

  原厂提供范例 (TensorFlow) : 

 Arm NN binary

 Model file name

 Input data

 TfInceptionV3-Armnn

 Inception_v3_2016_08_28_frozen.pb 

 Dog.jpg,  Cat.jpg,   shark.jpg    

 TfMnist-Armnn

 simple_mnist_tf.prototxt

 t10k-images.idx3-ubyte,   t10k-labels.idx1-ubyte

 TfMobileNet-Armnn

 mobilenet_v1_1.0_224_frozen.pb

 Dog.jpg,  Cat.jpg,   shark.jpg    

       PS : 此范例适用于 BSP L5.10.72 之前的版本。

 

  原厂提供范例 (TensorFlow Lite) : 

 Arm NN binary

 Model file name

 Input data

TfLiteInceptionV3Quantized-Armnn

 inception_v3_quant.tflite

 Dog.jpg,  Cat.jpg, 
 shark.jpg    

TfLiteMnasNet-Armnn

 mnasnet_1.3_224.tflite

 Dog.jpg,  Cat.jpg,   shark.jpg    

TfLiteMobilenetQuantized-Armnn

 mobilenet_v1_1.0_224_quant.tflite

 Dog.jpg,  Cat.jpg,   shark.jpg    

TfLiteMobilenetV2Quantized-Armnn

 mobilenet_v2_1.0_224_quant.tflite

 Dog.jpg,  Cat.jpg,   shark.jpg    

TfLiteResNetV2-50-Quantized-Armnn

 Model not available

 N / A

TfLiteInceptionV4QuantizedArmnn

 Model not available

 N / A

TfLiteMobileNetSsd-Armnn

 Model not available

 N / A

TfLiteResNetV2-Armnn 

 Model not available

 N / A

TfLiteVGG16Quantized-Armnn

 Model not available

 N / A

TfLiteMobileNetQuantizedSoftmax-Armnn

 Model not available

 N / A

 

  原厂提供范例 (ONNX) : 

 Arm NN binary

 Model file name

 Input data

 OnnxMnist-Armnn

 model.onnx

 t10k-images.idx3-ubyte,   t10k-labels.idx1-ubyte

 OnnxMobileNet-Armnn

 mobilenetv2-1.0.onnx

 Dog.jpg,  Cat.jpg,   shark.jpg    

 

 ArmNN 范例使用方式 (C / C++)  : 

直接进入开发板的 /usr/bin/armnn-21.02 底下,找到相关执行档(xxx-Armnn),操作下列指令即可使用!!

$ --data-dir=data --model-dir=models --compute=CpuAcc/VsiNpu/CpuRef

--data-dir : 资料路径


--model-dir : 模组路径
--compute : CpuRef 为不启用 CPU 加速 、CpuAcc 为使用 NEON Backend 启用 CPU 加速 、 VsiNpu 为使用 NPU 或是 GPU 加速运算。

若欲查看代码编译方式,请至 i.MX Machine Learning User's Guide.pdf 的 ArmNN 章节。
 

  

三.  ArmNN 范例实现

1. Object Classification DEMO (TensorFlow Lite) 

说明 :  此范例使用 Arm NN - TensorFlow Lite神经网路推理框架与 MobileNet 模型进行分类物件。

实现步骤 :

 (1) 于开发板系统中,建立 ArmNN 资料夹

$ cd && mkdir ArmNN
$ cd ~/ArmNN && mkdir models
$ cd ~/ArmNN && mkdir data

 (2) 将测试图片与新的模组传送至开发板系统

$ scp mobilenet_v1_1.0_224_quant.tflite root@xx.xx.xx.xx: ~/ArmNN/models
$ scp Dog.jpg root@xx.xx.xx.xx: ~/ArmNN/data
$ scp Cat.jpg root@xx.xx.xx.xx: ~/ArmNN/data
$ scp shark.jpg root@xx.xx.xx.xx: ~/ArmNN/data

 (3) 范例之运行 CPU 使用方式

$ /usr/bin/armnn-21.08/TfLiteMobilenetQuantized-Armnn --data-dir=data --model-dir=models --compute=CpuAcc​

 (4) 范例之运行 NPU使用方式

$ /usr/bin/armnn-21.08/TfLiteMobilenetQuantized-Armnn --data-dir=data --model-dir=models --compute=VsiNpu​

运行结果 :

如下图所示,分类结果为 第 209 号标签的黄金猎犬(golden retriever) ,准确率为 78.9 %。
在 ArmNN 框架下,使用 CPU-ACC 运算 TF Lite模组则平均花费 48 ms,NPU 运算花费 3 ms
*** 此范例会同时测试三张影像( Dog / Cat / Shark.jpg )。此标签分类请于该连结查看。

 

 

 2. Object Classification DEMO (ONNX) 

说明 :  此范例使用 Arm NN - TensorFlow Lite神经网路推理框架与 MobileNet 模型进行分类物件。

实现步骤 :

 (1) 于开发板系统中,建立 ArmNN 资料夹

$ cd && mkdir ArmNN
$ cd ~/ArmNN && mkdir models
$ cd ~/ArmNN && mkdir data

 (2) 将测试图片与新的模组传送至开发板系统

$ scp mobilenetv2-1.0.onnx root@xx.xx.xx.xx: ~/ArmNN/models
$ scp Dog.jpg root@xx.xx.xx.xx: ~/ArmNN/data
$ scp Cat.jpg root@xx.xx.xx.xx: ~/ArmNN/data
$ scp shark.jpg root@xx.xx.xx.xx: ~/ArmNN/data

 (3) 范例之运行 CPU 使用方式

$ /usr/bin/armnn-21.08/OnnxMobileNet-Armnn --data-dir=data --model-dir=models --compute=CpuAcc

 (4) 范例之运行 NPU使用方式

$ /usr/bin/armnn-21.08/OnnxMobileNet-Armnn --data-dir=data --model-dir=models --compute=VsiNpu

运行结果 :

如下图所示,分类结果为 第 209 号标签的黄金猎犬(golden retriever) ,准确率为 15.54 %。
在 ArmNN 框架下,使用 CPU-ACC 运算 TF Lite模组则平均花费 272 ms,NPU 运算花费 545 ms。
目前 ONNX 的推理引擎与 AI 芯片的底层描述尚未完善故效能较差。
*** 此范例会同时测试三张影像( Dog / Cat / Shark.jpg )。此标签分类请于该连结查看。

 

四.  结语

上述已经介绍了 ArmNN 的使用方式,借此可以选择 TensorFlow 或是 ONNX 的神经网路框架进行推理。并可任意使用至 CPU / GPU / NPU 等加速运算芯片。在量化后的 MobileNet 最快可达到每帧 3ms 的推理速度 !! 但可惜的事,目前 ONNX 与硬体间的描述仍存在一些问题,故速度略有落差 !! 请持续关注后续的版本更新 !! 谢谢

 

五.  参考文件

[1] 官方网站 - i.MX Machine Learning User's Guide.pdf
[2] 官方网站 - Arm NN Developer Guide

如有任何相关 ArmNN 技术问题,欢迎至博文底下留言提问 !!
接下来还会分享更多 ArmNN 的技术文章 !!敬请期待 【ATU Book-i.MX8 系列 - ArmNN
 !!

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论