Arduino 肩負著讓任何人均可輕松使用機器學習的使命。去年前,我們宣布TensorFlow Lite Micro 可以在 Arduino 庫管理器中使用。這樣便可使用一些現成的炫酷 ML 示例,例如語音識別、簡單的機器視覺,甚至是端到端手勢識別訓練教程。
在本文中,我們將帶您了解一個更為簡單的端到端教程:使用 TensorFlow Lite Micro 庫,以及Arduino Nano 33 BLE Sense的色度計和近接感測器傳感器來分類對象。為此,我們將在開發板上運行一個小型神經網絡。
運行 TensorFlow Lite Micro 的 Arduino BLE 33 Nano Sense
Tiny ML 的理念是在設備上用較少的資源(更小巧的外形、更少的能耗和更低成本的芯片)完成更多的工作。若與傳感器在同一塊開發板上運行推理,無論是對隱私還是電池續航時間都大有裨益,且意味著無需連網即可完成推理。
我們在電路板上安裝了近接感應器,這意味著我們可以即時讀取開發板前方對象的深度,而無需使用攝像頭,也無需通過機器視覺來確定某個對象是否為目標對象。
在本教程中,當對象足夠近時,我們可以對顏色進行采樣,此時的板載 RGB 傳感器可以看作是一個 1 像素的彩色攝像頭。雖然此方法存在一定限制,但卻讓我們只需使用少量資源便可快速分類對象。請注意,實際上您可以在設備端運行完整的基于 CNN 的視覺模型。這塊特殊的 Arduino 開發板配有一個板載色度計,因此我們認為以此方式開始演示不僅有趣,還極具指導意義。
基于 CNN 的視覺模型
http://cs231n.github.io/convolutional-networks/
我們將展示一個簡單但完整的端到端 TinyML 應用,無需深厚的 ML 或嵌入式背景就可以快速實現。此處所涉內容包括數據采集、訓練和分類器部署。我們介紹的是一個演示應用,您可連接一個外部攝像頭,在此基礎上進行改進和完善。我們希望您能了解我們提供的工具能夠實現什么,這里只是為您提供了一個起點。
您需要具備的條件
Arduino BLE 33 Nano Sense
一根 Micro USB 線
裝有 Web 瀏覽器的桌面設備/筆記本電腦
幾個具有不同顏色的對象
Arduino 開發板簡介
我們所使用的 Arduino BLE 33 Nano Sense 開發板配備 Arm Cortex-M4 微控制器,該控制器運行著 mbedOS,并具備多個板載傳感器,包括數字麥克風、加速度計、陀螺儀,以及溫度、濕度、壓力、光線、顏色和近接感應器。
雖然該微控制器按照云或移動標準來看非常微小,但其功能非常強大,足以運行 TensorFlow Lite Micro 模型并對來自板載傳感器的傳感器數據進行分類。
設置 Arduino Create 網頁編輯器
在本教程中,我們將使用 Arduino Create 網頁編輯器,一款基于云端的 Arduino 開發板編程工具。您需要注冊一個免費帳戶來使用,然后安裝一個插件允許瀏覽器通過 USB 線與 Arduino 開發板進行通信。
您可以按照入門指南的說明進行快速設置,這些說明將引導您完成以下操作:
下載并安裝插件
登錄或注冊免費帳號
入門指南
https://create.arduino.cc/getting-started/plugin?page=1
(請注意,您也可以使用 Arduino IDE 桌面應用,相關設置說明可以在之前的教程中找到)
拍攝訓練數據
現在,我們將采集用于在 TensorFlow 中訓練模型所需的數據。首先,選擇幾種顏色不同的對象。在這里,我們將使用水果,但您可以使用任何您喜歡的其他對象。
設置 Arduino,以便采集數據
接下來,我們將使用 Arduino Create 對 Arduino 開發板進行編程,讓其運行 object_color_capture.ino 應用,該應用可以采集附近對象的顏色數據樣本。開發板會通過 USB 線將顏色數據以 CSV 日志形式發送至您的桌面設備。
如需將 object_color_capture.ino 應用加載到 Arduino 開發板,請執行以下操作:
通過 USB 線將開發板連接到筆記本電腦或 PC
Arduino 開發板需連接 Micro USB 公口
點擊此鏈接,在 Arduino Create 中打開 object_color_capture.ino。
鏈接
https://create.arduino.cc/editor/TensorFlowExamples/ca761558-13ed-4190-baee-89ced06147c3/preview
您的瀏覽器將打開 Arduino Create 網頁應用(參見上方的 GIF 圖)
點按“OPEN IN WEB EDITOR”(在網頁編輯器中打開)
對于現有用戶,此按鈕將被標記為“ADD TO MY SKETCHBOOK”(添加至我的 Sketchbook)
點擊 Upload & Save(上傳并保存)
此操作需要等待一會兒才能完成
您會看到開發板上的黃燈在閃爍,說明其正在“接受編程”
打開串口 Monitor(監視器)
此操作會打開網頁應用左側的Monitor面板
現在,當對象在開發板頂部附近時,您將會在此處看到 CSV 格式的顏色數據
將每個對象的數據采集至 CSV 文件中
我們會針對每一個要分類的對象采集一些顏色數據。我們只針對每個類快速采集一個示例,這樣做顯然無法訓練通用模型,但我們仍然可以通過手頭的對象來快速驗證概念!
例如,我們正在對一個蘋果進行采樣:
使用頂部的白色小按鈕重置開發板。
除非您想對手指采樣,否則請確保其遠離傳感器!
Arduino Create 中的Monitor將提示“Serial Port Unavailable”(串行端口不可用),提示時間為一分鐘
然后,您應該會看到串口監視器的頂部出現 Red,Green,Blue 字樣
將開發板的正面朝向蘋果。
開發板只有在檢測到有對象靠近傳感器且照明充足(開燈或靠近窗戶)時,才會執行采樣
在對象表面來回移動開發板,采集顏色變化
您會看到 RGB 顏色值以逗號分隔的數據形式顯示在串口監視器中。
采集對象的樣本(持續幾秒鐘)
從Monitor復制此日志數據,并將其粘貼到文本編輯器中
提示:取消勾選底部 AUTOSCROLL(自動滾動)對應的復選框,即可停止文字移動
將文件另存為apple.csv
使用頂部的白色小按鈕重置開發板。
重復執行上述操作,以采集其他對象并保存日志信息(例如 banana.csv、orange.csv)。
注意:每個 .csv 文件的第一行均應顯示為:Red,Green,Blue
如果您未在頂部看到此內容,則只需將其復制并粘貼到代碼行的上方。
訓練模型
現在,我們將借助 colab,使用您在上一節中采集的數據來訓練 ML 模型。
首先,在 colab 中打開 Jupyter Notebook
按照 colab 中的說明操作
上傳您的 *.csv 文件
解析并準備數據
使用 Keras 訓練模型
輸出 TensorFlowLite Micro 模型
下載此模型以在 Arduino 上運行分類器
colab
https://colab.research.google.com/github/arduino/ArduinoTensorFlowLiteTutorials/blob/master/FruitToEmoji/FruitToEmoji.ipynb
完成上述步驟后,您應該已經下載了可以在 Arduino 開發板上運行對象分類的 model.h 文件!
Colab 會引導您將 .csv 文件拖放入文件窗口,結果如上圖所示
Colab 會對 Arduino 開發板采集的標準化顏色樣本進行繪制
將 TFLM 模型編寫到 Arduino 開發板
最后,我們會對上一階段訓練得到的模型進行編譯,然后使用 Arduino Create 將其上傳至 Arduino 開發板。
打開 Classify_Object_Color.ino
Classify_Object_Color.ino
https://create.arduino.cc/editor/TensorFlowExamples/8508c70f-5155-4e3b-b982-c5f6bd36ea5c/preview
您的瀏覽器將打開 Arduino Create 網頁應用:
點擊OPEN IN WEB EDITOR(在網頁編輯器中打開)按鈕
使用Import File to Sketch(將文件導入 Sketch)導入從 colab 下載的 model.h 文件:
導入從 colab 下載的 model.h 文件
model.h 標簽頁應如上所示
編譯并將應用上傳至 Arduino 開發板
此操作需要等待一會兒才能完成
完成后,您將在Monitor中看到以下消息:
將 Arduino 的 RGB 傳感器放在您訓練的對象旁邊
您將在Monitor中看到分類結果輸出:
Arduino Create Monitor 中的分類器輸出
您也可以編輯 object_color_classifier.ino sketch 以輸出顏文字來替代名字(我們在代碼注釋中保留了 unicode?。?,您可以關閉 Arduino Create 所在的網頁瀏覽器標簽頁,重置開發板并輸入 cat /cu/usb.modem[n],在 Mac OS X 或 Linux 終端中查看這些表情符號。
從 Arduino 串口輸出到 linux 終端并使用 ANSI 突出顯示的結果,以及 unicode 表情符號
結論
至此,我們了解了一個在 Arduino 上運行的機器學習的快速端到端的演示。這個框架也可用于對不同傳感器進行采樣,以及訓練更為復雜的模型。對于按顏色分類對象的任務,我們還可以在更多條件下采集更多示例樣本,以泛化該模型。
在未來的研究當中,我們還會探索如何運行設備端 CNN。與此同時,我們希望于您而言,這將會是一個有趣而精彩的項目。請盡情體驗 TinyML 帶來的樂趣吧!
責任編輯:lq
-
傳感器
+關注
關注
2551文章
51177瀏覽量
754286 -
神經網絡
+關注
關注
42文章
4772瀏覽量
100857 -
機器學習
+關注
關注
66文章
8422瀏覽量
132743
原文標題:社區分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識別水果
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論