ESP32-S3 邊緣人工智能|使用加速度計(jì)數(shù)據(jù)和 ESP-DL 識別人體活動(dòng)
邊緣計(jì)算是一種分布式計(jì)算范例,指在更靠近設(shè)備的地方進(jìn)行數(shù)據(jù)存儲和計(jì)算。邊緣人工智能(邊緣 AI)是邊緣計(jì)算中一項(xiàng)振奮人心的成果,可以令傳統(tǒng)技術(shù)更高效地運(yùn)行,在降低功耗的同時(shí)又有更好的性能。訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)可以在小型設(shè)備上進(jìn)行推理。邊緣 AI 的潛在應(yīng)用領(lǐng)域包括制造業(yè)、醫(yī)療保健、零售業(yè)、監(jiān)控、智能家居和金融銀行業(yè)。?
樂鑫提供的 ESP-DL?框架可用于在?ESP32-S3?上部署高性能深度學(xué)習(xí)模型。
本文將介紹如何讀取傳感器數(shù)據(jù),并使用?ESP-DL?在??ESP32-S3?上部署深度學(xué)習(xí)模型。?
本文分為以下四個(gè)部分 :
1. 部署模型?
2. 定義模型?
3. 運(yùn)行模型?
4. 結(jié)論
【ESP-DL?的使用前提】在深入了解 ESP-DL 之前,讀者需要:?
構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)的相關(guān)知識(查看深度學(xué)習(xí)的基礎(chǔ)知識)?
ESP-IDF?release/v4.4?環(huán)境(更多信息,請參考設(shè)置 ESP-IDF 環(huán)境或?ESP-IDF?工具鏈)?
基礎(chǔ)的?C?和 C++ 語言應(yīng)用知識?
轉(zhuǎn)換成?ESP-DL 格式的模型?

1. 部署模型
使用加速度計(jì)數(shù)據(jù)設(shè)計(jì)卷積神經(jīng)網(wǎng)絡(luò),識別人類活動(dòng)。?
*本文不會重點(diǎn)介紹神經(jīng)網(wǎng)絡(luò)的開發(fā)和?ESP-DL 格式轉(zhuǎn)換。?
1.1 ESP-IDF 項(xiàng)目結(jié)構(gòu)
部署模型的步驟如下:?
首先,根據(jù) ESP-IDF 標(biāo)準(zhǔn)在 VS Code 中創(chuàng)建一個(gè)新項(xiàng)目。有關(guān)如何在 VS Code 中創(chuàng)建 ESP32 項(xiàng)目,請參考?ESP-IDF 快速入門。?
模型轉(zhuǎn)換成 ESP-DL 格式時(shí)生成的 .cpp 和 .hpp 文件需放置到當(dāng)前工作目錄中。?
將所有依賴組件添加到工作目錄的 components 文件夾中。?
添加?ESP-WHO 示例的默認(rèn)配置 sdkconfig 文件。sdkconfig 文件也可在?GitHub?找到。?
項(xiàng)目目錄應(yīng)如下所示:?
2. 定義模型
按下列步驟和步驟說明在 ‘model_define.hpp’ 中定義模型。在?Netron?中打開模型,會出現(xiàn)圖 1 所示內(nèi)容。?

