大家在很多地方都可以看到嵌入式AI的概念,但是到实际的上手和开发过程中,不完善的工具链和复杂的开发流程都是嵌入式工程师或者AI算法工程师很大的阻碍。
而基于STM32H7的OpenMV机器视觉模组和云端AI平台Edge Impulse合作,就很好的打通了从数据收集、打标,NN模型训练、优化到部署的整个流程。
去年4月份我们的新品OpenMV4 H7 Plus上市啦,今天我来给大家介绍一下OpenMV4 H7 Plus的新功能——利用EdgeImpulse在线网站自行训练神经网络进行分类识别。
在本教程中,你将使用机器学习来构建一个识别系统,该系统可通过OpenMV4 H7 Plus智能摄像头识别人脸是否佩戴口罩,即实现影像分类。
EdgeImpulse是一个为嵌入式设备提供在线训练神经网络模型服务的网站,它是我们OpenMV的合作伙伴,同时也均为ST意法半导体的官方合作伙伴。目前EdgeImpulse对我们OpenMV用户是免费开放的,OpenMV用户可以免费的使用EdgeImpulse在线训练适用于OpenMV的神经网络模型。
为嵌入式设备OpenMV增加神经网络,可实现区分盗猎者和大象、对工厂生产线进行质量控制、让遥控模型车自行驾驶等功能。
在本教程中,你将学习如何收集图像建立一个高质量的数据集,如何应用迁移学习训练神经网络,以及如何将系统部署到OpenMV。
你可以在以下地址查看整个项目内容,所有代码和模型都包括在内:https://book.openmv.cc/project/mask.html
使用EdgeImpulse在线训练适用于OpenMV的神经网络模型主要分为以下四个步骤:数据集采集、上传、训练以及部署。
01 采集数据集
在本教程中,我们会构建一个可以区分人脸是否佩戴口罩的模型。当然你也可以选择分类其他物品。为实现机器学习模型的运作,你需要收集戴口罩和不带口罩两种人脸的大量示例图像。在训练时,这些示例图像就用来做模型的区分练习。
我们需要利用OpenMV IDE来采集我们的数据集,采集图像的步骤如下:
* 创建两个分类:
打开OpenMV IDE菜单栏的“工具”,选择“数据集编辑器”,单击“新建数据集”,然后新建一个文件夹并打开,在数据集里面再新建两个文件夹分别命名为mask(用来保存戴口罩的人脸的照片)和face(用来保存不戴口罩的人脸的照片)。
新建数据集
创建分类文件夹
* 用OpenMV采集图像
首先我们连接OpenMV,点击IDE里面的“连接”,点击“运行”,Framebuffer帧缓冲区中可以看到OpenMV实时的图像,点击左侧菜单栏中的照片的按钮,OpenMV就会自动的保存这张图片,这就是数据集里面的一个数据。
首先我们要保存的是戴了口罩的人脸,点一下照片的按钮,IDE下侧就会拍摄一张照片,它会自动命名为00000,然后下一张是00001,以此类推。
用OpenMV分别采集200张戴口罩(男女各100张)和200张不戴口罩(男女各占100张)的人脸的照片。
用OopenMV采集男生戴口罩的图像
用OopenMV采集女生戴口罩的图像
* 注意:要确保采集到各种角度的照片,保证我们训练学习的多样化。
* 如果采集的过程中发现某张图片采集得不够完美的话,可以右键此图片点击删除。
02 上传
使用OpenMV采集完图像以后,你需要注册账号登录EdgeImpulse官网(https://edgeimpulse.com/)开始上传图像,上传图像的步骤:
* 在EdgeImpulse上新建一个项目,点击“keys”,选择“API Key”并复制“API Key”。通过API Key实现OpenMV IDE和Edge Impulse的连通。
* 选择OpenMV IDE上方菜单栏的“工具”——“数据编辑器”——“Export”——“上传”——“通过API Key上传”,复制“API Key”上传即可。
上传时数据将自动划分为训练集和测试集,我们默认选择比例为“80%和20%”即可。我们一共采集了400多张人脸图片,其中80%的Training Date就是默认你80%的数据用来训练,剩余的20%用作测试集。
用OpenMV上传数据集
将数据集上传到EdgeImpulse上
03 训练数据集
数据集准备就绪,你就可以在EdgeImpulse网站界面中训练数据集了。
* 配置处理模块:
首先选择“Impulse Design”,配置处理模块:
* 设置默认的图像长宽为“96 x 96”;
* 选择“图像Images”模块,表示我们是对图像进行分类训练(你也可以用EdgeImpulse分类声音、视频等);
* 选择“迁移学习(图像)Transfer Learning (Images)”,设置学习的模型;
选择“保存Save impulse”,显示Successfully就是配置成功了。
配置处理模块
* 图像预处理:
单击左侧菜单中的“图像Image”,将颜色格式设置为“RGB”,然后点击“Save”。
* 接下来选择“生成特征Generate features”来启动流程,将对400多张数据进行图像预处理,右侧会显示完整数据集的3D可视化。
特征资源管理器将数据集中的数据进行可视化处理。
在特征资源管理器中分离良好的集群更便于机器学习模型学习。
* 配置迁移学习模型
单击左侧菜单中的“迁移学习Transfer learning”,设置的参数全部选择默认的就可以,也可以根据需求来更改参数:
1.将训练周期数Number of training cycles设置默认为10
2.将学习率Learning rate设置为0.0005
3.可以勾选也可以不勾选“数据增强Data augmentation”
4.将最低置信度Minimum confidence rating默认设置为0.8。
点击“开始训练Start training”,训练的过程大概4到5分钟左右。
模型训练完成后,你可以查看准确度、混淆矩阵confusion matrix和预期设备性能。
训练完成后的表现
* 测试模型:
训练完成后,我们将使用测试数据来检验模型。
选择“模型测试Model testing”,勾选“样本名称Sample name”旁的复选框,点击“分类选择Classify selected”。这里显示的准确度达到了97%,就一个数据甚少的模型而言实属难得。
发现显示红色的这一张图片是不确定的,点击这张图片右侧的三个点,选择“显示分类 Show classification”,你就会进入“实时分类”的界面,里面包含文件的更多细节。这个界面将帮助你确定图片分类错误的原因。
一个无法分类的图片(因为其最高数值仍低于0.8的阈值)
如果数据在所有已知的集群(戴口罩/不戴口罩)之外,这可能是与以前看到的任何分类都不匹配的数据——可能是由于头发遮住了大半的人脸。
04 在OpenMV上运行模型
完成了训练设计、模型训练和模型验证的步骤,你就可以将这个模型导出到你的OpenMV,选择“OpenMV”,选择“Build”进行生成,它自动生成了3个文件:
* trained.tflite 训练好的神经网络模型
* labels.txt 两个分类标签(face和mask)
* ei_image_classification.py 是OpenMV上面要运行的代码
连接OpenMV IDE,把这3个文件保存到OpenMV内置的Flash里面。将ei_image_classification.py文件在OpenMV IDE中打开,可以看到我们刚刚在EdgeImpulse里面生成的代码。点击运行,在串行终端里面会显示运行的结果。
识别戴口罩的人脸
识别不戴口罩的人脸
好啦,你已经成功地为OpenMV增加自行训练神经网络的功能了。
期待你的成果!
责任编辑:lq
全部0条评论
快来发表一下你的评论吧 !