Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作 (上):資料收集

一、前言

Pixel:Bit 教學進入到第五單元了!在這個單元我們要開始帶領大家一起學習如何在 Pixel:Bit 上使用 TinyML(微型機器學習,Tiny Machine Learning)技術,本次教學我們選用的是 Edge Impulse 這個平台來實現影像分類,實作內容分為(上)、(下)兩個部分,分別是「資料收集」與「模型訓練與使用」。

文章會先為大家介紹什麼是 TinyML?並說明人工智慧(AI)在影像辨識領域的主要應用;接著進入本次的主題使用 Edge Impulse 實作影像辨識的說明。

二、什麼是 TinyML ?

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

TinyML 為一個快速發展的機器學習技術和應用領域,包括硬體、算法和應用軟體。它可以快速高效率地進行即時計算,安全可靠又回應迅速,並且能夠以極低功耗(通常在 mW 範圍及以下)執行設備上的感測器數據分析,實現不同場域的應用,相當適合使用在電力有所限制的設備上。

三、人工智慧在影像辨識的應用

目前人工智慧(AI)在影像辨識領域主要的應用大致分為:「影像分類(image classification)」、「物件偵測(object detection)」、「語義分割(semantic segmentation)」。

  • 影像分類:顧名思義就是將影像進行類別篩選,透過深度學習方法辨識圖片屬於哪種分類類別,其主要重點在於一張圖像只包含一種類別,即使該影像內容可能有多個目標物。
  • 物件偵測:為一張影像內可以有一或多個目標物,目標物也可以是屬於不同類別,並且可得知此物件在影像中的位置。
  • 語義分割:為每個像素進行分類,以達到物件可以被精細切割出輪廓,但相同類形物件重疊時會被分在同一類像素而無法正確分割出物件的數量。

上述三種電腦視覺技術都需要仰賴足夠大的記憶體(RAM)以及較高的計算速度(CPU、GPU)裝置才能夠順利運行,以 Edge Impulse 中 Classification Modle MobileNetV1 48×48 0.25 為例,硬體裝置需要 75 KB RAM,308 KB Flash ROM,如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

因此在應用影像辨識時需要有一定等級的 MCU 才可順利運行,更進階的模型就需要更大的 RAM 以及運算速度更高的 CPU 或 GPU (ex: Raspberry Pi 4Jetson Nano)。

四、Edge Impulse 實作影像分類

Edge Impulse 平台提供一系列機器學習相關的服務功能(如下圖所示),從資料收集、資料預處理、特徵提取、模型建立、訓練、驗證,一直到最後的模型部屬,其目標是優化各種模型並運行在各種運算能力受限的裝置上(如 MCU)。

接下來我們將會使用 Pixel:Bit 搭配 Edge Impulse 實現影像分類,本次教學我們使用「剪刀、石頭、布」的手勢來作為分類內容示範,目標是能透過 Pixel:Bit Camera 正確辨識我們的手勢,我們將操作步驟分為「資料收集」、「上傳資料」、「特徵提取」、「模型訓練&驗證」、「模型測試」、「模型部屬」六個部分,現在我們就開始一步步實作吧!(本篇會先介紹前三個步驟,其他步驟會在下篇文章中說明)。

1. 資料收集

機器學習最麻煩也是最基礎的第一個步驟就是「收集資料」,我們需要讓機器從這些照片中學習我們想要它學習的內容,我們將會透過 Pixel:Bit 的 Camera 搭配一些工具來收集要訓練的影像資料,分別為「剪刀」、「石頭」、「布」和「背景」四類,每類各一千張照片,共計四千張(看到這邊是不是準備要打退堂鼓了呢?別擔心!我們將會透過一些小工具幫助我們快速收集資料)。

首先下載所有「PixelBit_Example」,並在 Arduino IDE 中將範例 PixelBit_CameraWebServer_ESP32.ino 第 25、26 行 ssid、password 改為自己所處環境中 Wi-Fi 的帳號密碼,接著即可燒錄至 Pixel:Bit;此範例會在 Pixel:Bit Camera 影像模擬 Web Server 觀看,接著我們會說明在 PC 上使用 Python 撰寫的小工具「captureEsp32cam.exe」,在與 Pixel:Bit 連上相同網域的情況下開啟並收集圖像資料。

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