2.1 導(dǎo)入庫
導(dǎo)入所有相關(guān)庫。請查看?ESP-DL?當(dāng)前支持的庫。?
2.2 聲明層
下一步是聲明每個(gè)層。?
輸入不算是層,因此不在此處定義。?
除了輸出層之外,其他所有層都聲明為私有層。?
2.3?初始化層
聲明層之后,初始化每個(gè)層的權(quán)重、偏差、激活函數(shù)和形狀。?
2.4?構(gòu)建層
下一步是構(gòu)建每個(gè)層。有關(guān)構(gòu)建層的更多信息,請查看每個(gè)層的構(gòu)建函數(shù)。?
2.5?調(diào)用層
最后,將層連接起來,通過調(diào)用函數(shù)一一調(diào)用。有關(guān)調(diào)用層的更多信息,請查看每個(gè)層調(diào)用函數(shù)。?
3.?運(yùn)行模型
構(gòu)建好模型后,在 ‘a(chǎn)pp_main.cpp’ 文件中聲明模型輸入,并在?ESP32-S3?上運(yùn)行模型。?
3.1 導(dǎo)入庫
3.2 聲明輸入
神經(jīng)網(wǎng)絡(luò)的輸入來自?MPU6050?加速度傳感器。讀取實(shí)時(shí)的傳感器數(shù)據(jù)需使用樂鑫的??MPU6050 驅(qū)動(dòng)。每四秒鐘,傳感器數(shù)據(jù)便會存儲在一個(gè)數(shù)組中,輸入到神經(jīng)網(wǎng)絡(luò)中進(jìn)行預(yù)測。?
3.3 設(shè)置輸入形狀
設(shè)置張量中的數(shù)據(jù),輸入到神經(jīng)網(wǎng)絡(luò)。
3.4?調(diào)用模型
通過調(diào)用 forward 方法、傳遞輸入調(diào)用模型。使用延遲來計(jì)算 ESP32-S3 運(yùn)行神經(jīng)網(wǎng)絡(luò)所需的時(shí)間。?
3.5 監(jiān)控輸出
輸出來自公共層,即 l6。結(jié)果可以在終端中打印出來。?
4. 結(jié)論
總之,這個(gè)項(xiàng)目可以給各種應(yīng)用帶更多可能,比如在工業(yè)領(lǐng)域開展預(yù)測性維護(hù),在運(yùn)動(dòng)領(lǐng)域使用加速度計(jì)識別拳擊中的出拳,在醫(yī)療保健領(lǐng)域進(jìn)行跌倒檢測。這只是一部分可以進(jìn)一步探索的領(lǐng)域。如果想查看源代碼,可前往?GitHub?倉庫。

相關(guān)鏈接
Github 倉庫
https://github.com/alibukharai/Blogs/tree/main/Activity_detection
邊緣 AI 的潛在應(yīng)用領(lǐng)域介紹
https://www.xenonstack.com/blog/edge-ai-use-case
ESP-DL
https://www.xenonstack.com/blog/edge-ai-use-case
ESP32-S3
https://www.espressif.com/zh-hans/products/socs/esp32-s3
部署深度學(xué)習(xí)模型
https://github.com/espressif/esp-dl/blob/master/tutorial/quantization_tool_example/README_cn.md
深度學(xué)習(xí)的基礎(chǔ)知識
https://www.youtube.com/watch?v=WvoLTXIjBYU
ESP-IDF?release/v4.4?環(huán)境
https://github.com/espressif/esp-idf/tree/release/v4.4
設(shè)置 ESP-IDF 環(huán)境
https://www.youtube.com/watch?v=byVPAfodTyY
ESP-IDF 工具鏈
https://blog.espressif.com/esp-idf-development-tools-guide-part-i-89af441585b
C 語言
https://www.youtube.com/watch?v=KJgsSFOSQv0&t=12665s
ESP-DL 格式
https://blog.espressif.com/hand-gesture-recognition-on-esp32-s3-with-esp-deep-learning-176d7e13fd37
加速度計(jì)數(shù)據(jù)
https://www.cis.fordham.edu/wisdm/dataset.php
神經(jīng)網(wǎng)絡(luò)開發(fā)
https://www.youtube.com/watch?v=lUI6VMj43PE
ESP-IDF 快速入門
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/linux-macos-setup.html
ESP-WHO 實(shí)例
https://github.com/espressif/esp-who/tree/master/examples/human_face_recognition/terminal
Netron
https://netron.app
ESP-DL 構(gòu)建層
https://github.com/espressif/esp-dl/tree/master/include/layer
MPU6050
https://www.electronicwings.com/sensors-modules/mpu6050-gyroscope-accelerometer-temperature-sensor-module
MPU6050驅(qū)動(dòng)
https://components.espressif.com/components/espressif/mpu6050