電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>TinyML變得簡單:圖像分類

TinyML變得簡單:圖像分類

2023-07-13 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

我們越來越多地面臨著人工智能 (AI) 革命,正如 Gartner 所說,Edge AI具有非常高的影響潛力,而且現(xiàn)在是這樣

poYBAGSBLJOADVU0AABvBP-AhZE651.png
?

在新興技術(shù)的“靶心”中,雷達(dá)就是Edge Computer Vision ,而當(dāng)我們談到Machine Learning (ML)應(yīng)用于視覺時(shí),首先想到的就是Image Classification ,一種ML的“Hello World” “!

Seeed Studio 發(fā)布了一款經(jīng)濟(jì)實(shí)惠的新型開發(fā)板XIAO ESP32S3 Sense ,它集成了攝像頭傳感器、數(shù)字麥克風(fēng)和 SD 卡支持。該開發(fā)板結(jié)合了嵌入式 ML 計(jì)算能力和攝影能力,是開始使用 TinyML(智能語音和視覺 AI)的絕佳工具。

XIAO ESP32S3 Sense 主要特點(diǎn)

  • 強(qiáng)大的 MCU:集成 ESP32S3 32 位雙核 Xtensa 處理器芯片,運(yùn)行頻率高達(dá) 240 MHz,安裝多個(gè)開發(fā)端口,支持 Arduino / MicroPython
  • 高級功能:1600*1200分辨率的可拆卸OV2640攝像頭傳感器,兼容OV5640攝像頭傳感器,集成一個(gè)額外的數(shù)字麥克風(fēng)
  • 精心設(shè)計(jì)的電源設(shè)計(jì)鋰電池充電管理能力提供四種功耗模式,允許深度睡眠模式,功耗低至14μA
  • 大內(nèi)存,更多可能性:提供 8MB PSRAM 和 8MB 閃存,支持 SD 卡插槽,用于外部 32GB FAT 內(nèi)存
  • 出色的射頻性能:支持2.4GHz Wi-Fi和BLE雙無線通信,連接U.FL天線支持100m+遠(yuǎn)程通信
  • 拇指大小的緊湊型設(shè)計(jì):21 x 17.5mm,采用 XIAO 的經(jīng)典外形,適用于可穿戴設(shè)備等空間有限的項(xiàng)目
poYBAGSBLJqAUozMAAB9gvSH4v0201.png
?

以下是通用板引出線:

poYBAGSBLKCAdLrGAAX02CeSVq4237.png
?
更多詳情請參考Seeed Studio WiKi頁面:https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/

在 Arduino IDE 上安裝 XIAO ESP32S3 Sense

在 Arduino IDE 上,導(dǎo)航到File > Preferences ,然后填寫 URL:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

在現(xiàn)場 ==>其他 Boards Manager URL

pYYBAGSBLKKAMcX9AABwkgicXvY642.png
?

接下來,打開板管理器。轉(zhuǎn)到Tools > Board > Boards Manager...并輸入esp32。選擇并安裝最新的軟件包:

poYBAGSBLKWAdvBRAABsVbfEHcc178.png
?

Tools上,選擇 Board ( XIAO ESP32S3 ):

poYBAGSBLKmALQUpAAGoq9WTEX4281.png
?

最后但同樣重要的是,選擇連接 ESP32S3 的端口。

這就對了!設(shè)備應(yīng)該沒問題。讓我們做一些測試。

使用 BLINK 測試電路板

XIAO ESP32S3 Sense 有一個(gè)連接到 GPIO21 的內(nèi)置 LED因此,您可以按原樣運(yùn)行閃爍草圖(使用LED_BUILTINArduino 常量)或相應(yīng)地更改閃爍草圖:

#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
}
請注意,引腳與反邏輯一起工作:LOW 開啟,HIGH 關(guān)閉
pYYBAGSBLLaAaJY5ABRvKOc_ieU717.png
?

連接Sense模塊(擴(kuò)展板)

購買時(shí),擴(kuò)展板與主板分離,但安裝擴(kuò)展板非常簡單。需要將擴(kuò)展??板上的連接器對準(zhǔn)XIAO ESP32S3上的B2B連接器,用力按壓,聽到“咔噠”一聲即表示安裝完成。

?

