【ATU Book-i.MX8系列 - eIQ Toolkit】eIQ Portal 快速使用介紹

一.   概述

伴隨著人工智慧、機器學習與深度學習的火熱盛行,恩智浦 NXP 也開始著手部屬 AI 領域的相關應用。設計了一套相當完善的 機器學習開發環境 eIQ (edge intelligence) 專門應用於 i.MX8 系列。而所謂的 eIQ Toolkit 開發工具 就是 eIQ 的衍伸產物。主要是用來輔佐初學者或是 AI 工程師來做模組的開發,提供一整套完整的機器學習訓練方式以及模組轉換工具,所產出的模組能夠直接應用於 eIQ 的開發環境。

本文章將介紹 eIQ Toolkit 之中的 eIQ Portal 開發工具,主要是幫助開發者訓練或調用機器學習模型的一套相當完整的工具。如下圖所示,為系列博文之示意架構圖。此架構圖隸屬於 i.MX8M Plus 的方案博文中,並屬於 eIQ 機器學習開發環境 內的 應用層(Application Layer) – eIQ Toolkit 的子系列 !! 時不宜遲,趕快一起來看看 “eIQ Portal 快速使用介紹” 是如何輔助 AI 工程師進行開發。

 

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

 

 

eIQ Toolkit 系列博文-文章架構示意圖

 

  

二.  eIQ Toolkit 介紹

eIQ Toolkit 是專門為機器學習所設計的一套開發工具。

由 NXP 與 Au-Zone Technologies 團隊共同開發,並搭配淺顯易懂的 GUI 介面,讓開發人員可以快速直覺地創建、優化、調試、訓練、導出、佈署模組等等一整個系列的機器學習開發流程,能讓初學者快速進入至機器學習的領域中,並有助於理解 物件分類(Object Classification) 與 物件偵測(Object Detection) 的訓練及開發流程。

 

eIQ Toolkit 可分為 eIQ Portal 與 eIQ Model Tool 兩大部分。

eIQ Portal : 提供一整套從載入資料庫、選擇最佳化目標、訓練、驗證與生成模組等機器學習佈署項目。
                   此部分屬於 Bring Your Own Data (BYOD) 的範疇,以 輸入資料/資料庫 為主。

eIQ Model Tool : 提供模組轉換的服務,如 Keras to TensorFlow Lite, ONNX to TensorFlow Lite 等等。
                             此部分屬於 Bring Your Own Model (BYOM) 的範疇,以 輸入模組(Model) 為主。

eIQ Command-line Tools : 亦可直接用下達指令方式來操作 eIQ Portal 與 eIQ Model Tool 的項目。

eIQ Toolkit 架構示意圖

 

Tip : 如何安裝 NXP eIQ Toolkit ?

進入官方網站 eIQ Toolkit for End-to-End Model Development and Deployment 的頁面點選下載。
點擊下載的 eIQ Toolkit v1.0.5 檔案,依序點選 Next 步驟即可。

 

  

三.  eIQ Portal 介紹與應用方式

eIQ Portal 是一套相當整完整的機器學習開發工具。

如上圖所示,僅需要按照流程由 載入資料庫(Import dataset) 、 強化資料(Augment dataset) 、 選擇最佳化目標(Select and Optimize model for target) 、 訓練(Train Model)、 驗證(Validate model on target) 與 發佈模組(Deploy model to target) 等項目,即可 產生模組 !! 完成機器學習的開發 !!

此工具提供幾種 MobileNet 模型 (V1/V2/V3),可幫助開發者快速訓練物件偵測與物件分類等應用。並能夠發佈/輸出多種模組格式 DeepViewRT ( *.rtm )、TensorFlow Lite ( *.tflite )、ONNX ( *.onnx )、Keras ( *.h5 )

 

eIQ Portal 應用方式

步驟 1 : 開啟 eIQ Portal  -> 點選 COMMAND LINE

步驟 2 : 開啟終端機,確認安裝 Tensorflow 1.5.0、Protobuf 和 NumPy 套件

(1) 進入 workspace 資料夾

$ cd workspace

(2) 安裝 tdqm 模組

$ python -m pip install tqdm

(3) 透過 CIFAR_uploader.py 下載 CIFAR-10 資料庫,並生成專案檔

$ python -m CIFAR_uploader

步驟 3 : 開啟專案 > workspace > cifar10.deepview

 

開啟後,將會看到由 CIFAR_uploader.py 所載入的資料庫資料。如下圖所示…

左側欄位,由標籤類別作分類並顯示每項類別的訓練、驗證數量、總數等資訊。

右側顯示窗 (較靠左的紅框標示 - 三個選項) ,可以額外加入資料集。分別為載入資料(IMPORT)、擷取攝像頭影像(CAPTURE)、或從遠端裝置擷取影像 (REMOTE)。

右側顯示窗 (較靠右的紅框標示),可以調整訓練與測試集的比例。

 

順帶一提,直接點選右側顯示視窗內的圖片,即可對該圖片進行重新標記的動作 ;
如下圖所示,點選任意處將會出現標註視窗,框選完成後即是該物體的位置資訊。接著重新選擇標籤類別資訊即可更新該影像的標籤、物件位置等訊息。

 

