简介
Edge Impuse 是一个非常强大的平台来辅助边缘计算设备训练AI模型,它并不需要太多的机器学习的知识。即便是小白也可以非常快速的学习和入门。 本次采用的开发板是 ESP32S3-XIAO-Sense。该开发板主控采用ESP32-S3N8R8模组,配备8MB Flash与8MB PSRAM。板载麦克风、摄像头及SD卡插槽,集成度高,整体尺寸仅相当于拇指指甲盖大小,却具备出色的计算性能。

模型训练步骤
1- 选择目标的平台(选择ESP32-EYE即可,ESP32系列的都可以选择这个但是需要注意计算和调整主频。剩下的保持默认即可)
2- 在收据获取处来使用手机设备扫码连接并且采集图片到Edge impuse,采集后数据会自动的上传

如上图所示我一共是采集了两百个图片,建议采集的时候被采集的物体稍微离镜头远一点,然后在标记的页面上把要识别的物体给圈出来,尽量圈的小一点。以移除额外多余数据对其图像的影响。
3- 采集完和标记完数据之后如果上述的8:2的训练数据集和测试数据集显示红色的话,可以对其数据进行重新的分配。

4- 创建一个Impuse,该Impuse将图片缩放到96*96的像素,然后使用Img处理块来处理图像数据,然后采用物体检测的处理块对上一步的图像进行再次处理,最终输出概率分类。
5-在Image中对图像的特征进行生成和处理,实际上如果处理的数据的点、每个分类的越聚集在一起、对于其他的分类越离散其分类的程度越好。

6 - 创建机器学习的任务。 由于我的数据是一共两百张左右,在我前几次训练的时候发现模型似乎并没有很好的收敛。于是我将轮数调整到了600轮,到最后整体的准确率在90%左右(验证数据集)

可以从上图中看到,对应的推理的时间和RM以及Flash大小的使用还是很大的。所以在ESP32-S3上进行推理的时候会有一定时间的延迟。
7-部署到ESP32
选择量化过的INT8模型,并且Arduino库,并且点击build,将对应的代码下载到本地。
8- 在Arduino IDE中导入下载好的Arduino库

9 - 打开下载库中的esp32-camera demo,然后修改摄像头的Pin定义如下,并且烧录
#if defined(CAMERA_MODEL_ESP_EYE) #define PWDN_GPIO_NUM -1 #define RESET_GPIO_NUM -1 #define XCLK_GPIO_NUM 10 #define SIOD_GPIO_NUM 40 #define SIOC_GPIO_NUM 39 #define Y9_GPIO_NUM 48 #define Y8_GPIO_NUM 11 #define Y7_GPIO_NUM 12 #define Y6_GPIO_NUM 14 #define Y5_GPIO_NUM 16 #define Y4_GPIO_NUM 18 #define Y3_GPIO_NUM 17 #define Y2_GPIO_NUM 15 #define VSYNC_GPIO_NUM 38 #define HREF_GPIO_NUM 47 #define PCLK_GPIO_NUM 13
10 - 进行测试,分别使用拳头、手掌、和姿势1
推理结果(拳头)

完整图片如下

推理结果(手掌)

完整图片如下

推理结果1

完整图片如下
总结
之前一直是想在ESP32上运行摄像头推理的模型、这次正好参加这个活动获取到了这个Esp32sense的开发板,原本是打算做音频识别的项目、但是效果非常糟糕于是便换了其他的主题了。实际上目前看来这个ESP32-S3上进行推理的话效果也是非常的不错的。 虽然延迟比较高但是借助Edge impulse平台。非常方便。
我要赚赏金
