【Efinix Ti60】TinyML Hello World
【Efinix Ti60】TinyML Hello World
本文將示範官方提供的Ti60F225_tinyml_hello_world執行步驟。
請讀者先從官方github下載TinyML repo: https://github.com/Efinix-Inc/tinyml
(1) Verilog workflow
以Efinty IDE開啟
Ti60F225_tinyml_hello_world
專案專案路徑 在左側專案選單中,找到
IP
->SapphireSoc
,並點擊生成生成SapphireSoc IP 執行workflow
執行workflow 以Programmer上傳
.hex
Upload .hex
(2) Firmware
以Efinix RISC-V IDE開啟workspace
Ti60F225_tinyml_hello_world\embedded_sw\SapphireSoc
開啟workspace 匯入專案(import project),此處以
tinyml_ypd
(yolo person detection)為例Import Efinix project BSP location *BSP路徑為
Ti60F225_tinyml_hello_world\embedded_sw\SapphireSoc\bsp
選擇tinyml_ypd Build專案
Build project 執行專案
Run project Terminal
(3) TinyML Generator
官方範例中提供了TensorFlow Lite轉換RISC-V格式模型,並提供Efinix TinyML Accelerator加速工具,可將訓練好的.tflite
模型檔案透過量化(quantization)、加速器(accelerator)等方案將其縮減成適合嵌入式系統使用的最小化模型。
使用步驟:
在tinyml專案中,以python執行
.\tools\tinyml_generator
路徑中的tinyml_generator.py
來啟動GUIpy tools\tinyml_generator\tinyml_generator.py
注意
首次使用可能需要額外加裝PyQt5套件
pip install PyQt5
在跳出的GUI中,選擇最右下角的Open來開啟訓練好的
.tflite
模型開啟模型檔案 本文以官方提供的預訓練模型為範例。可在
tools\tinyml_generator\model
路徑底下找到,此處選擇yolo_person_detect.tflite
:yolo_person_detect.tflite 可在左側調整各項參數(parameter)的優化方案,而右側資源估算器(Resource Estimator)則會顯示各layer的預估生成參數數量
參數設定及資源估算 Layer種類優化方案選項
可針對如捲積層(CONV)、疊加層(ADD)、全連接層(FC)等layer種類選擇加速模式
- STANDARD: 使用高效能(high performance)加速器但占用更多資源
- LITE: 使用輕量版(lightweight)加速器,減少資源消耗
- DISABLE: 關閉加速
Layer種類優化方案 設定完畢後,按GUI右下角的
Generate
即可生成對應的RISC-V格式模型檔生成RISC-V格式模型檔 輸出路徑為
tools\tinyml_generator\output
輸出檔案路徑
將生成的新模型檔全部移動並覆蓋下列路徑的原檔案:
Ti60F225_tinyml_hello_world\embedded_sw\SapphireSoc\software\standalone\tinyml_ypd\src\model
新模型覆蓋 回到RISC-V IDE並再執行一次(2) TinyML Firmware的步驟 (如果還沒關掉RISC-V IDE,可再按一次run即可)
觀察優化前後的Inference執行時間差異
全部選項未開啟,偵測到bounding box 22個、執行時間 1337ms
全部選項未開啟 開啟CONV layer的
STANDARD
加速模式,偵測到bounding box 22個、執行時間 246ms (約-82%)開啟CONV layer的 STANDARD
加速模式,時間大幅縮短至246ms
- 0
- 0
- 0
- 0
- 0
- 0
Preview: