模型案例:| 手势动作识别模型训练与应用!

导读

2023年以ChatGPT为代表的大语言模型横空出世,它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力,为人工智能技术的发展开辟了新的可能性。同时,人工智能技术正在进入各种应用领域,在智慧城市、智能制造、智慧医疗、智慧农业等领域发挥着重要作用。

柴火创客2024年将依托母公司Seeed矽递科技在人工智能领域的创新硬件,与全球创客爱好者共建“模型仓”,通过“SenseCraft AI”平台可以让使用者快速部署应用体验人工智能技术!

本期介绍:模型案例:| 手势动作识别模型训练与应用!

GroundingDINO

基于DINO的开放式检测器Grounding DINO不仅实现了最先进的物体检测性能,还通过Grounding预训练实现了多级文本信息的集成。与 GLIP 或接地语言图像预训练相比,GroundingDINO 具有多项优势。首先,其基于Transformer的架构,类似于语言模型,便于处理图像和语言数据。

该方法融合了文本和图像两个模态的数据,实现了开放集目标检测,即给定一个文本提示,自动框出目标所在,该目标可以是训练集中没有的类别。该方法主要通过特征增强模块、语言指导查询选择模块、跨模态解码模块实现上述功能。

GroundingDINO架构

如上图所示,该方法从下到上主要包括五大模块:特征提取模块(Backbone)、特征增强模块(Feature Enhancer)、语言指导查询选择模块(Language-guide Query Selection)、跨模态解码模块(Cross-Modality Decoder)、损失计算模块(Loss)。

该框架支持多种功能,包括推理、对象检测数据训练、基于接地的数据训练等。它采用了PyTorch作为主要开发库,并优化了训练策略以加快模型收敛速度。Grounding DINO的灵活性体现在其对混合数据集的支持上,可以同时处理OD(对象检测)和VG(视觉基因组)数据,使得模型能够在更广泛的上下文中学习和泛化。

应用场景

Grounding DINO可应用于多种场景中,例如智能监控、自动驾驶、无人机导航以及图像搜索等领域。尤其是在多模式识别和理解方面,它的表现尤为出色。结合BERT等语言模型,Grounding DINO能根据文本提示精确定位图片中的目标对象,极大地提升了场景理解和语义解析的能力。

Grounding DINO特点

适应性强:不仅能在官方提供的预训练模型下运行,还能通过微调以适应特定数据集。

高度可配置:提供了详细的配置文件,允许用户自定义训练参数,如backbone架构、批量大小、学习率等。

训练加速策略:针对大型数据集设计,采用torch.distributed.launch进行分布式训练,支持多机协同工作,大幅缩短训练时间。

广泛的数据兼容性:支持OD和VG两种不同类型的标注数据,极大扩展了模型的应用范围。

手势动作识别模型训练与应用

在模型案例推文中,介绍过通过摄像头进行视觉识别和通过麦克风进行声音识别,今天介绍第三种识别形式:利用多轴加速度传感器进行动作识别。

我们尝试利用手机自带的三轴加速度传感器来采集三种动作手势,包括左右晃动、上下晃动和静止不动

动作训练与应用

Edge Impulse 是一个专注于边缘计算和物联网 (IoT) 的机器学习平台。它允许开发者和企业创建、训练和部署机器学习模型,以便在边缘设备上运行。

官网 : http://edgeimpulse.com

易于使用:提供图形用户界面,让非数据科学家也能轻松使用。

快速原型:支持快速构建和测试机器学习模型,缩短开发周期。

多种数据输入:支持从多种传感器和数据源收集数据,如音频、图像和加速度计等。

模型优化:能够对模型进行优化,以适应边缘设备的限制,例如减少内存和计算需求。

支持多种平台:可以将模型部署到不同的硬件平台,包括微控制器和更复杂的嵌入式系统。

采集三种手势动作数据

  1. 进入Edge Impulse官网,注册并登录账号后点击右上角【Create new project】按钮,创建一个项目,如下图所示。

2、在文本框中输入项目名称(备注:请输入英文名称),单击右下角的【Create new project】按钮,这样就创建了一个新项目,如下图所示。

