【ATU Book-i.MX8 系列 - PyeIQ】PyeIQ 1.0 安裝與應用

關鍵字 :i.MX8NXPMachine LearningDeep LearningNPUNeural NetworkTensorflowONNXOpenCVArmNNeIQPyeIQ

一.   概述

相信各位已經從上篇文章 “PyeIQ 介紹” 得知 恩智浦(NXP) 的各種機器學習套件的應用方向。
這裡將以系列博文的方式呈現 PyeIQ 的介紹,並帶領各位一步步搭建出 PyeIQ 所需的環境以及軟體套件的安裝,接續著將呈現 PyeIQ 的基本 DEMO 展示。如下圖文章架構圖所示,此文章隸屬機器學習 PyeIQ (Python edge intelligence) 機器學習開發環境的子系列,將延伸探討 PyeIQ 1.0 安裝與應用方式。


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


二.   環境架設

首先須在 Linux (Ubuntu 18.04) 的環境下搭建環境,請開啟終端機執行以下步驟 :

 a. Yocto BSP 必要軟體安裝

(1) 安裝必要軟體 :

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm curl repo
$ sudo apt-get upgrade

藍字為 Linux 終端機指令,直接複製即可執行,灰色租體字須對應帳號或相應位置、或是可修改參數。

 (2) 下載 jdk-8u191-linux-x64.tar.gz :

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

(3) 安裝 Java Development Kit : 

$ sudo mkdir /usr/java
$ sudo tar xf jdk-8u191-linux-x64.tar.gz -C /usr/java
$ sudo vim /etc/profile

開啟檔案添加環境變數,新增設定如下兩行:

export JAVA_HOME=/usr/java/jdk1.8.0_191
export PATH=/usr/java/jdk1.8.0_191/bin:$PATH

$ source /etc/profile$sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_191/bin/java 300
$ sudo update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_191/bin/javac 300
$ sudo update-alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.8.0_191/bin/javaws 300
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac$sudo update-alternatives --config javaws

確認版本,應 java version “1.8.0_191”
$ java -version 

(4) 設置 git 帳號 : 

$ git config --global user.name "user name"
$ git config --global user.email user.name@wpi-group.com

(5) 設置 repo環境 : 

$ cd ~
$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~ /bin/repo$ chmod a+x ~ /bin/repo
$ export PATH=~/bin:$PATH
$ mkdir
$ cd
$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.3-2.0.0.xml

※ 請安裝 PyeIQ 相應的 BSP 版本,請修改灰色粗體字部份 (其他版本資訊如下表) 即可。

※ 請點選下方連結,即可查看最新版本資訊 (Zeus 為 Yocto 3.0 別名)

https://source.codeaurora.org/external/imx/imx-manifest 

repo sync 完成的畫面

$ repo sync

 

 b. Yocto BSP 編譯 

(1) BSP 環境設定 :

[MACHINE=] [DISTRO=fsl-imx-] source ./imx-setup-release.sh -b
$ EULA=1 MACHINE=imx8mpevk DISTRO=fsl-imx-xwayland
$ source ./imx-setup-release.sh -b buildxwayland 


※ 平台設置 (MACHINE)  :

若是建立於 i.MX8QM 須設為 imx8qmmek ,若是建立於 i.MX8MPlus 則須設為 imx8mpevk 。 其他平台以此類推…

※ 發行版 (DISTRO)  : 

 fsl-imx-wayland : Wayland weston graphics.
 fsl-imx-xwayland : Wayland graphics and X11. (建議使用)
 fsl-imx-fb : Frame Buffer graphics , no X11 or Wayland. (i.MX8不支持)

(2) 設置 local.conf 檔案:

請至 /buildxwayland/conf/local.conf 加入以下指令

$ IMAGE_INSTALL_append = "packagegroup-imx-ml" 

(3) BSP 編譯 :

支援 PyeIQ 所需的 Qt5 資源 (建議使用)
$ bitbake imx-image-full

(4) BSP 編譯完成 :

BSP 建置完成的畫面

 

c. Yocto BSP 編譯至 SD Card 

(1) 確認是否已讀取 SD Card :

$ ls /dev/sd*

通常 SD Card位置為 /dev/sdb

(2) 燒錄 Image 檔至 SD Card 中 :

$ export DEVSD=/dev/sdb
$ cd /buildxwayland/tmp/deploy/images/imx8mpevk
$ bunzip2 -dk -f imx-image-full-imx8mpevk.wic.bz2
$ sudo dd if=imx-image-full-imx8mpevk.wic of=${DEVSD} bs=1M && sync
(此圖 mx-image-full-imx8qmmek.wic 應改為 imx-image-full-imx8mpevk.wic)


可利用軟體方式重新分配 filesystem 的容量

