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