如介紹中所述,擴(kuò)展板或設(shè)備的“感知”部分具有一個(gè) 1600x1200 OV2640 攝像頭、一個(gè) SD 卡插槽和一個(gè)數(shù)字麥克風(fēng)。

麥克風(fēng)測試

讓我們從聲音檢測開始。轉(zhuǎn)到GitHub 項(xiàng)目下載草圖:XIAOEsp2s3_Mic_Test并在 Arduino IDE 上運(yùn)行它:

pYYBAGSBLLqANJTgAALrq0CFtik044.png
?

發(fā)出聲音時(shí),您可以在串行繪圖儀上進(jìn)行驗(yàn)證。

將錄制的聲音(.wav 音頻文件)保存到 microSD 卡。

現(xiàn)在讓我們使用板載 SD 卡讀卡器來保存 .wav 音頻文件。為此,我們需要修復(fù) XIAO PSRAM。

ESP32-S3 在 MCU 芯片上只有幾百 KB 的內(nèi)部 RAM。對于某些用途,ESP32-S3 可以使用與 SPI 閃存芯片并聯(lián)的最多 16 MB 的外部 PSRAM(偽靜態(tài) RAM)可能不夠。外部存儲器包含在存儲器映射中,并且在某些限制下,可以像內(nèi)部數(shù)據(jù) RAM 一樣使用。

首先,如下圖所示將 SD 卡插入 XIAO(SD 卡應(yīng)格式化為FAT32 )。

poYBAGSBLL2AVkT0AAEVrr5IjC8657.png
?
  • 下載草圖Wav_Record ,您可以在 GitHub 上找到它。
  • 執(zhí)行代碼(Wav Record)需要用到ESP-32芯片的PSRAM功能,所以上傳前先開啟:Tools>PSRAM: "OPI PSRAM">OPI PSRAM
pYYBAGSBLL-AYo-BAADSZsU93Oo377.png
?
  • 運(yùn)行代碼Wav_Record.ino
  • 該程序僅在用戶打開串口監(jiān)視器后執(zhí)行一次,錄音 20 秒并將錄音文件保存到 microSD 卡中,名為“arduino_rec.wav”。
  • 當(dāng)。。。的時(shí)候 ”。” 串口監(jiān)視器每1秒輸出一次,程序執(zhí)行完畢,可以借助讀卡器播放錄制的聲音文件。
poYBAGSBLMKAIYCtAACCILKpQG0552.png
?

音質(zhì)非常好!

代碼工作原理的解釋超出了本教程的范圍,但您可以在wiki頁面上找到出色的描述。

測試相機(jī)

要測試相機(jī),您應(yīng)該從 GitHub 下載文件夾take_photos_command 。該文件夾包含草圖 ( .ino) 和兩個(gè).h 包含相機(jī)詳細(xì)信息的文件。

  • 運(yùn)行代碼:take_photos_command.ino。打開串行監(jiān)視器并發(fā)送命令“ capture”以捕獲圖像并將其保存在 SD 卡上:
確認(rèn)在串行監(jiān)視器上選擇了 [Both NL & CR]。
pYYBAGSBLMmAK0FIAAvCC98uW30523.png
?

這是拍攝照片的示例:

poYBAGSBLMyAMflHAAIG3cAYBbA068.png
?

測試無線網(wǎng)絡(luò)

XIAO ESP32S3 的差異化因素之一是其 WiFi 功能。所以,讓我們測試它的無線電,掃描它周圍的 wifi 網(wǎng)絡(luò)。您可以通過運(yùn)行板上的代碼示例之一來完成。

轉(zhuǎn)到 Arduino IDE 示例并查找WiFI ==> WiFIScan

在串行監(jiān)視器上,您應(yīng)該會看到設(shè)備范圍內(nèi)的 wifi 網(wǎng)絡(luò)(SSID 和 RSSI)。這是我在家里得到的:

poYBAGSBLM-ASSscAACe4m8W0QE127.png
?

簡單的 WiFi 服務(wù)器(打開/關(guān)閉 LED)

讓我們測試設(shè)備充當(dāng) WiFi 服務(wù)器的能力。我們將在設(shè)備上托管一個(gè)簡單的頁面,該頁面發(fā)送命令以打開和關(guān)閉 XIAO 內(nèi)置 LED。