步驟 4 : 強化資料(Augment dataset)

點擊左下角的 AUGMENTATION TOOL 即可開始進行此步驟。

 

主要是以傳統影像處理方式來豐富資料集內的資料,也許能在得到更好的訓練結果。(可略)

如下圖所示,左側欄位可以選擇影像處理的方式,如將影像進行水平翻轉(Horizontal Flip)。

 

亦可點選 Set to default ,直接取用預設的設定。

 

步驟 5 : 選擇訓練目標(Model Selection)

點擊左下角的 SELECT MODEL 即開始設定模組相關資訊。

 

接著,選擇 物件分類(Object Classification) 與 物件偵測(Object Detection) 兩種訓練目標。
此範例請操作於 物件分類(Object Classification)

 

接著,選擇 性能(Performance) 、平衡(Balanced)、 精準(Accuracy) 三種模組最佳化目標。


此範例請操作於 平衡(Balanced)

 

接著,選擇 MCU 、 CPU 、 GPU 、 NPU 四種平台端。
此範例請操作於 神經網路加速器 NPU

 

順帶一提,亦可點選右下方的 BASE MODELS 選項來挑選基本模組。
有物件分類常用的 mobilenet v1 至 v3 的模型以及物件偵測 SSD mobilenet 的模型。

 

步驟 6 : 設置最佳化設定(Model Selection)

此步驟將須設定初始權重(Weight initialization)、輸入尺寸(Input Size)、學習率(Learning Rate)、批次數量(Batch Size)、批次次數(Epochs To Train)、最佳化方法(Optimizer) 等等。操作如下圖紅框內資訊。

 

步驟 7 : 開始訓練

設置好上圖的參數即可點選 START TRAINING 開始訓練
此處能夠呈現此工具能夠即時調整參數的優勢。點選 CONTINUE TRAINING,即可延續上次的訓練結果再次訓練 !!

 

在右方顯示視窗,能自由切換判斷模組的兩大指標 準確度(Accuray)損失函數(loss) 的結果。
同時,也能夠依照 第幾次訓練(Epochs) 來設定檢視的範圍。

 

步驟 8 : 驗證模組

按下左下角 VALIDATE 即開始驗證模型,將會於右側顯示視窗產生出 混淆矩陣(Confusion Matrix) 即可清楚地看出模組的正確性,綠色表示預測正確,紅色表示預測錯誤,顏色呈現即表示準確/錯誤率。
同時,每一個格子皆可點選查看是哪個環節出了問題。

 

步驟 9 : 佈署/輸出模型

按下 Export Settings 即選擇輸出模型格式,其格式有 DeepViewRT ( *.rtm )、TensorFlow Lite ( *.tflite )、ONNX ( *.onnx )、Keras ( *.h5 )
接著,就可以點選 EXPORT MODEL 即可輸出模組

 

因 NPU 的特性,需要將模組的權重量化為整數型態,如下圖所示。

 

步驟 10 : 實現應用

接著,將利用 TensorFlow Lite 與生成的模組作 物件分類(Object Classification) 的應用。


 測試圖片 : 


 Python 代碼 : 

import cv2
import time
import numpy as np
from tflite_runtime.interpreter import Interpreter

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

# 解析模組(解譯器)
interpreter = Interpreter(model_path="classification-precision-npu.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
width = input_details[0]['shape'][2]
height = input_details[0]['shape'][1]
nChannel = input_details[0]['shape'][3]

# 載入與整理資料
frame = cv2.imread("airplane.jpg")
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frame_resized = cv2.resize(frame_rgb, (width, height))

# 設置解譯器的輸入端
input_data = frame_resized.astype("uint8")
input_data = np.expand_dims(input_data, axis=0)
interpreter.set_tensor(input_details[0]['index'], input_data)

# 進行推理
interpreter.invoke()

# 再次進行推理(為了正確計算運算時間)
interpreter_time_start = time.time()
interpreter.invoke()
interpreter_time_end = time.time()
print(" Inference Time = ", (interpreter_time_end - interpreter_time_start)*1000 , " ms" )

# 取得解譯器的預測結果
prediction = interpreter.get_tensor(output_details[0]['index'])
prediction = np.squeeze(prediction)
index = np.squeeze(np.where(prediction==np.max(prediction)))
print("This image is " + class_names[index])


 執行結果 : 

如下圖所示,識別該物件為飛機(airplane),推理時間約 1.81 ms

 

 

四.  結語

經由上述的介紹,相信各位已經對 eIQ Portal 作用與目標有一定程度的了解,並已依照實作範例順利訓練完成模組了!! 故可以在後續的開發中,不仿試試藉由此工具來進行 物件分類(Object Classification) 或 物件偵測(Object Detection) 的開發,能夠幫助初學者更快速的上手機器學習的開發!!

 

五.  參考文件

[1] 官方網站 - eIQ™ Toolkit for End-to-End Model Development and Deployment
[2] 官方文件 - eIQ Toolkit User's Guide.pdf

 

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

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

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

評論