3、进入项目后单击左侧的【Data acquisition】按钮,进入数据采集页面,如下图所示。

  1. 进入数据采集页面后,在右侧的“Collect data”中点击“Connect a device”链接,如下图所示。

5、弹出Collect new data窗口,用手机浏览器扫描下左侧的二维码,如下图所示。

https://smartphone.edgeimpulse.com/index.html?apiKey=ei_8e4a7b875e6eaad4d307f437646c572b51e85cbcb92dc241c7ec37e6f6030dcd (二维码自动识别)

6、在手机浏览器上会显示连接界面,这里列出了手机可采集数据的方式包括摄像头、麦克风和三轴加速度传感器,这里单击【Collecting motion】按钮,,如下图所示。

7、进入提示页面,单击【Give access to the accelerometer】按钮,打开手机上的三轴加速度传感器,如下图所示。还会弹出一个询问是否允许界面,单击【允许】按钮。

8、这样就进入三轴加速度传感器采集页面,单击“Label”会弹出设置类别窗口,这里会采集三个类别包括左右晃动(about)、上下晃动(up_anddown)和静止不动(static);比如采集静止不动,在单击“Label”选项输入“static”,单击【Start recording】按钮如下图所示。

  1. 单击【Start recording】按钮后,手里拿着手机静止不动,等待1秒钟后就会将三轴加速传感器的x、y、z的三轴数据上传到Edge Impulse平台上,如下图所示。

9、手机上采集的三轴加速度传感器数据会上传到Edge Impulse的项目页面中,在“Dataset”列表中会列出采集数据文件,右侧会显示出此文件的x、y、z三轴折线图表,如下图所示。安装这种方法先参加20到30条静止不动(static)的数据。

10、接着采集拿着手机上下晃动(up_anddown)动作状态30条左右,如下图所示。

  1. 最后采集左右晃动(about)动作状态30条左右,如下图所示。

12、采集三个手势动作数据后,在左侧【MImpulse design】中单击【Create impulse】选项,添加“处理块”和“学习块”,添加标星号的推荐内容即可,最后单击【Save lmpulse】保持设置,如下图所示。

13、接着单击左侧的【Spectral features】选项,进入光盘分析页面后单击【Save parameters】按钮保存参数特征,如下图所示。

14、然后单击【Generate features】生成特征要素,经过一段时间会生成特征图,如下图所示。

15、单击左侧的【Classifier】选项进入训练模型页面,设置训练周期数为“45”,然后单击【Save & train】按钮,开始进行模型训练经过一段时间后在页面的右侧会显示出模型的准确率和损失率等指标,如下图所示。

16、单击左侧的【Deployment】模型部署选项,进入模型部署页面,在选择框中选择“Arduino library”选项;在“MODEL OPTIMIZATIONS”模型优化选项中选择“TensorFlow Lite”,使用默认的“INT8”模式,最后单击底部的【Build】按钮,如下图所示。

https://smartphone.edgeimpulse.com/classifier.html?apiKey=ei_8e4a7b875e6eaad4d307f437646c572b51e85cbcb92dc241c7ec37e6f6030dcd&impulseId=1 (二维码自动识别)

  1. 在右侧的“Build output”选项中可以看到生成相应格式模型的过程和进度,完成模型后会弹出一个窗口提示如何添加Arduino模型库文件和预览案例文件,如下图所示。

  1. 同时会弹出提示Arduino模型库文件下载提示窗口,将其下载到特定文件夹中即可,如下图所示。

  1. 这样手势动作识别模型就训练完成并生成了支持Arduino的库文件,打开Arduino IDE软件选择【工具】-【导入库】-【添加zip库】添加此手势动作识别模型库文件,如下图所示。

  1. 导入模型库文件后会生成一个后缀为inferencing名字的库文件,在单击【文件】-【示例】-【后缀是inferencing名字的库文件】-【esp32】-【esp32_fusion】,打开此案例程序,如下图所示。

