Back to Raspberry Pi Taiwan

【活動/社群聚會】Raspberry Pi 社群聚會 #36 會後資料 (Raspberry Pi tinyML)

Last Updated on 2023 年 6 月 5 日 by 小編

第三十六次 Raspberry Pi 社群聚會會後資料,希望透過社群活動的分享和交流,找到更多 Raspberry Pi 的可能。本次主題是「tinyML」。Raspberry Pi 社群聚會 #36 會後資料 提供下載。過往資訊可看共筆,報名可到 KKTIX

這次活動 Creative5 贊助 USB 小禮物,有各種 USB 轉 microUSB 和 USB 轉 USB-Type-C 等傳輸線和轉接頭。台灣樹莓派 贊助 Raspberry Pi Pico W(需抽籤),感謝各位乾爹。

分享者1:sosorry(台灣樹莓派)

題目:Raspberry Pi Pico W + tinyML

IoT (Internet Of Things) 已經深入我們周遭,各種感測器(Things)透過低功耗網路串連後,統一由閘道器接到網際網路(Internet),使用者再透過網頁界面或是手機應用程式讀取或是控制感測器,這樣的概念就是物聯網。

Internet of Things
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

其中 IoT 最典型的例子是智慧手環 (Smart Wristband)。智慧手環內建了 IMU 慣性測量單元,可偵測加速度或是角速度等數值。這些數值透過 LPWA 或是藍牙等低功耗技術傳到雲端運算姿態,使用者再透過儀表板看到各種姿態結果。

IoT情境/智慧手環情境
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

但由於頻寬或電力限制,智慧手環通常只傳送取樣後的資料,而不會傳送原始資訊。

IoT情境/智慧手環取樣傳送
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

但試想一下,如果智慧手環可以即時對原始資訊做訊號運算,將會有更多有趣的發現。比如說使用者是跌倒了,還是只是蹲下來綁鞋帶等,這可以根據不同情境做後續的處理。此外,如果能即時對原始資訊做推論,並且只傳送推論後的結果將降低資料傳送量。

IoT情境/智慧手環 + tinyML
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

人工智慧 (Artificial Intelligence)是一個很大的集合,包含了機器學習 (Machine Learning) 和深度學習 (Deep Learning)。而 AI 的終極目標是電腦能模仿人類思考進而模擬人類的行為。機器學習的特色是從資料中學習出模型,而深度學習則是雖然也是由資料學習出模型,但過程中只需要給予夠多並且適合的資料,而不用先提示特徵。

深度學習、機器學習和人工智慧

tinyML 一詞最初是在 Pete WardenDaniel Situnayake 合作的書籍《TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers》,這不是一種新的技術,而是針對功耗在1mW、記憶體在kB、時脈在MHz等級的嵌入式裝置實現機器學習。Arm 的傳教士 Neil Tan 也寫了 uTensor 極輕量化的深度學習介面框架,其開發環境是基於 MbedTensorFlow,目的是將 AI 的運算及應用推到 MCU 等級的邊緣設備上。

tinyML 由來
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

常見的 tinyML 應用包括有喚醒詞偵測、機台維護預測、聲學異常檢測、物件偵測、活動偵測等。

tinyML 常見應用
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

tinyML 需要的硬體包括開發板,例如 OpenMV、SparkFun Edge、Sipeed Max、Arduino Nano 33 BLE Sense,或是加速推論用的 DSP、ASIC、KPU 等。需要的軟體包括 TensorFlow、TensorFlow Lite(TFLite)、TFLite for MCU、Sony NNABLA 或是 Edge Impulse 等。

tinyML所需要的軟硬體
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

什麼樣的硬體適合 tinyML 呢? 那要看運算量對應適合的 ARM 系列處理器。比如說振動偵測、喚醒詞偵測適合用 Cortex-M,而異常偵測、物件偵測可能用 Cortex-M55 就可以做了,但手勢偵測、語音辨識、物件分類、即時辨識等可能需要 Cortex-A 以上比較適合。

運算量對應適合的ARM系列處理器
圖片來源:AI for IoT: Opening up the Last Frontier

常見 tinyML 開發板分成 Arm Cortex 系列的 OpenMV、Wio Terminal、Arduino Nano 33 BLE、SparkFun Edge 和 Raspberry Pi Pico。如果是 ESP32 系列則有 ESPectro32 和 ESP-EYE。如果是 K210 則有 Maix Amigo、HuskyLens 和 MatchX EdgeX。