和以前一樣,去 GitHub 下載帶有 sketch 的文件夾:SimpleWiFiServer 。

在運(yùn)行草圖之前,您應(yīng)該輸入您的網(wǎng)絡(luò)憑據(jù):

const char* ssid     = "Your credentials here";
const char* password = "Your credentials here";

您可以使用串行監(jiān)視器監(jiān)視您的服務(wù)器如何工作。

pYYBAGSBLNKAVi6SAAEq8TBr5rI652.png
?

獲取 IP 地址并將其輸入瀏覽器:

pYYBAGSBLNSAGEA7AABkZ4N3MXg352.png
?

您將看到一個(gè)頁面,其中包含可以打開和關(guān)閉 XIAO 內(nèi)置 LED 的鏈接。讓我們將相機(jī)拍攝的圖像傳輸?shù)骄W(wǎng)頁:

從 GitHub 下載包含代碼的文件夾:XIAO-ESP32S3-Streeming_Video.ino。

請記住,該文件夾不僅包含 .ino 文件,還包含一些處理相機(jī)所必需的 .h 文件。

輸入您的憑據(jù)并運(yùn)行草圖。在串行監(jiān)視器上,您可以找到要在瀏覽器中輸入的頁面地址:

poYBAGSBLNeAT5eNAAB6QwB4it0896.png
?

在瀏覽器上打開頁面(等待幾秒鐘以開始流式傳輸)。就是這樣。

poYBAGSBLNyALScfAAOaarnJ1eM986.png
?

當(dāng)您定位相機(jī)以捕獲 ML 項(xiàng)目的數(shù)據(jù)集(例如,使用代碼“take_phots_commands.ino”)時(shí),簡化相機(jī)“看到”的內(nèi)容可能很重要。

當(dāng)然,我們可以同時(shí)做這兩件事,在頁面上顯示相機(jī)所看到的內(nèi)容,并發(fā)送一個(gè)命令來捕獲圖像并將其保存在 SD 卡上。為此,您可以使用代碼 Camera_HTTP_Server_STA,該文件夾可以從 GitHub 下載。

pYYBAGSBLN-AGOImAAIwiNeiqxU890.png
?

