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

一.   概述

機器學習、深度學習、人工智能,近年來可說是快速擴展並散布於我們生活之中。因此恩智浦 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 快速使用介紹 - C” 是如何透過 C 語言來應用新穎的 神經網路框架 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 C/C++ 實作範例

 使用範例 ( C / C++ ) : 

這裡以原廠提供的 DEMO 作說明。如同 Python 操作方式,需透過通訊服務來啟用的神經網路引擎,才能啟用 ModelClient API 來載入與推理模組。

 

 (1) 下載模組與代碼 : 

進入 DEMO 網站後並登入 NXP 帳號,往下滾動至 附件資源(Additional Resources) 頁面。
下載 ssdcam-gst 1.1.zip 壓縮檔。下載完成後,請傳送至 Linux 系統。

 

 (2)  建置編譯環境 :  

此步驟須於建立編譯環境。請將 \deepviewrt\deepview-rt_2.4.25-aarch64-r0_arm64_5.10.35_2.0.0.deb 檔案傳送至 Linux 系統中。
Tips : 若開發版的 Linux Kernal 版本為 L5.4.70.2.3.2 則選擇對應的 .deb 檔案。

下一步,開啟終端機建立環境,請依照下列指令操作 :


$ sudo dpkg-deb -x deepview-rt_2.4.25-aarch64-r0_arm64_5.4.70_2.3.2.deb  /opt/fsl-imx-xwayland/5.10-hardknott/environment-setup-cortexa53-crypto-poky-linux
$ source /opt/fsl-imx-xwayland/5.10-hardknott/environment-setup-cortexa53-crypto-poky-linux

Tips : dpkg-deb 該動作為安裝 .deb 檔案,若已安裝完成即可直接下達 source 來設定環境。
          安裝完成後,亦可至相對路應下確認 include 資料夾內是否有對應的標頭檔(.h)。

 

 (3) 編譯代碼 : 

接著,將編譯原廠提供的範例 ssdcam-gst-1.1.zip 壓縮檔中 demo.c 檔案。
開啟終端機編譯代碼,請依照下列指令操作 :
Tips : 若欲詳細理解代碼,請參照 DeepViewRT User Manual 中的 C API Reference 章節。

$ cd
$ mkdir deepview-rt_detection_demo
$ unzip ssdcam-gst-1.1.zip -d deepview-rt_detection_demo/
$ cd deepview-rt_detection_demo/
$ mkdir build
$ cd build/
$ cmake ..
$ make

如下圖,編譯完成後,將看到編譯所生成的執行檔,請將執行檔與模組放至開發版的系統中。

$ scp ssdcam-gst root@x.x.x.x:~
$ scp ../../ssdcam-gst-1.1/model/mobilenet_ssd_v1_1.00_trimmed_quant_anchors.rtm root@x.x.x.x:~

 

 (4) 執行程式 : 

完成上述步驟後,即可執行 DeepViewRT C 版本的 DEMO。
請於開發板中操作下列指令 :

使用 CPU 運行方式 :

$ modelrunner -m    -H 10818 
$ ./ssdcam-gst -m    -c /dev/video<CAMERA#>

使用 NPU 運行方式  ( 配合 OpenVX 資料庫) :

$ modelrunner -m  -e ovx -H 10818 
$ ./ssdcam-gst -m   -r 127.0.0.1 -u 1 -c /dev/video<CAMERA#>

 

 (5) 結果展示 : 

 

 

 

四.  結語

經由上述的介紹,相信各位已經對 DeepViewRT 介紹、用法有一定的認知了,並依照步驟順利實作 C / C++ 版本的範例,並透過此框架進行模組推理與應用!! 故可以在後續的開發中,不仿試試藉由 ModelRunner 來運行比較各模組 (ONNX / TensorFlow Lite/ DeepVeiwRT) 的推理速度。經目前測試結果 DeepViewRT 的推理效能是優於 TensorFlow Lite !!

 

五.  參考文件

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

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

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

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

評論