【ATU Book-i.MX8系列 - DeepViewRT】 DeepViewRT 快速使用介紹 - Python

一.   概述

機器學習、深度學習、人工智能,近年來可說是快速擴展並散布於我們生活之中。因此恩智浦 NXP 也開始著手部屬 AI 領域的相關應用。於 2020 年,恩智浦與加拿大的 Au-Zone Technologies 建立獨家策略合作關係,用以推廣 Au-Zone 的 神經網路框架 DeepViewRT 。幫助恩智浦的機器學習開發環境 eIQ (edge intelligence) 更加完善,更加能夠匹配 神經處理引擎(Neural Processing Unit, NPU) 來實現最佳的推理效益 !!

如下圖所示,為系列博文之示意架構圖。此架構圖隸屬於 i.MX8M Plus 的方案博文中,並屬於 eIQ 機器學習開發環境 內的 推理引擎層(Inference Engines Layer) - DeepViewRT 的子系列 !! 時不宜遲,趕快一起來看看 “DeepViewRT 快速使用介紹 - Python” 是如何應用新穎的 神經網路框架 DeepViewRT 吧 。

 

若新讀者欲理解人工智慧、機器學習以及深度學習的差異,可點選查閱下方博文
大大通精彩博文   探討機器學習與深度學習之差異

 

  

DeepViewRT 系列博文-文章架構示意圖

 

 

二.  DeepViewRT 介紹

DeepViewRT 是一套實現嵌入式處理器的神經網路推理引擎框架。

由 Au-Zone Technologies 團隊開發,該引擎是以超文本傳輸協定 HTTP 來連接遠端開發版進行模組推理與分析,故可以任意運行於 Windows / macOS / Linux 系統中。如下圖所示,整個 DeepViewRT 的應用動作可拆分為 Desktop Tools 、 ModelRunner Server、ModelRunner Library、Inference Engines 等等四大流程。換句話說 ; 在應用 DeepViewRT 前,必須透過 ModelRunner Server 建置 HTTP 位置來向平台端要求動作,並依相應的 ModelRunner Library 來執行。同時 DeepViewRT 支援各式各樣的模組架構 ( Tensorflow Lite / ONNX / DeepViewRT / ArmNN )。

如下圖所示, DeepViewRT API 亦可透過 Python 或 C API 進行使用,且針對不同的硬體需求能夠任意調用 ModelRunner Library 中的 libdeepview-rt.so 與libdeepview-rt-openvx.so 這兩個資料庫。換句話說,也就是可以自由選用 CPU 、 GPU 或 NPU 來進行機器學習的推理。

 


DeepViewRT 架構示意圖

 

 

DeepViewRT 資料庫運用方式示意圖

  

 資料庫 : 

libdeepview-rt.so : 以原生 C/ASM 資料庫實現 MCU (Cortex-M) / MPU (Cortex-A) 的運算。
libdeepview-rt-openvx.so : 以 OpenVX 資料庫實現 GPU / NPU 的運算。

 

 安裝方式 : 

請於該網站下載最新的 BSP Image, 並燒錄至 SD 系統中。即可使用 DeepViewRT !!

 

 

為了確認是否有安裝 DeepViewRT。進入開發板系統後,請輸入以下指令 :
$ pip3 list

 

 

三.  DeepViewRT Python 實作範例

 使用範例 ( Python) : 

在進行推理前,必須先知道 DeepViewRT 是一種需要透過通訊服務來啟用的神經網路引擎。因此使用者需於執行端設置相應的 URI 路徑。才能啟用 ModelClient API 來載入與推理模組 (如下方 Python 代碼) 。

 

 (1) 模組轉換 : 

使用eIQ Model Tool 或 COMMAN LINE 方法,將 eIQ Portal 物件分類實作模組轉為 rtm 模組。


$ deepview-converter classification-precision-npu.tflite classification-precision-npu.rtm
Tips : 若欲查看神經網路的運算子(Ops),請至 DeepViewRT User Manual 中的 Operations Reference 章節。

 

 (2) ModelRunner 啟用服務: 

開啟終端機輸入以下指令,程式 ModelRunner 將會啟用 HTTP Webserver 給予網路服務。
即可遠端至相應的平台中。

使用 CPU :
$ modelrunner -H 10818

使用 NPU ( 配合 OpenVX 資料庫) :
$ modelrunner -e ovx -H 10818

Tips : 其中 10818 為 URI 的位置資訊,可任意變更。

 

 (3) 測試圖片 : 

 

 

 (4) 代碼 : 

# ModelClient 為 DeepViewRT 推理引擎的主要 API
from deepview.rt.modelclient import ModelClient
import cv2
import numpy as np

# 標籤資訊
class_names = ["airplane","automobile","bird","cat","deer","dog","frog","horse","ship","truck"]

# 讀取 DeepView 模組
modelclient = ModelClient("http://localhost:10818/v1") # 須對應至 URI 的位置資訊
modelclient.load_model("classification-precision-npu.rtm")

# 載入與整理資料,並設置資料至解譯器
frame = cv2.imread("airplane.jpg")
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frame_resized = cv2.resize(frame_rgb, (32, 32))
input_val = np.expand_dims(frame_resized, axis=0)
inputs = { 'input_1': input_val.astype(np.uint8)}

# 須對應模組的輸入端節點名稱與大小
outputs = ['Identity'] # 須對應模組的輸出端節點名稱與大小

# 推理
results = modelclient.run(inputs, outputs)
prediction = np.squeeze(results['Identity'])
index = np.squeeze(np.where(prediction==np.max(prediction)))
print("This image is " + class_names[index])
put_time, post_time, eval_time = modelclient.get_timing_info() # 計算推理時間
print("put_time is ", put_time, “\n post_time is", post_time, "\n eval_time is ",eval_time)

 

 (5) 運行程式 : 

$ python3 app.py

如圖所示, CPU(ARM) 的執行時間約莫 2.8 ms、NPU 的執行時間約莫 1.4 ms

 

  

四.  結語

經由上述的介紹,相信各位已經對 DeepViewRT 介紹、用法有一定的認知了,並依照實作範例順利透過此框架進行模組推理與應用!! 故可以在後續的開發中,不仿試試藉由 ModelRunner 來運行比較各模組 (ONNX / TensorFlow / DeepVeiwRT) 的推理速度。後續篇章為將介紹使用 C 語言的方式來應用 DeepViewRT 神經網路框架。

 

五.  參考文件

[1] 官方網站 - i.MX Machine Learning User's Guide
[2] 官方網站 - eIQ Toolkit User's Guide.pdf
[3] 官方網站 - DeepViewRT_User_Manual

如有任何相關 DeepViewRT 技術問題,歡迎至博文底下留言提問 !!
接下來還會分享更多 DeepViewRT 的技術文章 !!敬請期待 【ATU Book-i.MX8 系列 - DeepViewRT
 !!

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論