該程序?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。
  • 可以使用 [ROTATE] 按鈕在網(wǎng)頁上旋轉(zhuǎn)圖像
  • [CAPTURE]命令只會在網(wǎng)頁上預(yù)覽圖片,在串口監(jiān)視器上顯示圖片大小
  • [SAVE] 命令會將圖像保存在 SD 卡上,同時(shí)在網(wǎng)絡(luò)上顯示該圖像。
  • 保存的圖像將遵循順序命名(image1.jpg,image2.jpg。
poYBAGSBLOOAGYCgAACglbC_lkw985.png
?
該程序可用于圖像分類項(xiàng)目的圖像數(shù)據(jù)集捕獲。

檢查代碼;這將更容易理解相機(jī)的工作原理。此代碼是基于偉大的 Rui Santos 教程:ESP32-CAM 在 Web 服務(wù)器中拍照和顯示而開發(fā)的,我邀請大家訪問。

水果與蔬菜 - TinyML 圖像分類項(xiàng)目

現(xiàn)在我們有一個(gè)嵌入式相機(jī)在運(yùn)行,是時(shí)候嘗試圖像分類了。為了比較動機(jī),我將復(fù)制為與舊 ESP2-CAM 一起使用而開發(fā)的相同圖像分類項(xiàng)目:

ESP32-CAM:TinyML 圖像分類——水果與蔬菜

我們項(xiàng)目的整體思路是訓(xùn)練模型并在 XIAO ESP32S3 Sense 上進(jìn)行推理。對于訓(xùn)練,我們應(yīng)該找到一些數(shù)據(jù)(實(shí)際上是大量數(shù)據(jù)!)。

但首先,我們需要一個(gè)目標(biāo)!我們要分類什么?

使用TinyML,一組與嵌入式設(shè)備上的機(jī)器學(xué)習(xí)推理相關(guān)的技術(shù),由于限制(在這種情況下主要是內(nèi)存),我們應(yīng)該將分類限制為三或四類。我們將區(qū)分蘋果香蕉土豆(您可以嘗試其他類別)。

因此,讓我們找到一個(gè)包含這些類別圖像的特定數(shù)據(jù)集。Kaggle 是一個(gè)好的開始:

https://www.kaggle.com/kritikseth/fruit-and-vegetable-image-recognition

該數(shù)據(jù)集包含以下食品的圖像:

  • 水果-香蕉、蘋果、梨、葡萄、橙子、奇異果、西瓜、石榴、菠蘿、芒果。
  • 蔬菜- 黃瓜、胡蘿卜、辣椒、洋蔥、馬鈴薯、檸檬、番茄、蘿卜、甜菜根、卷心菜、生菜、菠菜、大豆、花椰菜、燈籠椒、辣椒、蘿卜、玉米、甜玉米、紅薯、紅辣椒、墨西哥辣椒、生姜、 大蒜、 豌豆、 茄子。

每個(gè)類別分為訓(xùn)練(100 張圖像)、測試(10 張圖像)和驗(yàn)證(10 張圖像)。

  • 從 Kaggle 網(wǎng)站將數(shù)據(jù)集下載到您的計(jì)算機(jī)。
或者,您可以添加一些來自家庭廚房的香蕉、蘋果和土豆的新鮮照片,例如,使用上一節(jié)中討論的草圖。

使用 Edge Impulse Studio 訓(xùn)練模型

我們將使用 Edge Impulse Studio 來訓(xùn)練我們的模型。Edge Impulse是領(lǐng)先的邊緣設(shè)備機(jī)器學(xué)習(xí)開發(fā)平臺。

在 Edge Impulse 輸入您的帳戶憑據(jù)(或創(chuàng)建一個(gè)免費(fèi)帳戶)。接下來,創(chuàng)建一個(gè)新項(xiàng)目:

pYYBAGSBLO2ALskMAAGpM2bH1MY825.png
?

數(shù)據(jù)采集

接下來,在該UPLOAD DATA部分,從您的計(jì)算機(jī)上傳所選類別的文件:

poYBAGSBLPGAJo4gAACbEYxmjGU348.png
?

您現(xiàn)在應(yīng)該擁有訓(xùn)練數(shù)據(jù)集,分為三類數(shù)據(jù):

pYYBAGSBLPSAZ-aVAADKzDlnTBc806.png
?
您可以上傳額外的數(shù)據(jù)以進(jìn)行進(jìn)一步的模型測試或拆分訓(xùn)練數(shù)據(jù)。我將保留原樣,盡可能使用大部分?jǐn)?shù)據(jù)。

沖量設(shè)計(jì)

脈沖獲取原始數(shù)據(jù)(在本例中為圖像),提取特征(調(diào)整圖片大小),然后使用學(xué)習(xí)塊對新數(shù)據(jù)進(jìn)行分類。

如前所述,對圖像進(jìn)行分類是深度學(xué)習(xí)最常見的用途,但要完成這項(xiàng)任務(wù)需要大量數(shù)據(jù)。每個(gè)類別我們有大約 90 張圖像。這個(gè)數(shù)量夠嗎?一點(diǎn)也不!我們將需要數(shù)千張圖像來“教授或建?!币詤^(qū)分蘋果和香蕉。但是,我們可以通過使用數(shù)千張圖像重新訓(xùn)練之前訓(xùn)練過的模型來解決這個(gè)問題。我們稱這種技術(shù)為“遷移學(xué)習(xí)”(TL)。

pYYBAGSBLPeAdufiAAEJZ5trvIM494.png
?

借助 TL,我們可以根據(jù)我們的數(shù)據(jù)微調(diào)預(yù)訓(xùn)練圖像分類模型,即使在相對較小的圖像數(shù)據(jù)集(我們的案例)中也能表現(xiàn)良好。

因此,從原始圖像開始,我們將調(diào)整它們的大小 (96x96) 像素,然后將它們提供給我們的遷移學(xué)習(xí)塊:

poYBAGSBLPuATWY5AACzZOw8mQI732.png
?

預(yù)處理(特征生成)

除了調(diào)整圖像大小,我們應(yīng)該將它們改為灰度以保持實(shí)際的 RGB 顏色深度。這樣做,我們的每個(gè)數(shù)據(jù)樣本都將具有 9 維、216 個(gè)特征 (96x96x1)。保持 RGB,這個(gè)維度會大三倍。使用灰度有助于減少推理所需的最終內(nèi)存量。

