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

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境