一. 概述
機器學習、深度學習、人工智能,近年來可說是快速擴展並散布於我們生活之中。因此恩智浦 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】 !!
評論