poYBAGSBLP6AQdKLAAChy7GPqkg301.png
?

不要忘記“保存參數(shù)”。這將生成要在訓(xùn)練中使用的特征。

培訓(xùn)(遷移學(xué)習(xí)和數(shù)據(jù)增強(qiáng))

2007 年,谷歌推出了MobileNetV1,這是一個(gè)通用計(jì)算機(jī)視覺神經(jīng)網(wǎng)絡(luò)系列,專為移動設(shè)備而設(shè)計(jì),支持分類、檢測等。MobileNet 是小型、低延遲、低功耗模型,經(jīng)過參數(shù)化以滿足各種用例的資源限制。

盡管基本 MobileNet 架構(gòu)已經(jīng)很小并且延遲很低,但很多時(shí)候,特定的用例或應(yīng)用程序可能需要模型更小和更快。MobileNet 引入了一個(gè)稱為寬度乘數(shù)的簡單參數(shù) α (alpha) 來構(gòu)建這些更小且計(jì)算成本更低的模型。寬度乘數(shù) α 的作用是在每一層均勻地細(xì)化網(wǎng)絡(luò)。

Edge Impulse Studio 具有可用的 MobileNet V1(96x96 圖像)和 V2(96x96 和 160x160 圖像),具有多個(gè)不同的α值(從 0.05 到 1.0)。例如,您將使用 V2、160x160 圖像和 α=1.0 獲得最高準(zhǔn)確度。當(dāng)然,需要權(quán)衡取舍。精度越高,運(yùn)行模型所需的內(nèi)存就越多(大約 1.3M RAM 和 2.6M ROM),這意味著更多的延遲。

在MobileNet V1和 α=0.10(大約 53.2K RAM 和 101K ROM)的另一個(gè)極端情況下,將獲得更小的占用空間。

當(dāng)我們第一次發(fā)布這個(gè)在 ESP32-CAM 上運(yùn)行的項(xiàng)目時(shí),我們停留在可能性的較低端,這保證了推理具有較小的延遲但不具有高精度。對于第一遍,我們將保留此模型設(shè)計(jì)(MobileNet V1和 α=0.10)。

與深度學(xué)習(xí)一起使用的另一個(gè)重要技術(shù)是數(shù)據(jù)增強(qiáng)數(shù)據(jù)增強(qiáng)是一種可以幫助提高機(jī)器學(xué)習(xí)模型準(zhǔn)確性的方法,可以創(chuàng)建額外的人工數(shù)據(jù)。數(shù)據(jù)增強(qiáng)系統(tǒng)在訓(xùn)練過程中對訓(xùn)練數(shù)據(jù)進(jìn)行小的隨機(jī)更改(例如翻轉(zhuǎn)、裁剪或旋轉(zhuǎn)圖像)。

在底層,您可以在這里看到 Edge Impulse 如何對您的數(shù)據(jù)實(shí)施數(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 個(gè)神經(jīng)元和 10% 的 dropout 以防止過度擬合。這是訓(xùn)練輸出:

pYYBAGSBLQCANeSuAACU6MqNCm4206.png
?

結(jié)果不是很好。該模型達(dá)到了 77% 左右的準(zhǔn)確率,但預(yù)計(jì)在推理過程中使用的 RAM 量相對較?。s 60 KB),這非常好。

部署

經(jīng)過訓(xùn)練的模型將部署為 .zip Arduino 庫:

poYBAGSBLQOAZlydAACY_ljXcB4419.png
?

打開您的 Arduino IDE,在Sketch 下,轉(zhuǎn)到Include Library添加 .ZIP Library。選擇您從 Edge Impulse Studio 下載的文件,就是這樣!

pYYBAGSBLQaAUN3QAADvijSIC9Q969.png
?

在 Arduino IDE 的示例選項(xiàng)卡,您應(yīng)該在項(xiàng)目名稱下找到草圖代碼。

pYYBAGSBLQqAQKQ7AAGf06gf6F4205.png
?

打開靜態(tài)緩沖區(qū)示例:

pYYBAGSBLQ2Ae3PCAAFhBNIFE2E678.png
?

