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

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方