Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型

Grove Vision AI Module

近年 TinyML 解決方案百花齊放,不少晶片設計廠商推出專用晶片將感測回歸或是視覺辨識應用放到低功耗 SoC 上進行推論,而台灣奇景光電推出的 Himax WE-I Plus (HX6537) 就是其一了!SoC 主頻達 400MHz 並且搭配影像加速單元,針對卷積運算與影像解碼提供硬體加速,此外也對電源管理下足功夫達到超低功耗與四種工作模式。WE-I Plus 的 EVB 已在 Sparkfun 銷售一段時日,只是售價近 70 美金對 Maker 而言是個不小的門檻,日前 Seeed Studio 推出相同核心的 Grove Vision AI 智慧鏡頭模組售價僅不到 1000 台幣,筆者便以行動支持國產晶片入手一片進行測試了!

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
搭載 Himax WE-I Plus 的 Grove Vision AI

怎麼玩?

Grove Vision AI 是以模組形式設計,本身無法獨立運作,需要搭配外部的微控制器給予指令,本篇筆者將此用 XIAO nRF52840 Sense 來做搭配。(註:nRF52840 Sense 也有獨立運作TinyML的能力,可以參考筆者之前的文章)。Grove Vision AI 的正面帶有 OV2640 攝影鏡頭、微機電麥克風、六軸IMU等神經網路推論經常會使用到的感測器,同時可以透過板上的 USB TypeC 連接電腦更新神經網路模型,此外模組上有預留排母焊接孔位,可以直接與 XIAO 系列開發板連接,將微控制器與模組緊密結合。

使用 USB Type C 傳輸線連接到 Grove Vision AI,連續按壓板上的 “BOOT” 按鈕,即可進入模新更新模式,PC 端會出現一個名為 “Grove AI” 的隨身碟裝置,可以從 Seeed Studio 官方提供的 repo 下載預訓練模型,包含人體偵測、水表偵測等物件偵測模型。Grove Vision AI 出廠時則是預設載入人體偵測的模型。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
帶有視覺、聲音、姿態等感測器

更新完神經網路模型之後並不會直接載入,需要透過外部微控制器對其下達命令方可進行推論。筆者使用同為 Seeed Studio 推出的 XIAO BLE nRF52840 與其搭配,將 Grove Vision AI 排母焊接完成後將兩者進行連接。接著到 GitHub Seeed_Arduino_GroveAI repo 選擇 “Download ZIP”,瀏覽器將自動下在此 Repo 的壓縮檔。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
下載 Grove Vision AI Library

下載完成後開啟 Arduino IDE 在功能列選擇 “Sketch” → “Include Library” → “Add .ZIP Library…”,選擇剛剛所下載的檔案加入 Arduino Library 中。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
將 Library 匯入 Arduino IDE

接著選擇對應的開發板,以筆者的測試環境來說,使用的微控制器是 XIAO nRF52840 Sense 對應在 Arduino IDE 的配置如下圖,各位如果使用不同的開發板可以自行斟酌修改。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
設定開發板參數

開啟範例程式,選擇功能列的 “File” → “Example” → “Seeed_Arduino_GroveAI” → “object_detection” 開啟物件偵測範例。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型

將程式碼編編譯後燒錄到 XIAO nRF52840 Sense,完成後將 Grove Vision AI 模組上的鏡頭對著人,開啟 Arduino IDE 的序列埠視窗則可以看到推論的結果-偵測到一個人,信心度 76 等資訊。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
微控制器 Log顯示推論之結果

若要看到 Grove Vision AI 即時推論的影像,可以多準備一條 Type C 傳輸線連接到模組,使用 Chrome 瀏覽器開啟設定頁面,點選 “Connect” 按鈕,選擇 “Grove AI” 進行連線,即可看到即時的推論畫面與結果如下圖。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
Grove Vision AI 即時推論畫面

訓練客製化YOLO物件偵測模型

除了預訓練的模型之外,開發者也可以使用 Colab 腳本訓練客製化模型放到 Grove Vision AI 上運行。大致流程如下:

  1. 準備資料集
  2. 訓練 YOLOv5 客製化模型
  3. 轉換為 TensorFlow Lite 模型
  4. 轉換為 uf2 格式,並下載到PC
  5. 從PC上傳模型到 Grove Vision AI 模組

第一步準備資料集建議可以使用 Roboflow 來處理,如何上傳與標記影像可以參考筆者之前的文章,本篇將直接從取用資料即開始說明,第二到四步驟則皆在 Colab 腳本上完成即可。

首先到 Roboflow 資料集的頁面中,點選右上角的 “Export Dataset” → 輸出格式選擇 “YOLO v5 Python”,選擇 “show download code”,並點選 “Continue”。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
從 Roboflow 匯出資料集

接著會出現一段程式碼,將此段程式碼複製後可以貼到 Colab 腳本上的程式碼段落,取代掉原有被註解掉的程式碼,接著就能選擇 ”run all” 來執行全部程式碼訓練客製化模型了!

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
將 Roboflow 資料集匯出的程式碼貼上 colab

訓練部分使用 YOLOv5-swift 為 YOLOv5 修改過的版本,主要將輸入影像大小降為 192×192 以方便佈署在低功耗的邊緣裝置上,其訓練方式與原始 YOLOv5 基本無異,預設情況下訓練 100次。訓練完成之後執行 “export.py” 將模型匯出為 tensorflow lite 格式,由於但最終模組需要載入的模型格式為 uf2 的韌體,最在執行 “uf2conv.py” 轉換為 uf2 檔案。

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型

接著在 Grove Vision AI 連接到電腦時,連續快速按壓上方 “BOOT” 按鍵兩次,即可以進入到模型更新模式,PC 上會出現一個可卸除式硬碟,將剛訓練好的以拖拉的方式傳送到該裝置即可完成更新。在完成更新後依照前述步驟,即可驅動 Grove Vision AI 執行客製化 YOLO 模型了!

Maker 玩 AI 系列(十二):Grove Vision AI 模組讓 Arduino 也能玩 YOLO 模型
運行客製化 YOLO 模型進行物件偵測

小結 – 可期的 TinyML 晶片戰國時代

近年來眾多 IC 廠商陸續布局 TinyML 晶片,能力也從影像分類進步到物件偵測與人體姿態偵測等,同時也支援載入客製化模型。像是此款 Himax WE-I 為核心的 AI 模組以功能性來說算是相當全面,唯獨就是效能還有些進步空間,日後將可預期各家晶片在戮力於物件偵測模型上的效能提升,並在多方的良性競爭下價錢也有望更為親民,開發者與 Maker 們將有更多應用的選擇!