您可以看到第一行代碼正是調(diào)用一個(gè)庫,其中包含在您的設(shè)備上運(yùn)行推理所需的所有必要內(nèi)容。

#include 

當(dāng)然,這是一個(gè)通用代碼(一個(gè)“模板”),它只獲取一個(gè)原始數(shù)據(jù)樣本(存儲在變量中:features = {} 并運(yùn)行分類器,進(jìn)行推理。結(jié)果顯示在串行監(jiān)視器上。

我們應(yīng)該從相機(jī)中獲取樣本(圖像)并對其進(jìn)行預(yù)處理(將大小調(diào)整為 96x96,轉(zhuǎn)換為灰度,并將其展平)。這將是我們模型的輸入張量。輸出張量將是一個(gè)具有三個(gè)值(標(biāo)簽)的向量,顯示每個(gè)類別的概率。

pYYBAGSBLQ-AWf15AAB96jSG6to695.png
?

返回您的項(xiàng)目(選項(xiàng)卡圖像),復(fù)制原始數(shù)據(jù)示例之一:

poYBAGSBLROAUY1-AAIYrlxQ1Sw020.png
?

9、將216個(gè)特征復(fù)制到剪貼板。這是輸入張量(96x96x1 的扁平圖像),在本例中為香蕉。超過此輸入張量 features[] = {0xb2d77b, 0xb5d687, 0xd8e8c0, 0xeaecba, 0xc2cf67, ...}

poYBAGSBLRaAIJ65AAD83HHOMpY905.png
?

注意:Edge Impulse在其 SDK 中包含ESP NN 庫,其中包含針對各種 Espressif 芯片優(yōu)化的 ??NN(神經(jīng)網(wǎng)絡(luò))函數(shù)。在本教程發(fā)布(5 月 2 日)之前,ESP NN 無法與 ESP32S3 (Arduino IDE) 一起使用。

如果您編譯代碼并遇到錯(cuò)誤,則有必要修復(fù)它。EI 建議關(guān)閉 ESP NN 加速。為此,ei_classifier_config.h在導(dǎo)出的 Arduino 庫文件夾中找到: /scr/edge-impulse-sdk/classifier/:

poYBAGSBLRmAImQfAAEao8V24O4165.png
?

找到帶有 的行#define EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN 1,并將其從 1 更改為 0:

poYBAGSBLR-AT0BGAAEkV0h8wbM263.png
?

現(xiàn)在,在運(yùn)行推理時(shí),您應(yīng)該得到“banana”的最高分。

pYYBAGSBLSOAZ3KlAACz5jwbk74829.png
?

好消息!我們的設(shè)備進(jìn)行推理,發(fā)現(xiàn)輸入圖像是香蕉。這是比 ESP32 CAM(525 毫秒延遲)更好的結(jié)果。

現(xiàn)在,我們應(yīng)該結(jié)合攝像頭并對圖像進(jìn)行實(shí)時(shí)分類。

轉(zhuǎn)到 Arduino IDE 示例并從您的項(xiàng)目下載草圖 esp32_camera:

poYBAGSBLSaAJalpAABvcwIuy5Y279.png
?

您應(yīng)該根據(jù)與我們的模型相關(guān)的數(shù)據(jù)更改第 32 行到第 75 行,它們定義了相機(jī)模型和引腳:

pYYBAGSBLSmAGu8rAACRmvlOaCU469.png
?

修改后的草圖可以從 GitHub 下載:xiao_esp32s3_camera 。

請注意,您可以選擇將引腳保留為 ah 文件,就像我們在前幾節(jié)中所做的那樣。

將代碼上傳到您的 XIAO ESP32S3 Sense,您應(yīng)該就可以開始對水果和蔬菜進(jìn)行分類了!您可以在串行監(jiān)視器上檢查結(jié)果。

測試模型(推理)

poYBAGSBLS2AP8SEAAOnArpXIJU262.jpg
?

使用相機(jī)拍攝照片,分類結(jié)果將顯示在串口監(jiān)視器上:

pYYBAGSBLTCAY20oAACtdqArdmE112.png
?

其他測試:

?
?
?
pYYBAGSBLTiAL_TKAAlFsGY7iPM934.png
?
1 / 3
?

使用更大的模型進(jìn)行測試

現(xiàn)在,讓我們轉(zhuǎn)到模型尺寸的另一側(cè)。讓我們選擇一個(gè) MobilinetV2 96x96 0.35,輸入 RGB 圖像。

poYBAGSBLTuAcAFxAAGqNeLLs2w132.png
?

即使使用更大的模型,準(zhǔn)確性也不好,最糟糕的是,運(yùn)行模型所需的內(nèi)存量增加了五倍,延遲增加了七倍。因此,為了讓我們的模型更好,我們可能需要訓(xùn)練更多的圖像。

即使我們的模型沒有改進(jìn),讓我們測試一下 XIAO 是否可以處理這么大的模型。我們將使用靜態(tài)緩沖區(qū)草圖進(jìn)行簡單的推理測試。

poYBAGSBLT6AaiuBAACrDtzqb-c797.png
?

結(jié)果是肯定的!內(nèi)存在這里不是問題;延遲是!在實(shí)際測試中看到,XIAO 花費(fèi)了將近 2.5 秒來執(zhí)行推理(與之前的 318 毫秒相比)。

可選擇使用 ESP-NN 加速 [2013 年 5 月 19 日更新]

盡管 Edge Impulse 尚未發(fā)布使用加速器的 ESP32S3 SDK,但多虧了Dmitry Maslov, 我們可以為 ESP32-S3 恢復(fù)和修復(fù) ESP NN 的裝配優(yōu)化。這個(gè)解決方案還不是官方的,因?yàn)橐坏┧麄兘鉀Q了與其他板的沖突,EI 就會將它包含在 EI SDK 中。

