TinyML:Edge Impulse训练图片分类模型

2024-03-10 17:36

本文主要是介绍TinyML:Edge Impulse训练图片分类模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文将介绍如何在没有任何深度学习知识背景的情况下,如何使用Edge Impulse快速训练一个图片分类网络。

本次教程使用到的是XIAO ESP32S3 Sense开发板,该开发板带有数字麦克风和ov2640摄像头,能够满足本次项目的要求。本文同时也适用于其它带有ov2640摄像头的ESP32开发板,只需要修改对应摄像头的管脚映射即可。

软硬件设备

  • XIAO ESP32S3 Sense开发板
  • Edge Impulse
  • Arduino

Arduino 环境搭建

本次教程基于Arduino进行编程实现,因此我们首先需要将ESP32板包添加到Arduino IDE中。

导航到文件>首选项,并在“Additional Boards Manager url”末尾添加一行url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json(国内可能需要魔法)
在这里插入图片描述

导航到Tools > Board > Boards Manager…, 在搜索框中键入关键字* esp32 选择最新版本的 esp32, 然后安装它。
在这里插入图片描述

选择您的板和端口。 在Arduino IDE的顶部,您可以直接选择端口。这可能是COM3或更高版本(COM1和COM2通常保留用于硬件串行端口),并在左侧的开发板中选择对应的开发板。这里我们选择的是XIAO_ESP32S3。
在这里插入图片描述

至此我们就完成了XIAO ESP32S3程序编写环境的准备。

Edge Impulse介绍

Edge Impulse 是一个用户友好的开发平台,用于在边缘设备上进行机器学习。它为初学者提供了友好且强大的网页交互界面和工具包,涵盖 TinyML 学习路径所需的从数据收集到模型部署的整个流程。可以让你快速实现自己的模型训练和推理。Edge Impulse 可利用 TensorFlow 生态系统进行训练和优化,并将深度学习模型部署到嵌入式设备上。

创建工程

首先先创建一个新工程。
在这里插入图片描述
工程创建完成后会进入到我们的工程界面下,之后的整个训练过程将通过这个仪表盘中进行实现。
在这里插入图片描述

首先拉到仪表盘的底部,在右下角会有一个Project info选项卡。由于我们仅仅需要对图片进行分类,不需要对图片进行目标检测(后者需要在图片上画框将识别到的物体圈出),因此我们在“Labeling method”一栏选择“One label per data item”。并且在“Target device”选择“Espressif ESP-EYE”。
在这里插入图片描述

收集训练图片

在进行模型的训练之前,我们首先需要收集原始数据集。这里值得注意的是,Edge Impulse是原生支持ESP-EYE开发板的,如果你使用的是ESP-EYE开发板,则可以在训练过程中直接连接进行数据集的采集和模型的验证,但是由于我们使用XIAO ESP32S3并不支持,因此我们还需要单独采集数据集。

这里我们使用一个基于Arduino的HTTP_Server程序来进行摄像头数据的采集和存储。该程序设计了一个Web网页,保证电脑和开发板接入同一局域网的条件下,在电脑浏览器栏输入ESP32的ip地址即可进入该web界面。
在这里插入图片描述
在该界面中,点击”capture“我们可以观察到摄像头拍摄到的图片,之后点击“save”即可将图片保存到内存卡内(开发板需要插入内存卡)并捕获下一张图片。(程序源码请在微信公众号:通信电子坊 回复 “ESP32采集图片程序” 获取。

在收集到足够多的图片后,我们就可以开始构建数据集了。这里我一共采集了两组图片:宠物猫(cat)和背景(bk)。
点击左侧菜单栏中的“data acquisition”,并点击“Upload data”将我们采集到的数据进行上传。
在这里插入图片描述
我们需要分两次分别上传我们的宠物猫图片和背景图片。我们先选中存放图片的文件夹,并选择自动分割训练集和测试集,并最后设置我们这组图片的标签,最后点击“upload data”即可完成数据集的上传。
在这里插入图片描述

预处理及模型定义

创造脉冲信号

在收集好数据集后,我们需要从左侧菜单栏进入Impulse design对数据进行预处理并定义模型。首先我们在imagedata选项卡中将图片统一缩放为96*96大小。
在这里插入图片描述
之后添加processing block对图片数据进行预处理,这里我们选择image,选择“raw data”的话在后面额能会遇到奇怪的错误。
在这里插入图片描述
最后添加learning block定义模型,这里我们选择“transfer learning”。根据经验,这里的“transfer learning”要比“Classification”效果要好。
在这里插入图片描述
完成以上步骤后的图片如下所示:
在这里插入图片描述
最后点击最右侧的save impulse即可完成。

预处理

之后是对预处理模块“image”进行设置,左侧菜单栏点击“image”,进入到其设置界面
在这里插入图片描述
在color depth一栏我们可以设置输入模型的图片格式为RGB还是GRAY。GRAY模式仅有一个通道,能够很好的节约内存占用;而RGB包含三个通道,但是能够提高模型的准确度。这里我们选择RGB模式。点击“Save parameters”。

最后在“Generate features”一栏点击“generate features”即可完成。

在这里插入图片描述

模型训练

在左侧菜单栏点击Transfer learning进入模型训练界面。在该界面我们能够设置模型训练的轮次(Number of training cycles)和学习率(Learning rate)。模型训练的轮次越多,模型的准确度越高。
在这里插入图片描述
此外,我们还可以点击左侧的EON Tuner,对不同模型的效果进行对比并选择效果相对最好的模型进行训练。
在这里插入图片描述

模型测试

模型训练完毕后,我们可以点击右侧的model testing来检验模型的效果。
在这里插入图片描述

导出模型

最后点击左侧的Deployment进入模型导出界面。Edge impulse提供了多种导出的格式,如果你要获取训练后的模型,可以选择Custom block。这里我们选择Arduino库选项(Arduino library),并在底部选择Quantized (Int8)并按下按钮Build。由于我们使用的是esp32s3开发板,因此应该保持不选中启用EON编译器选项。
在这里插入图片描述
下一篇文章将介绍如何将下载得到的Arduino库添加到Arduino中并在ESP32S3中运行该模型。

图片采集的程序源码请在微信公众号:通信电子坊 回复 “ESP32采集图片程序” 获取。

这篇关于TinyML:Edge Impulse训练图片分类模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/794988

相关文章

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效