常見tinyML開發板
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

實際 tinyML 的工作流程如下圖,當我們用 Keras、TensorFlow、Caffe 常用的框架建立出模型儲存成 .h5、.pb、.caffemodel 之類的檔案結構後,會使用各種優化技巧並轉換成 TensorFlow Lite 格式。但由於佈署在 MCU 等級的邊緣裝置通常沒有支援 TensorFlow Lite 等相對應的函式庫,因此需要將模型再轉換成 C Byte Array 在程式中直接可直接計算,或是轉成 IR(Intermediate Representation)交給邊緣裝置直接推論,才能將原始資訊在邊緣裝置做即時的推論。

常見tinyML工作流程
圖片來源:“TinyML with MicroPython” by Andri Yadi – PyCon Indonesia 2020

這次我們使用 ADXL335 做現場展示。ADXL335 是美國 ADI 公司推出高精度類比三軸加速度感測器,可感應到的範圍為 ±3g,常被用來做移動偵測等應用。

ADXL335感測器規格/特色

Raspberry Pi Pico 是 Raspberry Pi 基於 RP2040 推出的開發板,以非常低的價格,提供許多令人開心的規格。例如使用 Arm Cortex M0+ 雙核心 (Dual-Core),最高可達 133MHz 的動態時脈。除了有 264KByte 的 SRAM,還有高達 2MByte 的 QSPI Flash 儲存空間。Raspberry Pi Pico 支援 USB 1.1 Host 和 Device 模式,並有 26 個 GPIO (包括 26 個數位 I/O、3 個 12-bit 的 ADC、2 組 UART、2 組 SPI、和 2 組 I2C)。

Raspberry Pi Pico
圖片來源:Raspberry Pi Pico Microcontroller Board

使用 RP2040/Pico 有很多好處,例如:

使用RP2040/Pico的好處

這次展示使用到 ADXL335 感測器得到類比三軸加速度數值,再使用 Raspberry Pi Pico 讀取 ADXL335 的加速度數值後做即時推論。接線部份分別將 ADXL335 的 X-Out、Y-Out、Z-Out 接到 Pico 的 Pin31(GPIO26)、Pin32(GPIO27)、Pin34(GPIO28)。由於 ADXL335 的工作電壓是 3.3V-6V,我們可直接接到 Pico 的 Pin36(3.3V),詳細接線圖可參考下圖。

有關於 Raspberry Pi Pico 的 GPIO 使用方法,我們有很詳細的兩天教學,可參考 Day1Day2 投影片。

ADXL335接線圖

使用 MicroPython 讀取 ADXL335 的範例程式如下,我們設定讀取速度約 ~50Hz,並且取名為 main.py 讓該程式能一上電就自動執行。

from machine import Pin, ADC
import utime

xx = ADC(26) #GPIO-26
yy = ADC(27) #GPIO-27
zz = ADC(28) #GPIO-28

while True:
    x = xx.read_u16()
    y = yy.read_u16()
    z = zz.read_u16()

    data = str(x) + "," + str(y) + "," + str(z)
    print(data)

    utime.sleep(0.02)

收資料main.py

標準的機器學習或是深度學習工作流程會需要從邊緣裝置(Edge Device)取得感測器原始數值成為訓練/測試用的資料集(Dataset),再經由高算力設備或是雲端服務如 Google ColabAmazon AWS、或是 Microsoft Azure 進行訓練並和驗證,並在符合一定條件下測試通過後產生模型,最後將模型佈署回邊緣裝置。

ML/DL工作流程
圖片來源:Getting Started with Edge Impulse

Edge Impulse 是邊緣裝置 AI 雲端平台,可優化模型並輕鬆部署到任何邊緣裝置。藉由 Edge Impulse 提供的工具(例如 edge-impulse-data-forwarder)和平台服務,使用者可以一次完成收資料/訓練/驗證三個願望。

Edge Impulse 一次完成收資料/訓練/驗證三個願望
圖片來源:Getting Started with Edge Impulse

Edge Impulse 使用流程如下,官方網站提供許多教學能讓初學者無痛上手,還有手把手的影片

Edge Impulse使用流程

Edge Impulse 訓練模型完畢後,可以選擇直接下載可用的韌體(Firmware)或是下載能再二次開發的函式庫(Library),因為我們可能需要再整合一些功能因此選擇下載函式庫,並修改裡面的 main.cpp 程式,主程式如下。