(3) 燒錄完成後,將 SD Card 放置 i.MX8M Plus 開機 :

開機成功畫面

 

三.  PyeIQ 1.0 安裝

(1) 建立 PyeIQ v1.0資料夾 (執行於 linux 系統) :

$ mkdir PyeIQ_v1.0


$ cd PyeIQ_v1.0

(2) 下載 PyeIQ v1.0套件 (執行於 linux 系統)

$ git clone https://source.codeaurora.org/external/imxsupport/pyeiq/ -b v1.0
$ cd pyeiq
$ sudo python3 setup.py sdist bdist_wheel
$ cd dist

(3) 進入 i.MX8 Yocto 系統中,查詢當前 ip 位置 (執行於 i.MX8M Plus 系統)

$ ifconfig

(4) 將 PyeIQ v1.0 安裝檔放置 i.MX8 Yocto 系統之根目錄下,並開始安裝 (執行於 i.MX8M Plus 系統)

$ scp eiq-1.0.1.tar.gz root@10.2.7.186:~
$ pip3 install eiq-1.0.1.tar.gz
PyeIQ v1.0 安裝成功之畫面

(5) 測試 PyeIQ v1.0 (執行於 i.MX8M Plus 系統)

$ python3
$ import eiq

若成功載入 eiq 資料庫,則表示可以運行 PyeIQ


$ exit()

  

四.   PyeIQ 1.0 DEMO 範例執行

本篇文章提供數個範例用法,因首次使用會下載相關模組,故請確認開發版有連上網路 :

a. Object Classification 

說明 : 

此範例使用 Tensorflow lite 框架結合網路模型 MobileNet V2 識別物件。 

傳入測試圖片 :

$ scp grace_hopper.bmp root@10.2.7.186:~ 

查詢使用方式 :

$ python3 label_image.py –help 

範例之使用方式 :

$ cd ../../opt/eiq/demos
$ python3 label_image.py --image=~/grace_hopper.bmp

運行結果 :

如下圖所示,傳入測試圖片成功分類出軍服,且準確度高達 87.5 %,推理時間為 3.95 秒。

 

b. Object Detection 

說明 : 

此範例使用 Tensorflow lite 框架結合輕量化網路模型 MobileNet V2 -SSD 識別物件。

查詢使用方式 :

$ python3 object_detection_opnecv.py –help

攝像頭來源使用方式 (OpenCV)  :

$ python3 object_detection_opencv.py –webcam=”3”

使用微軟的COCO dataset作訓練的 MobileNet V2 + SSD 模型。

攝像頭來源使用方式 (GStream)  :

$ python3 object_detection_gstream.py –webcam=”3”

使用微軟的COCO dataset作訓練的 MobileNet V2 + SSD 模型。

 

c.  Fire Detection 

說明 :

此範例使用 Tensorflow lite 框架結合網路模型 CNN 識別是否有火源。

傳入測試圖片 :

$ scp campfire.jpg root@10.2.7.186:~

範例之使用方式 :

$ cd ../../opt/eiq/demos
$ python3 fire_detection_image.py --image=~/campfire.jpg

運行結果 :

如下圖所示,傳入營火之測試圖片成功識別出有火源,顯示出 Fire 文字,則推理時間約 0.146 秒。

攝像頭來源使用方式 :

$ python3 fire_detection_camera.py –webcam=”3”

 

d. Switch Label  

說明 : 

此範例使用 Tensorflow lite 框架結合輕量化網路模型 MobileNet 識別影像的物件,並提供 GPU 與 NPU 的運行模式,讓使用者快速驗證結果與效益。 

範例之使用方式 : 

$ cd ../../opt/eiq/apps
$ python3 switch-label.py

運行結果 :

如下圖所示,可以選擇任一預設好的圖片進行測試,已識別該照片(Daisy.bmp) 為雛菊機率會 100%,使用 CPU 運行花費 152.43 ms,而使用 NPU 運行花費 2.47 ms 。


 

五.  結語

上述已經詳細介紹如何安裝與使用恩智浦的機器學習開發環境 PyeIQ 1.0,更多應用請參考該官方網站
或是參考另一篇【ATU Book-PyeIQ 系列】PyeIQ 2.0 安裝與應用。
相對於 eIQ 而言, PyeIQ 更加注重於平台的轉移與快速實現 !! 後續章節,將介紹 eIQ 該如何使用以及各推理引擎的用法,幫助開發者快速地搭建所需的環境 !!



六.  參考文件

[1] NXP Community -  PyeIQ 1.x 網站
[2] NXP Community -  PyeIQ 2.x 網站
[3] NXP Community -  A Python Framework for eIQ on i.MX Processors
[4] NXP Document - i.MX Yocto Project User's Guide.pdf

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

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

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

評論