開啟 Arduino IDE 序列埠視窗,會看到如下圖所示的畫面,若順利連上 Wi-Fi 將會顯示分配到的 IP 位置。

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

在電腦任意位置新增四個資料夾分別用來存放四種類別圖片資料,布、石頭、剪刀、背景(未知:unknow,其他的影像或手勢),如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

開啟「captureEsp32cam.exe」小工具,檔案位於 PixelBit_Example\03_EdgeImpulse\Tool\ 底下,輸入序列埠視窗中的 IP 位置,本次示範所使用的 IP 為 192.168.1.60,將要儲存圖片類別資料夾拖入此工具(即輸入資料夾絕對路徑),按下 Enter 後此工具會自動抓取 Pixel:Bit 即時影像,並開啟新視窗顯示,如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集
Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

按住視窗任意位置即可連續擷取影像存為照片(左上角黃色數字為目前擷取照片總數,目標為 1000 張)影像擷取的過程中,可隨意改變或移動手的方向,直到 1000 次才停止,過程中程式會自動增加旋轉及變色後的照片,如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

重複上述方式,直到所有類別(剪刀、石頭、布、背景)圖片資料都收集完畢即可。

2. 上傳資料

上傳資料前需要先新增一個 Edge Impulse 專案,輸入一個專案名稱,這裡使用「PixelBit」,如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

選擇圖片(Images)作為我們要處理的資料類型。

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

選擇影像分類(image classification)。

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

接著我們將上一個步驟中所收集到的四類圖片依序上傳至 Edge Impulse,首先點選左側 Data acquisition,再點選上傳圖示切換到上傳頁面,如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作(上):資料收集

接著點選「瀏覽」選取單一類別所有圖片,選擇自動分割資料到訓練、驗證、測試階段(Automatically split between training and testing),輸入此類別名稱(Enter label),例如 paper,開始上傳資料(Begin upload),如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作 (上):資料收集

3. 特徵提取

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作 (上):資料收集

為了讓這些原始資料(圖片)更具有意義,我們將對這些資料做特徵的提取,例如:假設您有一個變數,用來擷取事件發生的日期和時間,這個日期和時間不會再次發生,因此不適合用來預測目標。不過,如果將此變數轉換成一天中小時、星期幾和月份的特徵,這些變數就能用來了解事件是否傾向於特定的小時、星期幾或月份發生。這種特徵處理可形成供學習的更一般化資料點,顯著改善預測模型;這個步驟也包含在 Edge Impulse 中,我們可以直接使用它,相當方便。

點選「Create impulse」,設定圖片輸入大小為「48*48」,Resize mode 設為「Squash」,選擇圖像預處理功能,學習方式為 Transfer Learning(遷移學習),最後儲存,如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作 (上):資料收集

點選「Save parameters」。

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作 (上):資料收集

點選「Generate features」產生特徵。

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作 (上):資料收集

產生完畢可在右側看到每張圖片的在三維圖形中的分布點,如下圖所示:

Pixel:Bit 教學(五)-Edge Impulse 影像辨識實作 (上):資料收集

五、小結

以上就是我們這次 Pixel:Bit 教學(五)- Edge Impulse 影像辨識實作(上),我們學習到何謂 TinyML、瞭解 Edge Impulse 扮演什麼樣的角色?以及如何從 Pixel:Bit 收集圖像資料並轉交 Edge Impulse 處理,最後提取圖片資料特徵值。

單元(六)我們將會繼續教學「模型訓練&驗證」、「模型測試」、「模型部屬」三個部分,如果夥伴們已經完成這個單元中的「資料收集」、「上傳資料」、「特徵提取」,現在就趕快一起進入到第六單元一起學習吧!

若您有 Pixel:Bit 研習的需求,歡迎填寫表單,日後有相關課程資訊將在第一時間通知您!