【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.pyWarning
首次使用可能需要額外加裝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
