XIAOXIAO今天小編給大家?guī)淼氖鞘サ貋喐绲腗aker Marcelo Rovai 使用 XIAO ESP32S3 Sensor 搭配Edge Impulse 實現(xiàn)的圖像分類的項目。
材料清單
Seeed XIAO ESP32S3 Sensor
軟件
Arduino IDE
Edge Impulse Studio
Seeed Studio 發(fā)布了一款新型經(jīng)濟(jì)實惠的開發(fā)板 XIAO ESP32S3 Sense,它集成了攝像頭傳感器、數(shù)字麥克風(fēng)和 SD 卡支持。該開發(fā)板結(jié)合了嵌入式 ML 計算能力和攝影功能,是啟動 TinyML(智能語音和視覺 AI)的絕佳工具。
XIAOESP32S3 Sense主要特點
MCU:采用ESP32S3 32位雙核Xtensa處理器芯片,運行頻率高達(dá)240 MHz,安裝多個開發(fā)端口,支持Arduino / MicroPython
組合設(shè)計:可拆卸 OV2640 攝像頭傳感器,分辨率為 1600*1200,兼容 OV5640 攝像頭傳感器,集成額外的數(shù)字麥克風(fēng)
電源設(shè)計:鋰電池充電管理能力提供四種功耗模式,深度睡眠模式功耗低至14μA超大內(nèi)存,更多可能:提供 8MB PSRAM 和 8MB FLASH,支持 SD 卡插槽用于外部 32GB FAT 內(nèi)存
射頻性能:支持2.4GHz Wi-Fi和BLE雙無線通信,連接U.FL天線支持100m+遠(yuǎn)程通信
緊湊設(shè)計:21 x 17.5mm,采用XIAO經(jīng)典外形,適合可穿戴設(shè)備等空間有限的項目
引腳圖:
欲了解更多詳細(xì)信息,請參閱 Seeed Studio WiKi 頁面
Step-1 在Arduino IDE上安裝XIAO ESP32S3板載文件
在 Arduino IDE 上,導(dǎo)航至“文件”>“首選項”,然后填寫 UR
接下來,打開板管理器。轉(zhuǎn)到“工具”>“開發(fā)板”>“開發(fā)板管理器”...并輸入 esp32。選擇并安裝最新的軟件包:
在工具上,選擇主板 (XIAO ESP32S3):
最后使用數(shù)據(jù)線連接開發(fā)板到電腦上,選擇ESP32S3的端口即可。
Step-2 測試開發(fā)板
XIAO ESP32S3 Sense 有一個內(nèi)置 LED,連接到 GPIO21。因此,您可以修改引腳編號后上傳運行 Blink 代碼。
#define LED_BUILT_IN 21 void setup() { pinMode(LED_BUILT_IN, OUTPUT); // Set the pin as output } // Remember that the pin work with inverted logic // LOW to Turn on and HIGH to turn off void loop() { digitalWrite(LED_BUILT_IN, LOW); //Turn on delay (1000); //Wait 1 sec digitalWrite(LED_BUILT_IN, HIGH); //Turn off delay (1000); //Wait 1 sec }
請注意,引腳以反轉(zhuǎn)邏輯工作:低電平打開,高電平關(guān)閉
連接Sense模塊(擴(kuò)展板)
購買時,擴(kuò)展板與主板是分離的,但安裝擴(kuò)展板非常簡單。需要將擴(kuò)展板上的連接器與XIAO ESP32S3上的B2B連接器對齊,用力按壓,聽到“咔”的一聲,安裝完成。
正如簡介中所述,擴(kuò)展板或設(shè)備的“傳感”部分具有 1600x1200 OV2640 攝像頭、SD 卡插槽和數(shù)字麥克風(fēng)。
麥克風(fēng)測試
讓我們從聲音檢測開始。轉(zhuǎn)到 GitHub(https://github.com/Mjrovai/XIAO-ESP32S3-Sense) 項目并下載草圖:XIAOEsp2s3_Mic_Test(https://github.com/Mjrovai/XIAO-ESP32S3-Sense/tree/main/Mic_Test/XiaoEsp32s3_Mic_Test) 并在 Arduino IDE 上運行它:
當(dāng)產(chǎn)生聲音時,您可以在串行繪圖儀上驗證它。
將錄制的聲音(.wav 音頻文件)保存到 microSD 卡。
使用板載 SD 卡讀卡器來保存 .wav 音頻文件。為此,我們需要啟用 XIAO PSRAM。
ESP32-S3 的 MCU 芯片上只有幾百 KB 的內(nèi)部 RAM。對于某些用途來說,這可能不夠,因此 ESP32-S3 可以使用與 SPI 閃存芯片并聯(lián)的高達(dá) 16 MB 的外部 PSRAM(偽靜態(tài) RAM)。外部存儲器包含在存儲器映射中,并且在有一定限制的情況下,可以與內(nèi)部數(shù)據(jù) RAM 相同的方式使用。
首先,將 SD 卡插入 XIAO,如下圖所示(SD 卡應(yīng)格式化為 FAT32)。
下載示例程序“ Wav_Record ”,可以在 GitHub 上找到它。
執(zhí)行代碼(Wav Record)需要使用ESP-32芯片的PSRAM功能,所以上傳前先打開:Tools>PSRAM:“OPI PSRAM”>OPI PSRAM
運行代碼Wav_Record.ino
該程序僅在用戶打開串口監(jiān)視器后執(zhí)行一次,錄制20秒并將錄制文件保存到microSD卡上,名稱為“arduino_rec.wav”。
當(dāng)串口監(jiān)視器每1秒輸出一次“ . ”程序執(zhí)行完畢,可以借助讀卡器播放錄制的聲音文件。
音質(zhì)非常棒!
代碼如何工作的解釋超出了本教程的范圍,但您可以在SeeedStudio的wiki 頁面上找到詳細(xì)的描述。
相機(jī)測試
要測試相機(jī),您應(yīng)該從 GitHub 下載文件夾 take_photos_command。該文件夾包含草圖 ( .ino ) 和兩個包含相機(jī)詳細(xì)信息的 .h 文件。
運行代碼:take_photos_command.ino。打開串行監(jiān)視器并發(fā)送命令“ capture ”來捕獲圖像并將其保存在SD卡上:
驗證串口監(jiān)視器上是否選擇了 [Both NL & CR]。
測試WiFi
XIAO ESP32S3 的優(yōu)勢之一是其 WiFi 功能。那么,讓我們測試它的無線電,掃描它周圍的 WiFi 網(wǎng)絡(luò)。您可以通過運行板上的代碼示例之一來完成此操作。
轉(zhuǎn)到 Arduino IDE 示例并查找 WiFI ==> WiFIScan
在串行監(jiān)視器上,您應(yīng)該看到設(shè)備范圍內(nèi)的 WiFi 網(wǎng)絡(luò)(SSID 和 RSSI)。這是我在家里得到的東西:
簡單的 WiFi 服務(wù)器(打開/關(guān)閉 LED)
讓我們測試一下設(shè)備作為 WiFi 服務(wù)器的能力。我們將在設(shè)備上托管一個簡單的頁面,用于發(fā)送打開和關(guān)閉 XIAO 內(nèi)置 LED 的命令。
和之前一樣,去 GitHub 下載包含 sketch 的文件夾:SimpleWiFiServer。
在運行草圖之前,您應(yīng)該輸入您的網(wǎng)絡(luò)憑據(jù):
const char* ssid = "Your credentials here"; const char* password = "Your credentials here";
您可以使用串行監(jiān)視器監(jiān)視服務(wù)器的工作情況。
獲取 IP 地址并在瀏覽器中輸入:
您將看到一個頁面,其中包含可以打開和關(guān)閉 XIAO 內(nèi)置 LED 的鏈接。
將視頻流傳輸至網(wǎng)絡(luò)
現(xiàn)在您知道可以從網(wǎng)頁向您的設(shè)備發(fā)送命令,讓我們執(zhí)行相反的操作。讓我們拍攝相機(jī)捕獲的圖像并將其流式傳輸?shù)骄W(wǎng)頁:
從 GitHub 下載包含代碼的文件夾:XIAO-ESP32S3-Streeming_Video.ino 。
請記住,該文件夾不僅包含 .ino 文件,還包含處理相機(jī)所需的幾個 .h 文件。
輸入您的憑據(jù)并運行草圖。在串行監(jiān)視器上,您可以找到要在瀏覽器中輸入的頁面地址:
在瀏覽器上打開頁面(等待幾秒鐘以開始流式傳輸)效果如圖。
當(dāng)您將相機(jī)定位為捕獲 ML 項目的數(shù)據(jù)集時(例如,使用代碼“take_photos_commands.ino”),簡化相機(jī)“看到”的內(nèi)容可能非常重要。
當(dāng)然,我們可以同時做這兩件事,在頁面上顯示相機(jī)所看到的內(nèi)容,并發(fā)送命令來捕獲圖像并將圖像保存在 SD 卡上。為此,您可以使用代碼 Camera_HTTP_Server_STA,該文件夾可以從 GitHub 下載。
該程序?qū)?zhí)行以下任務(wù):
將相機(jī)設(shè)置為 JPEG 輸出模式。
創(chuàng)建一個網(wǎng)頁(例如==> http://192.168.4.119//)。正確的地址將顯示在串行監(jiān)視器上。
如果 server.on ("/capture", HTTP_GET, serverCapture),則程序拍攝照片并將其發(fā)送到 Web。
可以使用[旋轉(zhuǎn)]按鈕旋轉(zhuǎn)網(wǎng)頁上的圖像
[CAPTURE]命令只會預(yù)覽網(wǎng)頁上的圖像,并在串行監(jiān)視器上顯示其大小
[SAVE]命令將圖像保存在SD卡上,同時在網(wǎng)絡(luò)上顯示圖像。
保存的圖像將遵循順序命名(image1.jpg、image2.jpg。
該程序可用于圖像分類項目的圖像數(shù)據(jù)集捕獲。
檢查代碼;將會更容易理解相機(jī)的工作原理。此代碼是基于 Rui Santos 的精彩教程:ESP32-CAM 在 Web 服務(wù)器中拍照并顯示而開發(fā)的,我邀請大家訪問該教程。
Step-3圖像數(shù)據(jù)收集
現(xiàn)在我們已經(jīng)運行了嵌入式攝像頭,是時候嘗試圖像分類了。出于比較目的,我將復(fù)制開發(fā)用于舊 ESP2-CAM 的相同圖像分類項目:
ESP32-CAM:TinyML 圖像分類 - 水果與蔬菜
我們項目的整體思路是訓(xùn)練模型并在 XIAO ESP32S3 Sense 上進(jìn)行推理。為了訓(xùn)練,我們應(yīng)該找到一些數(shù)據(jù)(大量的數(shù)據(jù)?。?。
但首先,我們需要一個目標(biāo)!我們想要分類什么?
對于TinyML,一組與嵌入式設(shè)備上的機(jī)器學(xué)習(xí)推理相關(guān)的技術(shù),由于限制(在這種情況下主要是內(nèi)存),我們應(yīng)該將分類限制為三到四個類別。我們將區(qū)分蘋果、香蕉和土豆(你可以嘗試其他類別)。
因此,讓我們找到一個包含這些類別的圖像的特定數(shù)據(jù)集。Kaggle 是一個好的開始:
該數(shù)據(jù)集包含以下食品的圖像:
水果 - 香蕉、蘋果、梨、葡萄、橙子、獼猴桃、西瓜、石榴、菠蘿、芒果。
蔬菜 - 黃瓜、胡蘿卜、辣椒、洋蔥、土豆、檸檬、番茄、蘿卜、甜菜根、卷心菜、生菜、菠菜、大豆、花椰菜、甜椒、辣椒、蘿卜、玉米、甜玉米、紅薯、辣椒粉、墨西哥胡椒、生姜、大蒜、豌豆、茄子。
每個類別分為訓(xùn)練(100 張圖像)、測試(10 張圖像)和驗證(10 張圖像)。
將數(shù)據(jù)集從 Kaggle 網(wǎng)站下載到您的計算機(jī)。
或者,您可也添加一些來自家庭廚房的香蕉、蘋果和土豆的新鮮照片。
Step-4 使用 Edge Impulse Studio訓(xùn)練模型
我們將使用 Edge Impulse Studio 來訓(xùn)練我們的模型。Edge Impulse 是邊緣設(shè)備上機(jī)器學(xué)習(xí)的領(lǐng)先開發(fā)平臺。
在 Edge Impulse 輸入您的帳戶憑據(jù)(或創(chuàng)建免費帳戶)。接下來,創(chuàng)建一個新項目:
數(shù)據(jù)采集
接下來,在 UPLOAD DATA 部分,從您的計算機(jī)上傳所選類別的文件:
您現(xiàn)在應(yīng)該擁有訓(xùn)練數(shù)據(jù)集,分為三類數(shù)據(jù):
您可以上傳額外的數(shù)據(jù)以進(jìn)行進(jìn)一步的模型測試或拆分訓(xùn)練數(shù)據(jù)。我將保留原樣,以使用盡可能多的數(shù)據(jù)。
模型設(shè)計
脈沖獲取原始數(shù)據(jù)(在本例中為圖像),提取特征(調(diào)整圖片大?。?,然后使用學(xué)習(xí)塊對新數(shù)據(jù)進(jìn)行分類。
如前所述,對圖像進(jìn)行分類是深度學(xué)習(xí)最常見的用途,但需要使用大量數(shù)據(jù)來完成此任務(wù)。每個類別我們有大約 90 張圖像。這個數(shù)量夠嗎?一點也不!我們需要數(shù)千張圖像來“教學(xué)或建?!眮韰^(qū)分蘋果和香蕉。但是,我們可以通過使用數(shù)千張圖像重新訓(xùn)練先前訓(xùn)練的模型來解決這個問題。我們將這種技術(shù)稱為“遷移學(xué)習(xí)”(TL)。
通
過 TL,我們可以在數(shù)據(jù)上微調(diào)預(yù)訓(xùn)練的圖像分類模型,即使對于相對較小的圖像數(shù)據(jù)集(我們的案例)也能表現(xiàn)良好。
因此,從原始圖像開始,我們將調(diào)整它們的大?。?6x96)像素,然后將它們輸入到我們的遷移學(xué)習(xí)塊中:
預(yù)處理(特征生成)
除了調(diào)整圖像大小之外,我們還應(yīng)該將它們更改為灰度以保持實際的 RGB 顏色深度。這樣,我們的每個數(shù)據(jù)樣本都將具有 9 維、216 個特征 (96x96x1)。保持 RGB 不變,這個尺寸會大三倍。使用灰度有助于減少推理所需的最終內(nèi)存量。
不要忘記“保存參數(shù)”。這將生成用于訓(xùn)練的特征。
模型訓(xùn)練(遷移學(xué)習(xí)和數(shù)據(jù)增強(qiáng))
2007 年,Google 推出了 MobileNetV1,這是一個通用計算機(jī)視覺神經(jīng)網(wǎng)絡(luò)系列,專為移動設(shè)備而設(shè)計,支持分類、檢測等功能。MobileNet 是小型、低延遲、低功耗模型,經(jīng)過參數(shù)化以滿足各種用例的資源限制。
盡管基本的 MobileNet 架構(gòu)已經(jīng)很小并且延遲很低,但很多時候,特定的用例或應(yīng)用程序可能需要模型更小、更快。
MobileNet 引入了一個稱為寬度乘數(shù)的簡單參數(shù) α(alpha)來構(gòu)建這些更小、計算成本更低的模型。寬度乘數(shù) α 的作用是在每一層均勻地細(xì)化網(wǎng)絡(luò)。
Edge Impulse Studio 提供 MobileNet V1(96x96 圖像)和 V2(96x96 和 160x160 圖像),具有多個不同的 α 值(從 0.05 到 1.0)。例如,使用 V2、160x160 圖像和 α=1.0 時,您將獲得最高的準(zhǔn)確度。當(dāng)然,這是一個權(quán)衡。精度越高,運行模型所需的內(nèi)存(大約 1.3M RAM 和 2.6M ROM)就越多,這意味著延遲也就越長。
MobileNet V1 和 α=0.10 的另一個極端(大約 53.2K RAM 和 101K ROM)將獲得更小的占用空間。
當(dāng)我們第一次發(fā)布這個在 ESP32-CAM 上運行的項目時,我們停留在可能性的較低水平,這保證了小延遲的推理,但不能保證高精度。對于第一遍,我們將保留此模型設(shè)計(MobileNet V1 和 α=0.10)。
深度學(xué)習(xí)使用的另一個重要技術(shù)是數(shù)據(jù)增強(qiáng)。數(shù)據(jù)增強(qiáng)是一種可以幫助提高機(jī)器學(xué)習(xí)模型的準(zhǔn)確性、創(chuàng)建額外的人工數(shù)據(jù)的方法。
在下面,您可以看到 Edge Impulse 如何對您的數(shù)據(jù)實施數(shù)據(jù)增強(qiáng)策略:
# Implements the data augmentation policy def augment_image(image, label): # Flips the image randomly image = tf.image.random_flip_left_right(image) # Increase the image size, then randomly crop it down to # the original dimensions resize_factor = random.uniform(1, 1.2) new_height = math.floor(resize_factor * INPUT_SHAPE[0]) new_width = math.floor(resize_factor * INPUT_SHAPE[1]) image = tf.image.resize_with_crop_or_pad(image, new_height, new_width) image = tf.image.random_crop(image, size=INPUT_SHAPE) # Vary the brightness of the image image = tf.image.random_brightness(image, max_delta=0.2) return image, label
在訓(xùn)練期間接觸這些變化可以幫助防止模型通過“記住”訓(xùn)練數(shù)據(jù)中的表面線索來走捷徑,這意味著它可以更好地反映數(shù)據(jù)集中深層的底層模式。
我們模型的最后一層將有 16 個神經(jīng)元,并具有 10% 的 dropout,以防止過度擬合。這是訓(xùn)練輸出:
結(jié)果并不好。該模型達(dá)到了約 77% 的準(zhǔn)確率,但預(yù)計在推理過程中使用的 RAM 量相對較?。s 60 KB),這非常好。
模型部署
訓(xùn)練后的模型將作為 .zip Arduino 庫部署:
打開 Arduino IDE,然后在 Sketch 下,轉(zhuǎn)到 Include Library 和 add.ZIP Library。選擇您從 Edge Impulse Studio 下載的文件,就這樣!
在 Arduino IDE 的示例選項卡下,您應(yīng)該在項目名稱下找到草圖代碼。
打開靜態(tài)緩沖區(qū)示例:
您可以看到第一行代碼正是對一個庫的調(diào)用,其中包含在您的設(shè)備上運行推理所需的所有必要內(nèi)容。
#include
當(dāng)然,這是一個通用代碼(“模板”),僅獲取一個原始數(shù)據(jù)樣本(存儲在變量:features = {} 上)并運行分類器,進(jìn)行推理。結(jié)果顯示在串行監(jiān)視器上。
我們應(yīng)該從相機(jī)獲取樣本(圖像)并對其進(jìn)行預(yù)處理(調(diào)整大小至 96x96、轉(zhuǎn)換為灰度并展平)。這將是我們模型的輸入張量。
輸出張量將是一個具有三個值(標(biāo)簽)的向量,顯示每一類的概率。
返回到您的項目(選項卡圖像),復(fù)制原始數(shù)據(jù)示例之一:
將9216個特征復(fù)制到剪貼板。這是輸入張量(96x96x1 的扁平圖像),在本例中為香蕉。通過 features[] = {0xb2d77b, 0xb5d687, 0xd8e8c0, 0xeaecba, 0xc2cf67, ...}上的此輸入張量
注意:Edge Impulse 在其 SDK 中包含了 ESP NN 庫,其中包含針對各種 Espressif 芯片優(yōu)化的 NN(神經(jīng)網(wǎng)絡(luò))功能。在本教程發(fā)布(5 月 2 日)之前,ESP NN 無法與 ESP32S3(Arduino IDE)配合使用。
如果編譯代碼并出現(xiàn)錯誤,則有必要修復(fù)此問題。EI 建議關(guān)閉 ESP NN 加速。為此,請在導(dǎo)出的 Arduino 庫文件夾中找到 ei_classifier_config.h :/scr/edge-impulse-sdk/classifier/:
找到#define EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN 1 行,并將其從 1 更改為 0:
現(xiàn)在,在運行推理時,您應(yīng)該獲得“香蕉”的最高分。
好消息!我們的設(shè)備進(jìn)行推理,發(fā)現(xiàn)輸入圖像是香蕉。另請注意,推理時間約為 317 毫秒,如果您嘗試對視頻中的圖像進(jìn)行分類,則最大幀率為 3 fps。
這是比 ESP32 CAM(525 毫秒延遲)更好的結(jié)果。
現(xiàn)在,我們應(yīng)該結(jié)合相機(jī)并對圖像進(jìn)行實時分類。
轉(zhuǎn)到 Arduino IDE 示例并從您的項目下載草圖 esp32_camera:
應(yīng)該通過與我們的模型相關(guān)的數(shù)據(jù)更改第 32 至 75 行,這些行定義了相機(jī)模型和引腳:
修改后的草圖可以從 GitHub 下載:xiao_esp32s3_camera。
請注意,您可以選擇將引腳保留為 a.h 文件,就像我們在前面部分中所做的那樣。
將代碼上傳到您的 XIAO ESP32S3 Sense,您就可以開始對水果和蔬菜進(jìn)行分類了!您可以在串行監(jiān)視器上檢查結(jié)果。
測試模型(推理)
用相機(jī)拍照,分類結(jié)果將顯示在串行監(jiān)視器上:
其他測試:
結(jié)論
XIAO ESP32S3 Sense是一種非常靈活,高性價比且易于編程的設(shè)備。該項目證明了TinyML的潛力。記憶不是問題;該設(shè)備可以處理許多后處理任務(wù),包括通信。但是您應(yīng)該考慮到高延遲(沒有ESP NN加速器)將限制一些應(yīng)用程序,盡管XIAO比ESP32-CAM快50%。在我的GitHub存儲庫中,您可以找到代碼的最新版本:XIAO-ESP32S3-Sense。一如既往,我希望這個項目可以幫助其他人在人工智能、電子和物聯(lián)網(wǎng)的激動人心的世界中找到自己的路!
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2550文章
51035瀏覽量
753071 -
處理器
+關(guān)注
關(guān)注
68文章
19259瀏覽量
229651 -
攝像頭
+關(guān)注
關(guān)注
59文章
4836瀏覽量
95599 -
圖像分類
+關(guān)注
關(guān)注
0文章
90瀏覽量
11914 -
esp32s3
+關(guān)注
關(guān)注
0文章
6瀏覽量
492
原文標(biāo)題:創(chuàng)客項目秀|基于XIAO 的圖像分類處理項目
文章出處:【微信號:ChaiHuoMakerSpace,微信公眾號:柴火創(chuàng)客空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論