這篇文章將會接續上一篇「Edge Impulse 影像辨識實作:資料收集(Part 1)」。
教學原文參考:Edge Impulse 影像辨識實作 (上):資料收集
Edge Impulse 平台提供一系列機器學習相關的服務功能(如下圖所示),從資料收集、資料預處理、特徵提取、模型建立、訓練、驗證,一直到最後的模型部屬,其目標是優化各種模型並運行在各種運算能力受限的裝置上(如 MCU)。
接下來我們將會使用 Pixel:Bit 搭配 Edge Impulse 實現影像分類,本次教學我們使用「剪刀、石頭、布」的手勢來作為分類內容示範,目標是能透過 Pixel:Bit Camera 正確辨識我們的手勢,我們將操作步驟分為「資料收集」、「上傳資料」、「特徵提取」、「模型訓練&驗證」、「模型測試」、「模型部屬」六個部分,現在我們就開始一步步實作吧!(本篇會先介紹前三個步驟,其他步驟會在下篇文章中說明)。
機器學習最麻煩也是最基礎的第一個步驟就是「收集資料」,我們需要讓機器從這些照片中學習我們想要它學習的內容,我們將會透過 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 連上相同網域的情況下開啟並收集圖像資料。
開啟 Arduino IDE 序列埠視窗,會看到如下圖所示的畫面,若順利連上 Wi-Fi 將會顯示分配到的 IP 位置。
在電腦任意位置新增四個資料夾分別用來存放四種類別圖片資料,布、石頭、剪刀、背景(未知:unknow,其他的影像或手勢),如下圖所示:
開啟「captureEsp32cam.exe」小工具,檔案位於
PixelBit_Example\03_EdgeImpulse\Tool\ 底下,輸入序列埠視窗中的 IP 位置,本次示範所使用的 IP 為 192.168.1.60,將要儲存圖片類別資料夾拖入此工具(即輸入資料夾絕對路徑),按下 Enter 後此工具會自動抓取 Pixel:Bit 即時影像,並開啟新視窗顯示,如下圖所示:
按住視窗任意位置即可連續擷取影像存為照片(左上角黃色數字為目前擷取照片總數,目標為 1000 張)影像擷取的過程中,可隨意改變或移動手的方向,直到 1000 次才停止,過程中程式會自動增加旋轉及變色後的照片,如下圖所示:
重複上述方式,直到所有類別(剪刀、石頭、布、背景)圖片資料都收集完畢即可。
上傳資料前需要先新增一個 Edge Impulse 專案,輸入一個專案名稱,這裡使用「PixelBit」,如下圖所示:
選擇圖片(Images)作為我們要處理的資料類型。
選擇影像分類(image classification)。
接著我們將上一個步驟中所收集到的四類圖片依序上傳至 Edge Impulse,首先點選左側 Data acquisition,再點選上傳圖示切換到上傳頁面,如下圖所示:
接著點選「瀏覽」選取單一類別所有圖片,選擇自動分割資料到訓練、驗證、測試階段(Automatically split between training and testing),輸入此類別名稱(Enter label),例如 paper,開始上傳資料(Begin upload),如下圖所示:
為了讓這些原始資料(圖片)更具有意義,我們將對這些資料做特徵的提取,例如:假設您有一個變數,用來擷取事件發生的日期和時間,這個日期和時間不會再次發生,因此不適合用來預測目標。不過,如果將此變數轉換成一天中小時、星期幾和月份的特徵,這些變數就能用來了解事件是否傾向於特定的小時、星期幾或月份發生。這種特徵處理可形成供學習的更一般化資料點,顯著改善預測模型;這個步驟也包含在
Edge Impulse 中,我們可以直接使用它,相當方便。
點選「Create impulse」,設定圖片輸入大小為「48*48」,Resize mode 設為「Squash」,選擇圖像預處理功能,學習方式為 Transfer Learning(遷移學習),最後儲存,如下圖所示:
點選「Save parameters」。
點選「Generate features」產生特徵。
產生完畢可在右側看到每張圖片的在三維圖形中的分布點,如下圖所示:
以上就是我們這次 Edge Impulse 影像辨識實作(Part 1~2):資料收集,我們學習到何謂 TinyML、瞭解 Edge Impulse 扮演什麼樣的角色?以及如何從 Pixel:Bit 收集圖像資料並轉交 Edge Impulse 處理,最後提取圖片資料特徵值。
下一篇我們將會繼續學習「模型訓練 & 驗證」、「模型測試」、「模型部屬」三個部分,如果夥伴們已經完成這個單元中的「資料收集」、「上傳資料」、「特徵提取」,現在就趕快一起進入下一單元一起學習吧!