推論main.cpp

最後將一整包原始檔用 cmake 和 make 編譯後,產生 uf2 檔案後就可以放在 Raspberry Pi Pico 上測試推論結果了。

我們一共設計了三種手勢,分別是靜止(idle)、上下(updown)、波浪(wave),使用 Edge Impulse 平台所訓練出的模型,我們可在即時 Pico 上即時辨識這三種手勢。

但因為硬體限制,因此在收資料時使用的可以是 MicroPython 程式,但撰寫推論結果部份,目前還沒辦法使用 MicroPython 程式只能使用 C/C++,因此這次的分享題目稱為 TinyML with MicroPython on Raspberry Pi Pico W。半套

tinyML 即時推論

TinyML with MicroPython on Raspberry Pi Pico W。半套 投影片下載

 

TinyML with MicroPython on Raspberry Pi Pico W。半套

 

分享者2:許哲豪(Jack Hsu)(小名 史蒂芬周)

題目:如何使用 TinyML 來玩電腦視覺

Raspberry Pi 社群聚會 #36 會後資料

許哲豪(Jack Hsu)博士專注在電腦視覺、實境互動、邊緣計算及人工智慧技術等領域,是 Edge AI Taiwan 社群版主及 歐尼克斯實境互動工作室(OmniXRI) 創辦人,目前在臺灣科技大學資訊工程系開設人工智慧與邊緣運算實務

如何使用 TinyML 來玩電腦視覺
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

Jack 曾經在 2021 iThome 鐵人賽“爭什麼,把AI和MCU摻在一起做tinyML就對了!” 技術文章得到「Arm Platforms」組的冠軍,由於 Jack 用 史蒂芬周 當作筆名,在該技術文章中使用許多周星馳食神的對白,因此目前小名也稱為 “史蒂芬周”。

講師簡介
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

這次分享會從硬體角度出發,說明 微型化電腦視覺的發展趨勢和 TinyML 技術發展現況,再介紹可使用 TinyML 的硬體和相關限制。

簡報大綱
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

這幾年 AI 的發展,已經演變成網雲端無線資源的極大化(例如 ChatGPT 每天需花費 USD$100,000 運作)和邊緣端極少資源的極小化(例如使用 MCU 等級做推論)這兩端發展。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

而電腦(機器)視覺架構分成四個面向,包括相機面(工業型相機、雙目相機、深度相機… 等)、軟體面(作業系統層級、開發工具 SDK 層級、電腦視覺函式庫層級、硬體加速層級等)、鏡頭面(不同的光學倍率、焦距、解析度…)和光源面(點光源、面光源、不同波長的光源、角度… 等),都有可能影響實做精準度結果。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

傳統的機器視覺應用,強項在影像強化、特徵提取、瑕疵檢測等,對於 字元辨識、幾何分析或是影像拼接等也有不錯的效果。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

但新型態的 AI (深度學習) 電腦視覺應用對於圖片中的物件辨識和定位、分析相同物件的語意分割、或是像素等級的實例分割 都有很好的結果。特別是對於無中生有的 生成對抗式網路 (Generative Adversarial Network, GAN) 相關應用,例如 人臉生成、風格轉換、文字轉影像等,更是有非常好的效果。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

但實務上 新型態 AI 電腦視覺 雖然有許多優點,但卻沒有大規模的應用在工業界。因為 AI 電腦視覺需要大量的資料驅動才能產生好的模型做辨識,但實際操作後會發現,以現行的 AI 電腦視覺技術要能達到和傳統型機器視覺相同的精確度,需要花費更高的佈署成本。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

過去在工業界的電腦視覺系統發展,需要採用整套的解決方案,包括從電腦、相機、鏡頭、光源到軟體。但近年來由於 單板電腦 (Single Board Computer, SBC) 的興起,整合不同的軟硬體方案例如使用 Raspberry Pi 開發板加上 ADLINK 的攝影機再加上開源的機器視覺軟體就可以達到相似的效果。而更多時候甚至可以採用單晶片 (MCU) 等級的硬體把電腦視覺當作感測器來使用。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

Arduino PRO Nicla Vision 為例,一個只有大拇指指甲大小的開發板,具有高性能單晶片並且高度整合多種感測器(包括聲音、影像、運動、環境等),有線/無線的連線方式,還可以連接各種 AI 開發工具,是目前微型電腦化視覺的發展趨勢。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