21、esp32_fusion案例程序是以基于 LIS3DHTR 芯片的三轴加速度传感器为例的,到这里需要先连接好相应的硬件,这里使用了一个XIAO ESP32 S3(Sense)开发板、一个XIAO扩展板和一个Grove - 3-Axis Digital Accelerometer (LIS3DHTR)三轴加速度传感器连接到一起。

22、esp32_fusion案例程序如果无法启动或初始化Grove - 3-Axis Digital Accelerometer (LIS3DHTR)三轴加速度传感器,就需要修改下相应的代码,可以使用这个修改过的案例程序试试。

具体程序代码请在网盘中下载查看

https://share.weiyun.com/QHhHzmbz

23、将相关硬件连接好并用数据线将XIAO ESP32 S3(Sense)开发板与电脑的USB接口连接后,开始上传此程序(备注:如果上传失败在工具菜单中,请打开PSRAM功能),上传成功后打开串口监视器可以看到三轴加速度初始化成功,并输出三个类别名称和置信率等信息,如下图所示。

24、手里拿手机并左右或上下摇晃,通过串口可以观察到about或up_anddown这两个类别后面的值会改变,这个值就是预测结果的置信率,比如0.8就代表80%的预测结果是这个类别。

模型推理演示,请看如下视频。

手势动作识别功能演示

XIAO ESP32S3 Sense 套装介绍

XIAO ESP32S3(Sense)

强大的 MCU 板:集成ESP32S3 32 位双核 Xtensa 处理器芯片,运行频率高达 240 MHz,安装多个开发端口,支持 Arduino/MicroPython

高级功能:可拆卸OV2640相机传感器,分辨率为1600*1200,兼容OV5640相机传感器,集成附加数字麦克风

超强内存,带来更多可能性:提供 8MB PSRAM 和 8MB 闪存,支持 SD 卡插槽,用于外部 32GB FAT 内存

出色的射频性能:支持2.4GHz Wi-Fi和BLE双无线通信,连接U.FL天线时支持100m+远程通信

拇指大小的紧凑型设计:21 x 17.5mm,采用XIAO的经典外形,适用于可穿戴设备等空间有限的项目

来自 SenseCraft Al 的用于无代码部署的预训练 Al 模型。

写在最后

SenseCraft-AI平台的模型仓数量还很少,但是好消息是它支持自定义模型上传并输出推理结果,平台会逐渐增加模型仓的数量,敬请关注!

