1. 簡介
建構項目
在本程式碼研究室中,我們將學習如何使用 TensorFlow Lite for Microcontrollers,在 Arduino Nano 33 BLE 上執行深度學習模型。微控制器變成數位「魔杖」揮手並施展各種咒術。使用者移動魔杖時,這些複雜的多維度感應器資料會難以被人類破壞,且會做為模型的輸入內容傳遞。這些資料會輸出簡單的分類,在發生其中一種動作時通知我們。
微控制器的機器學習技術
機器學習技術可用於打造智慧工具,提供更便捷的生活,例如 Google 助理。不過,這類體驗需要大量的運算或資源,包括強大的雲端伺服器或桌上型電腦。不過,現在也能在微型低電的硬體 (例如微控制器) 上執行機器學習推論。
微控制器非常常見、成本低廉,需要的能源極少,而且十分可靠。這些元件屬於各式各樣的家庭裝置:電器、汽車和玩具。事實上,每年生產約 300 億部採用微控制器的裝置。
透過在極小的微控制器提供機器學習技術,我們得以為生活中數十億部 Google 裝置提供智慧功能,不必依賴昂貴的硬體或可靠的網路連線。想像一下,如果智慧家電可以依照您的日常作息調整,還有智慧型工業感測器可瞭解問題與正常操作之間的差異,而有魔法玩具可以幫助孩子以有趣且愉快的方式學習。
TensorFlow Lite for Microcontrollers (軟體)
TensorFlow 是 Google 的開放原始碼機器學習架構,用於訓練及執行模型。TensorFlow Lite 是一種軟體架構,此為 TensorFlow 的最佳化版本,專門用於在手機等低階裝置 (例如手機) 上執行 tensorflow 模型。
TensorFlow Lite For Microcontrollers 是一種軟體架構,是 TensorFlow 的最佳化版本,主要目標為在微弱的小型硬體 (例如微控制器) 上執行 Tensorflow 模型。它遵守這些內嵌環境中所需的限制,例如二進位檔大小較小、不需要作業系統支援,也不需要任何標準 C 或 C++ 程式庫,或是動態記憶體配置等。
Arduino Nano 33 BLE (硬體)
Arduino 是熱門的開放原始碼平台,可用於建構電子專案。其中包含:
- 本程式碼研究室中使用的實體可程式電路板 (通常是微控制器),例如 Arduino Nano 33 BLE。
- Arduino IDE (整合開發環境),用來撰寫電腦程式碼並上傳至實體板。
Arduino 33 BLE 是以微控制器為基礎的平台:一種使用單一電路板的小電腦。搭載處理器、記憶體和 I/O 硬體,可傳送及接收數位訊號至其他裝置。微控制器與電腦不同,因此不具有強大功能,且通常不執行作業系統。而是使用小型的處理器,而非大量記憶體,以及您直接在硬體上編寫的程式。但因為在設計上盡可能簡單,微控制器只會耗用極少的能源。
執行步驟
- 設定 Arduino 33 BLE 微控制器,並將其轉變成數位「魔杖」
- 設定 Arduino IDE 並安裝必要的程式庫
- 將程式部署至裝置
- 揮動魔杖,即可擺出各種咒語,瀏覽預測結果
軟硬體需求
- Linux、MacOS 或 Windows 筆記型電腦
- Arduino Nano BLE Sense 33 (不含頁首)
- micro USB 傳輸線 (如果你使用 USB-C 筆記型電腦,請改為取得 USB-C 對 Micro USB 傳輸線)
- (選用) 線條,約 12 英寸 (30 公分)
- (選用) 膠帶
2. 設定 Arduino Microcontroller
解開 Arduino 的包裝
從包裝盒中取出電池,從裝箱取出。是導電的,否則可能會造成問題!
插入筆電
- 將 MicroUSB 傳輸線插入晶片的插座。
- 將傳輸線的另一端插入筆電的 USB 插座。
- Arduino 上的左下方 LED 燈 (如下圖左上方) 會亮起。
熟悉工作流程
如上圖所示,Arduino 上的 TFLite 解譯器會定期對模型執行推論。模型會使用處理過的加速計資料做為輸入內容,並輸出預測結果,指出最有可能發生的手勢。此外,系統還會列印出你想要的輸出內容,正確的 LED 燈會亮起。
3. 設定 Arduino IDE
1. 下載 Arduino IDE
為了將程式部署至 Arduino Microcontroller,我們使用 Arduino IDE。
下載完成後,請按一下位於以下圖示的應用程式,以便安裝並開啟 Arduino IDE:
初始到達網頁的開啟方式如下:
2. 設定董事會管理員
- 在 Arduino 選單中選取「
Tools -> Board: "Arduino .." —> Boards Manager
」 - 搜尋
"Arduino Nano 33 BLE"
並安裝Arduino nRF528x Boards (Mbed OS)
。確保 Arduino 33 BLE 微控制器受到 Arduino IDE 支援。
- 在 Arduino 選單中選取「
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"
」
- 最後,請確認選取的主面板為「Arduino Nano 33 BLE」。位於 IDE 右下方。
3. 設定通訊埠
在 Arduino 選單中選取 Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE)
。畫面大致如下所示:
4. 檢查董事會的連接
在 Arduino 選單中選取 Tools -> Get Board Info
。畫面大致如下所示:
4. 安裝程式庫
1. TensorFlow Arduino 程式庫
這個程式庫包含所有 TensorFlow Lite for Microcontroller 範例,包括本程式碼研究室所需的魔杖原始碼。
- 在 Arduino 選單中選取「
Sketch -> Include Library -> Add .ZIP Library...
」 - 新增你下載的 TensorFlow Arduino 程式庫
.zip
。
2. LSM9DS1 Arduino 圖書館
這個程式庫可讓您讀取 Arduino Nano 33 BLE Sense 上 LSM9DS1 IMU 的加速計、磁力儀和陀螺儀值。
- 在 Arduino 選單中選取「
Sketch -> Include -> Manage Libraries...
」 - 搜尋及安裝「
"Arduino_LSM9DS1"
」。
5. 載入並建構範例
1. 載入範例
在 Arduino 選單中選取 File -> Examples -> Arduino_TensorFlowLite -> magic_wand
,以載入程式碼範例。
這樣就能載入魔杖原始碼。
2. 建構範例
按一下素描視窗中的 Upload
按鈕。
幾分鐘後,您應該會看到表示閃爍完成的紅色文字。上傳過程中,右側 LED 燈會閃爍,然後結束昏暗畫面。
6. 展示模式
魔杖目前可偵測 3 種手勢,如下所示:
- Wing:從左上角開始,仔細追蹤字母「W」設定 2 秒
- 響鈴:直立下,將指揮棒往順時針圓圈移動 1 秒。
- 斜坡:先將指揮棒朝上,讓 LED 燈朝向你。將指揮棒往左側往下移動,再往右移動一秒。
下圖示範了兩種手勢。第一個是斜坡,然後是 Wing (將此作為示範用的參考)。
如要執行示範,請按照以下說明操作:
- 插入 USB 後,從 Arduino 選單中選取
Tools -> Serial Monitor
。一開始會開啟一個沒有輸出的空白畫面。
- 移動 Arduino 微控制器,仔細追蹤上述各個形狀,看看序列監視器是否偵測到這個手勢。
- 從序列監視器的輸出內容中,我們發現魔術棒確實偵測到了所有形狀!您也會看到正確的 LED 燈亮起。
7. 後續步驟
恭喜,你已經透過手勢成功建構第一個「魔杖」體驗 Arduino 微控制器!
希望你喜歡這份簡短的簡介,瞭解如何使用 TensorFlow Lite for Microcontrollers 進行開發作業。在微控制器中,深度學習的構想是新點子,令人感到振奮,建議您去嘗試看看!
參考文件
- 訓練您自己的模型,您現在已有使用基本程式的經驗。
- 進一步瞭解 TensorFlow Lite for Microcontrollers ( 網站、GitHub)。
- 請嘗試其他範例,並嘗試在 Arduino 上執行 (如果支援的話)。
- 嘗試其他程式碼研究室:搭配 TensorFlow Lite 和 SparkFun Edge 使用微控制器的 AI
- 請參閱 O'Reilly 一書的《TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers》(TinyML:在 Arduino 和超低功率微控制器上運用機器學習的機器),這個單元會介紹機器學習,並逐步完成幾項有趣的專案。本程式碼研究室是以本書的第 11 章為基礎。
謝謝,祝一切順利!