目前,這僅適用于非 EON 版本。因此,如果在生成庫時(shí)啟用了 EON 編譯器,則應(yīng)重新部署模型。

pYYBAGSBLUGAIMXAAAGgnfgXWMo042.png
?

同時(shí),你可以從項(xiàng)目的GitHub上下載一個(gè)初步版本,解壓,將
src/edge-impulse-sdk/porting/espressif/ESP-NN,你的Arduino庫文件夾下的ESP NN文件夾替換為:

poYBAGSBLUSAVdyxAAB8_KatwHs112.png
?

然后編譯草圖。替換文件夾后重新啟動 IDE 可能會有所幫助。

使用 MobilinetV2 96x96 0.35 進(jìn)行推理,將 RGB 圖像作為輸入,延遲從 2,383 毫秒減少到 219 毫秒,減少了十倍以上!

?
?
?
poYBAGSBLUeAU2TdAACj8UihduE056.png
?
1 / 2
?

在我的測試中,此選項(xiàng)適用于 MobileNet V2 但不適用于 V1。因此,我再次訓(xùn)練模型,使用最小版本的 MobileNet V2,alpha 為 0.05。

poYBAGSBLUuAHMwTAAGvzha0Wlw461.png
?
請注意,以 480MHz 時(shí)鐘運(yùn)行的 Arduino Portenta(ou Nicla)的估計(jì)延遲為 45ms。

部署模型,并應(yīng)用修復(fù),替換 ESP-NN 文件夾,如前所述,我得到的推斷只有 135 毫秒,記得 XIAO 運(yùn)行的時(shí)鐘是 Portenta/Nicla 使用的時(shí)鐘的一半(240MHz):

pYYBAGSBLU6Af8SZAAFAJXhknLU878.png
?

結(jié)論

XIAO ESP32S3 Sense 是一款非常靈活、價(jià)格低廉且易于編程的設(shè)備。該項(xiàng)目證明了 TinyML 的潛力。內(nèi)存不是問題;該設(shè)備可以處理許多后處理任務(wù),包括通信。但是你應(yīng)該考慮到高延遲(沒有 ESP NN 加速器)會限制一些應(yīng)用程序,盡管 XIAO 比 ESP32-CAM 快 50%。

在我的 GitHub 存儲庫中,您會找到最新版本的代碼:XIAO-ESP32S3-Sense。

一如既往,我希望這個(gè)項(xiàng)目可以幫助其他人在令人興奮的人工智能、電子物聯(lián)網(wǎng)世界中找到自己的出路!

poYBAGNVlOKAQp0tAABnO-FoD-w048.png
?

鏈接:MJRoBot.org

來自世界南方的問候!

在我的下一個(gè)項(xiàng)目見!

謝謝

馬塞洛


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)