自從上次在街邊吃了一碗不怎麼地「雜碎麵」,咖哩魚蛋沒魚味,咖哩又不入味,失敗!豬皮煮得太爛,沒咬頭,失敗!豬血鬆垮垮,一夾就散,失敗!蘿蔔沒挑過都是筋,失敗中的失敗!最離譜的就是這些大腸,完全沒洗乾淨,還有塊屎,有沒有搞錯呀?讓我深刻地體悟到這和tinyML的開發有異曲同工之妙,資料標註資料不足標註又不確實,失敗!模型設計得太簡單,沒準度,失敗!模型訓練的太擬合,一測試精準度就掉,失敗!模型沒優化都是冗餘參數,失敗中的失敗!更離譜的就是佈署,完全沒考慮MCU的記憶體空間,還會爆掉,有沒有搞錯呀?所以難道要像唐牛一樣到中國廚藝學院進修個十年才能煮出一碗好吃的「雜碎麵」嗎?難道tinyML的開發就不能一次到位、讓大家輕鬆上手嗎?
經過[Day 16]和[Day 17]「TFLM + BLE Sense + MP34DT05 就成了迷你智慧音箱」的說明後,大家大概可以理解一個簡單的喚醒詞(語音命令)辨識就要包含下列步驟。
所以光是這樣一個小小的應用,開發者不僅要搞懂AI開發及轉換程序,又要理解MCU硬體相關控制及如何串接AI端完成的模型,更慘的是還要搞懂信號預處理的領域知識,相信可能很多剛入門的朋友看完後都想退番,不想追下去了。不過幸運地是,有很多廠商注意到這個整合(麻煩)問題,於是紛紛推出雲端一站式平台來開發tinyML的應用,如[Day 10] tinyML整合開發平台介紹幫大家介紹過的內容。
在這麼多平台中,其中Edge Impulse算是比較知名且較多人使用的tinyML整合開發系統(如圖Fig. 19-1所示),有超過一千家以上企業及超過二萬個專案在其系統上開發,可支援的開發板及MCU供應商也有數十家。這家公司於2019年創立,主要是希望大家能在五分鐘內就能創造出像智慧感測器、聲音、視覺等tinyML應用在各種MCU上執行,透過雲端服務更方便分享、管理。Edge Impulse主要提供了一個雲端操作介紹,只要使用網頁瀏覽器就能完成四大步驟及循環,包括原始資料收集、分割產生資料集(Dataset),模型建置和訓練完成沖擊(Impulse),經過調參即可完成測試(Tests),最後再將所有內容打包佈署到邊緣裝置(Edge Device),如果不滿意推論準確度結果可再重新循環這些步驟。
Fig. 19-1 Edge Impulse雲端一站式tinyML開發平台操作介面、主要工作項目及硬體支援廠商。(OmniXRI整理繪製, 2021/10/4)
所以接下來同樣會使用**Arduino Nano 33 BLE Sense(以下簡稱BLE Sense)**為工作開發板,利用板上的辨識「Yes」、「No」的例子來重新說明一次,讓大家感受一下其便捷性。不過在使用前有些預備工作要處理。
Fig. 19-2 Edge Impulse申請帳號流程。(OmniXRI整理繪製, 2021/10/4)
安裝CLI套件
npm install -g edge-impulse-cli --force
連接BLE Sense開發板:使用USB纜線(注意不要拿到只有充電功能的線)連接電腦和開發板。
更新開發板韌體
設定金鑰(Keys):在Windows命令列視窗執行下列命令,過程中要確定網路有連線,因為會登入到Edge Impulse網站中,此時會要求輸入使用者姓名、密碼及板子的名字(隨便取無妨)。其結果如圖Fig. 19-4所示。啟動後這個視窗要一直開著(可以最小化),直到結束Edge Impulse網頁操作為止。
edge-impulse-daemon
Fig. 19-4 啟動Edge Impulse後台程式以連接網頁瀏覽器。(OmniXRI整理繪製, 2021/10/4)
驗證開發板連接狀態:
接著就進到Edge Impulse專案頁面,點擊左側Device項目,此時會看到BLE Sense顯示在畫面上,但要注意的是燈號,綠燈表連線OK,紅燈表失敗。如圖Fig. 19-5所示。
Fig. 19-5 執行edge-impulse-daemon開發板連線狀況。(OmniXRI整理繪製, 2021/10/4)
到了這裡,開發環境大致OK,下個章節就開始在實際演練「關鍵字語音辨識」。
ps. 為讓文章更活潑傳達硬梆梆的技術內容,所以引用了經典電影「食神」的橋段,希望小弟戲劇性的二創不會引起電影公司的不悅,在此對星爺及電影公司致上崇高的敬意,敬請見諒。
參考連結
Edge Impulse官網
Edge Impulse Documentation - Getting Started 說明文件
Edge Impulse Arduino Nano 33 BLE Sense安裝程序
Edge Impulse firmware for Arduino Nano 33 BLE Sense開源韌體
edge impulse韌體燒進nano之後,如果想做回普通的arduino專案,是否需要燒回正常的韌體呢?
在Arduino IDE中開發,每次上傳都會蓋掉所有的韌體(不含Bootloader),所以不用擔心,隨時都可變回普通的專案。你可以隨寫一個Blink程式就可試出來。