微型機器學習 (Tiny Machine Learning, TinyML) 廣泛指稱能在功耗 mW 等級的硬體上執行機器學習的推論。這樣的硬體因為功耗極低,因此可以實現永遠在線 (Always On) 和支援用鈕扣電池供電的情境。而 TinyML 也可稱為 MCU AI, Tiny AI, Micro AI, On Device AI… 等等同義詞。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

一些廠商基於戰略目標成立了 tinyML 基金會,希望能透過軟硬體整合、上下游串連等,建立出生態系統並累積成功案例,將 TinyML 技術推廣到各領域。目前許多檯面上的知名公司,例如 ArmQualcommAnalog DevicesRenesasEdge ImpulseMicrosoft 等等,涵蓋了半導體製造商、硬體平台公司、軟體公司、雲端服務平台公司等等各種不同類型的廠商,都是希望能一起把餅做大。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

TinyML 常見應用及使用限制是,根據 MCU 等級適用的場景也不同。比較低階的 MCU 適合非影像類的智慧感測,例如振動偵測、感測器融合、喚醒詞偵測等;而如果使用到 Cortex-A 等級以上的硬體,可以作到比較複雜的應用例如即時辨識或是物件分類等等。因此選用的硬體會和所需要的應用場景相關,需要先分析目標對象,才能決定硬體規格。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

Jack 整理了多種案例,分類出 TinyML 目前最有可能發展的四個方向,分別是聲音(例如寶寶哭聲自動搖籃、重金屬樂偵測器、關鍵詞偵測),運動(手勢控制方向燈、包裹運送異常振動、智能球拍虛擬教練),環境(氣味辨識、空氣品質分類辨識、溫濕度氣壓分類)和影像(類比指針讀數辨識、氣象分類、口罩辨識)。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

傳統型的 AIoT 雖然終端設備使用的是 MCU,但人工智慧推論部份會仰賴雲端計算,因此需要有穩定的通訊方式。但現在 tinyML 可以在終端設備直接推論,也不會將原始的完整資訊上傳到雲端,而只有將推論結果傳送回去,因此可降低通訊的需求,但完成原本 AIoT 可做的任務。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

傳統中大型 AI 應用程式,模型建置可能使用 TensorFlow, PyTorch, Caffe, 或是 ONNX 等框架,在訓練調參數使用 CPU, GPU, TPU, NPU, FPGA, ASIC 等硬體,在模型優化使用 TensorFlow Lite, OpenVINO, TensorRT,再搭配量化、剪枝、蒸餾、壓縮等技巧。

但如果是小型 AI 應用程式(MCU),常使用整合型開發平台例如 Edge Impulse, AIfES, cAInvas, SensiML 等。使用的框架可能是 Arm Mbed + CMSIS-NN 或是 TFLite for MCU 等。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

整體看來,TinyML 程式軟體堆疊架構 (Arm Based) 會類似下圖。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

除了開發工具和傳統 AI 不同以外,TinyML 傾向規則驅動,希望從開發到訓練佈署可以低碼或是無碼 (Low/No Code)。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

目前 Edge Impulse 是最主流的 TinyML 雲端開發平台,支援超過 30 種開發板,並且可以在平台上一次完成收資料/訓練/驗證三個步驟。最後也可以按照需求,下載已經編譯好的整包韌體,或是匯出成 C/C++ 函式庫提供二次開發。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

除了 Edge Impulse 雲端開發平台以外,各 MCU 大廠也有推出自己的開發工具,例如 STSTM32 推出的 Cube.AI,或是 NXP 提供的 eIQ 開發環境,或是 ArmMbed + CMSIS-NN 函式庫。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

TinyML 發展趨勢從目前的 Edge Impulse 一站式開發平台,慢慢的硬體廠商往多核(大小核)發展,或是增加神經運算硬體可支援平行加速指令。未來開發流程希望能更自動化,例如自動生成模型、調參、優化等,並且能做 ML 維運(MLOps),包括資料集管理、模型生成佈署、運行監視重訓等。有了硬體支援並搭配 MLOps,未來可以做 On Device Learning 定時定量重新訓練,並自動優化後佈署上線。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

由於 MCU 能執行的 TinyML 有限,未來如果希望 MCU 能處理更複雜的運算,可能的方法為 提高工作時脈、使用平行/向量加速指令集加速、或是搭配多核心(大小核)加速、或是使用額外的 NPU(DLA) 等神經網路加速器等硬體、或是乾脆採用具有 MCU + NPU 等級的 Cortex-M、或是更高級的 MPU + NPU 等級的 Cortex-A。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