<think>好的,用户问“ESP32就可以吗”,这需要结合之前的对话来理解。用户之前请求的是在Arduino上运行类似DeepSeek的大型AI模型的代码,我解释了Arduino的硬件限制,并给出了两种方案。现在用户可能想知道是否ESP32能够满足需求。 首先,我需要确认ESP32的硬件规格,比如处理能力、内存等。ESP32通常有双核处理器,主频240MHz,内存约520KB SRAM,比普通Arduino强很多,但依然有限。不过对于轻量级AI模型可能足够。 接下来,考虑用户的需求。用户可能想用ESP32运行更复杂的AI任务,或者想知道之前的方案是否适用于ESP32。需要明确ESP32在两种方案中的适用性:本地运行轻量模型或连接云端。 然后,需要分析ESP32的优势和局限性。比如,ESP32支持WiFi和蓝牙,适合作为云端方案的网关。本地运行的话,TensorFlow Lite Micro可以在ESP32上运行,但模型大小和内存占用是关键。 可能用户对AI应用的具体场景还不明确,比如是图像识别、语音处理还是传感器数据分析。需要建议用户明确需求,以便推荐合适的方案。 还要比较ESP32其他硬件,比如Arduino Portenta H7或搭配专用AI芯片的情况,帮助用户理解不同选择之间的权衡。 最后,确保回答结构清晰,分点说明ESP32的适用性,给出示例代码,并指出注意事项,比如内存管理、模型优化等。同时,鼓励用户提供更多细节以获得更具体的帮助。</think>是的,ESP32 是运行轻量级 AI 应用的理想选择。相比基础款 Arduino,ESP32 具备以下优势: **硬件规格** - Xtensa® 双核 32 位 LX6 处理器(240MHz) - 520KB SRAM(实际可用约 300KB) - 支持 WiFi/BLE 无线通信 - 4MB Flash 存储空间(可扩展至 16MB) - 硬件加速模块(FFT/DSP 指令) --- **典型应用场景** 1. **本地推理方案**(适用模型大小 ≤ 200KB) - 语音关键词识别(例:Alexa 唤醒词) - 传感器模式识别(振动/温湿度异常检测) - 简单图像分类($128 \times 128$ 分辨率) 2. **边缘计算方案**(推荐) - 作为 AI 网关预处理数据(如压缩图像至 JPEG) - 执行规则过滤(减少云端传输量) - 融合多传感器数据($ \text{data} = \alpha \cdot \text{accel} + \beta \cdot \text{gyro} $) --- **ESP32 + TensorFlow Lite Micro 示例**(手势识别) ```arduino #include <EloquentTinyML.h> #include "手势识别模型.h" // 预训练好的 TFLite 模型 #define INPUT_DIM 64 // 输入特征维度(8x8 加速度计数据窗口) #define OUTPUT_DIM 5 // 输出类别数 Eloquent::TinyML::TfLite<INPUT_DIM, OUTPUT_DIM> mlp; void setup() { Serial.begin(115200); // 初始化模型(约需 150KB 内存) mlp.begin(g_model); // 验证模型匹配性 if (mlp.getInputShape()[0] != INPUT_DIM) { Serial.println("模型输入维度不匹配!"); while(1); } } void loop() { float accel_data[3]; // 三轴加速度计数据 static float data_buffer[INPUT_DIM]; // 采集数据(示例用伪代码) readAccelerometer(accel_data); updateBuffer(data_buffer, accel_data); // 执行推理(约需 15ms) float* prediction = mlp.predict(data_buffer); // 解析结果 int gesture = argmax(prediction, OUTPUT_DIM); Serial.print("识别手势:"); Serial.println(gesture_labels[gesture]); delay(100); } // 辅助函数:更新滑动窗口数据 void updateBuffer(float* buffer, float* new_data) { memmove(buffer, buffer+3, (INPUT_DIM-3)*sizeof(float)); // 滑动窗口 memcpy(buffer + (INPUT_DIM-3), new_data, 3*sizeof(float)); } ``` --- **性能优化关键参数** | 优化项 | 典型值 | 效果提升 | |---------------------|-------------------|---------------| | 模型量化 | 8-bit 整型 | 内存减少 75% | | 运算符裁剪 | 仅保留必要算子 | 代码量减少 40% | | 内存复用 | 共享 tensor arena | 内存需求降低 30% | | 使用 Xtensa DSP 指令 | 启用 -O3 优化 | 速度提升 2-3 倍 | --- **开发注意事项** 1. **内存管理** - 使用 `ESP.getFreeHeap()` 监控内存使用 - 优先使用 `PROGMEM` 存储常量数据 - 避免动态内存分配(慎用 `malloc`) 2. **模型部署技巧** - 使用 [Edge Impulse](https://edgeimpulse.com/) 在线训练并导出 ESP32 专用模型 - 通过 `numpy_to_tflite.py` 脚本转换 Keras 模型 - 启用 [CMSIS-NN 加速库](https://github.com/espressif/tflite-micro-esp-examples) 3. **实时性保障** ```c // 关键代码段禁用中断 noInterrupts(); float* output = interpreter->input(0)->data.f; interrupts(); ``` --- **推荐开发板对比** | 型号 | 内存 | Flash | 特色功能 | |--------------------|--------|--------|--------------------------| | ESP32-S3 | 512KB | 8MB | 向量指令加速 (V extension) | | ESP32-CAM | 520KB | 4MB | 集成 OV2640 摄像头 | | ESP-EYE | 520KB | 8MB | 麦克风阵列 + 人脸识别库 | 如需运行更复杂的模型(如 MobileNetV2),建议采用 **ESP32-S3 + PSRAM 扩展** 方案,可将内存扩展至 8MB。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值