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