【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次,發文人進小黑屋喔~

評論