要讓 MCU 實現微型化電腦視覺,最好是開發板上就已經有攝影機或是有保留攝影機界面。而電腦視覺需要 MCU 有比較強大的運算能力才能進行推論,因此通常是 Cortex-M3/M4/M55/M7 或是需要搭配 NPU。目前符合以上條件的大概有 Arducam Pico4ML-BLEArduino Nano 33 BLESipeed Maix BitRealtek AMb82-MiniEspressif ESP-EYEOpenMV Cam H7 PlusArduino Nicla VisionHimax WE-I Plus EVBSeeed Studio Grove Vision AI (詳細列表如下圖)

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)
dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

Arducam Pico4ML-BLE 是使用 RP2040 的開發板,Arm Cortex-M0+ 雙核心處理器,最高可達 133MHz,內建 264KB SRAM 和 2MB Flash,搭配 26 組 GPIO 腳位,可支援 C/C++ 和 MicroPython 開發。Arducam Pico4ML-BLE 內建 0.96″ LCD 和 HiMax HM01B0 相機模組,是目前市面上同時內建相機模組和顯示螢幕,並且有 BLE 可以做通訊的最經濟實惠的 TinyML 開發板。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

除了 Arducam Pico4ML-BLE 以外,台灣 IC 設計公司奇景光電(HiMax)的 WE-I Plus HX6537-A,支援 Google TensorFlow Lite for Microcontrollers,連 TinyML 名人 Pete Warden 所創立的 Useful Sensors 公司的產品 Person Sensor 都採用了 WE-I Plus HX6537-A,後勢相當看好。而 TinyML 聯盟成員之一的 Seeed StudioSeeed Studio Grove Vision AI 使用額外的 DSP 做運算,也是 TinyML 電腦視覺開發板的趨勢。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

其他如 Sipeed Maix Bit 使用額外的 NPU,或是 ESP-EYE AI Board Espressif 使用 DSP 甚至是支援 RISC-V 指令集的硬體,都是 TinyML 電腦視覺開發板未來的趨勢。

dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

小結。

  • 隨半導體製程進步,MCU 性能逐漸提昇,以 MCU 實現無連網的小型 AI 視覺應用已不再遙不可及。
  • TinyML 的硬體、演算法、開發工具已逐漸到位,可遇見未來有更多離線邊緣智慧(Edge AI & AIoT),創造新一波的商機。
  • NPU 已開始整併到 MCU 和 MPU 中,算力有大幅提昇,讓 MCU 不只能運行機器學習演算法,更可執行小型深度學習應用。
  • 目前 MCU+NPU 開發小型 AI 視覺應用還在起步中,透過許多整合型工具及平台可減少 MCU 或 AI 工程師跨域整合開發困難度。
  • 台灣為世界前幾大 MCU 供應地,目前對於 TinyML (MCU AI) 的投入仍不足,值得各廠商投入更多資源創造新一波 AI 浪潮。
dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)
dd
圖片來源:歐尼克斯實境互動工作室(OmniXRI)

Jack Hsu 博士 (a.k.a 史蒂芬周) 簡報完整內容 下載

 

閃電講:sosorry(台灣樹莓派)

題目:Raspberry Pi Debug Probe 介紹

這次的 閃電講 我們介紹了 Raspberry Pi Debug Probe,Raspberry Pi Debug Probe 是一種 USB 設備,支援 UART 序列埠和標準 ARM 序列偵錯 (SWD) 界面。提供簡單、無焊接、可隨插即用的偵錯。

我們也現場展示了如何使用 Debug Probe 偵錯,使用 pico-exampleshello_world 當範例。偵錯過程會使用到 GDB 的語法,可以參考 透過 GDB 進行遠端除錯通過GDB 學習C 語言基本 gdb 文章練習一下。

不過因為時間的關係,沒來得及展示使用 Debug Probe 偵錯多執行緒 (multi-thread) 的環境,下次講到類似的題目再表演吧~

Raspberry Pi Debug Probe 介紹 投影片下載

Raspberry Pi Debug Probe 介紹

 

更多照片請參考 台灣 RaspberryPi 社群聚會 #36(tinyML) 相簿

我們很高興能持續舉辦社群聚會,如果大家有想分享的主題,可以來信告訴我們(hi_AT_piepie.com.tw)。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Back to Raspberry Pi Taiwan