天天看點

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

特邀博文 / Dominic Pajak 和 Sandeep Mistry,來自 Arduino 團隊

Arduino 肩負着讓任何人均可輕松使用機器學習的使命。去年前,我們宣布 TensorFlow Lite Micro 可以在 Arduino 庫管理器中使用。這樣便可使用一些現成的炫酷 ML 示例,例如語音識别、簡單的機器視覺,甚至是端到端手勢識别訓練教程。如需全面了解背景資訊,我們建議您閱讀這篇文章。

在本文中,我們将帶您了解一個更為簡單的端到端教程:使用 TensorFlow Lite Micro 庫,以及 Arduino Nano 33 BLE Sense 的色度計和近接感測器傳感器來分類對象。為此,我們将在開發闆上運作一個小型神經網絡。

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

運作 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序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 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 日志形式發送至您的桌面裝置。

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

如需将

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”(在網頁編輯器中打開)

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...
  • 對于現有使用者,此按鈕将被标記為“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 上運作分類器 
  • colabhttps://colab.research.google.com/github/arduino/ArduinoTensorFlowLiteTutorials/blob/master/FruitToEmoji/FruitToEmoji.ipynb

完成上述步驟後,您應該已經下載下傳了可以在 Arduino 開發闆上運作對象分類的

model.h

檔案!

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

Colab 會引導您将 .csv 檔案拖放入檔案視窗,結果如上圖所示

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

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

    檔案:
arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

導入從 colab 下載下傳的 model.h 檔案

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

model.h 标簽頁應如上所示

  • 編譯并将應用上傳至 Arduino 開發闆  
    • 此操作需要等待一會兒才能完成
    • 完成後,您将在 Monitor 中看到以下消息:
arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...
  • 将 Arduino 的 RGB 傳感器放在您訓練的對象旁邊
  • 您将在 Monitor 中看到分類結果輸出:
arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

Arduino Create Monitor 中的分類器輸出

您也可以編輯 object_color_classifier.ino sketch 以輸出顔文字來替代名字(我們在代碼注釋中保留了 unicode!),您可以關閉 Arduino Create 所在的網頁浏覽器标簽頁,重置開發闆并輸入

cat /cu/usb.modem[n]

,在 Mac OS X 或 Linux 終端中檢視這些表情符号。 

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

從 Arduino 序列槽輸出到 linux 終端并使用 ANSI 突出顯示的結果,以及 unicode 表情符号

結論

至此,我們了解了一個在 Arduino 上運作的機器學習的快速端到端的示範。這個架構也可用于對不同傳感器進行采樣,以及訓練更為複雜的模型。對于按顔色分類對象的任務,我們還可以在更多條件下采集更多示例樣本,以泛化該模型。

在未來的研究當中,我們還會探索如何運作裝置端 CNN。與此同時,我們希望于您而言,這将會是一個有趣而精彩的項目。請盡情體驗 TinyML 帶來的樂趣吧!

arduino序列槽螢幕顯示nan_社群分享 | 使用 Arduino 和 TensorFlow Lite Micro 快速識别水果...

點‘在看’讓我看到你的 AI ❤️~

繼續閱讀