0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Arduino KNN库进行简单的机器学习?

电子森林 来源:硬禾学堂 作者:硬禾学堂 2021-04-01 10:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

除了像TensorFlow for Arduino这样强大的深度学习架构外,还有一些经典的ML方法适用于嵌入式设备上的较小数据集,这些方法有用且易于理解-最简单的方法之一就是KNN。

KNN的一个优势在于,一旦Arduino获得了一些示例数据,就可以立即对其进行分类。我们已经发布了一个新的Arduino库,可以快速轻松地将KNN导入在程序中,且无需进行设备外培训或其他工具。

在本文中,我们将使用颜色分类器示例来介绍KNN。之前在深度学习中我们展示过相同的应用程序,相比之下,KNN是一种更快、更轻量的方法,但无法扩展到更大,更复杂的数据集。

颜色分类示例

在本教程中,我们将介绍如何使用Arduino Nano 33 BLE Sense上的Arduino_KNN库按颜色对其对象进行分类。

在进行配置时我们将需要进行以下准备:

Arduino Nano 33 BLESense开发板

MicroUSB数据线

打开Arduino IDE或Arduino Create的云端编译器

安装Arduino_KNN库

从文件》示例》 Arduino_KNN中选择ColorClassifier

编译程序并上传到您的Arduino开发板

Arduino_KNN库

该示例使用了Arduino_KNN库,该库提供了一个简单的界面,可在我们自己的程序中使用KNN:

#include 《Arduino_KNN.h》 // Create a new KNNClassifierKNNClassifier myKNN(INPUTS);

在本示例中,INPUTS = 3 用来表示颜色传感器的R、G和B值。

采样对象颜色

当打开串行监视器时会看到以下消息:

Arduino KNN color classifierShow me an example Apple

Arduino开发板已准备好采样对象颜色。如果你没有苹果,梨或者橙子,则可能需要通过编辑程序来放置不同的标签。颜色传感器最好在光线充足的房间中处理粗糙,无光泽的物体,并且每个类别都必须具有不同的颜色!(颜色传感器并不是区分橙色和橘子的理想选择,但是它可以检测到橙子的成熟程度。如果要按形状对物体进行分类,则可以始终使用相机。)

当Arduino开发板靠近对象时,它将对颜色进行采样并将其添加到KNN示例中,并带有标记对象所属类的数字(即代表苹果,橙子或梨的数字0、1或2)。提供标记的示例数据的ML技术也称为监督学习。

程序中用于将示例数据添加到KNN函数的代码如下:

readColor(color); // Add example color to the KNN modelmyKNN.addExample(color, currentClass);

颜色样本的红色,绿色和蓝色级别也通过串口输出:

e0114072-9245-11eb-8b86-12bb97331649.png

程序为每个对象获取30个颜色样本。可以向其显示一个对象,它将对颜色进行30次采样-本教程不需要30个苹果!(尽管更广泛的数据集将使模型更通用)

分类

通过获取示例样品,程序现在将要求猜测该对象。该示例的使用与获取训练数据时是相同的功能读取颜色传感器,只是这一次它调用分类函数,当显示颜色时,它将分类对象类:

readColor(color); // Classify the object classification = myKNN.classify(color, K);

您可以尝试向其显示一个对象,然后查看其效果:

Let me guess your object0.44,0.28,0.28You showed me an Apple

注意:这不是100%准确的,尤其是在物体表面变化或照明条件变化的情况下。我们也可以尝试使用不同数量的实例、k的值以及不同的对象和环境,以查看其如何影响结果。 KNN如何运作?尽管Arduino_KNN库完成了数学运算,但在为应用程序选择ML算法时,了解ML算法的工作原理很有用。简而言之,KNN算法通过比较对象与先前看到的示例的接近程度来对对象进行分类。下面是一个示例图表,其中包含平均每日温度和湿度数据点。每个示例都标有一个季节:

e074a9b4-9245-11eb-8b86-12bb97331649.png

为了对新对象(图表上的“?”)进行分类,KNN分类器将查找它所看到的最相似的先前示例。由于在我们的示例中有两个输入,因此算法通过计算新对象与每个先前示例之间的距离来实现此目的。上面最接近的示例标记为“Winter”。 KNN中的k只是算法考虑的最接近示例的数量。在k = 3的情况下,它会计算三个最接近的示例。在上面的图表中,该算法将对Spring投2票,对Winter投1票-因此结果将变为Spring。

KNN的一个缺点是训练示例数据的数量越大,每次对对象进行分类时,KNN算法需要花费的检查时间就越长。这使得KNN对于大型数据集不太可行,并且是KNN与基于深度学习的方法之间的主要区别。

按颜色分类的对象

e0b72f78-9245-11eb-8b86-12bb97331649.png

在我们的颜色分类器示例中,来自颜色传感器的三个输入。每个对象的示例颜色可被视为位于R、G和B轴上的三维空间中的点。像往常一样,KNN算法通过检查输入与先前看到的示例的接近程度来猜测对象,但是由于这次有3个输入,因此必须计算三维空间中的距离。数据的维数越多,计算分类结果的工作就越多。

进一步的想法

这只是对KNN可能实现的快速了解。我们可以在库示例中找到一个有关电路板方向的示例,以及一个可以继续使用的简单示例。你也可以将BLE Sense板上的任何传感器用作输入,甚至可以将KNN与其他ML技术结合使用。

当然,还有其他可用于Arduino的机器学习资源,包括TensorFlow Lite教程以及专业工具(如Edge Impulse和Qeexo)的支持。在接下来我们将更多的在Arduino上探索机器学习。

原文标题:使用Arduino KNN进行简单的机器学习

文章出处:【微信公众号:FPGA入门到精通】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2573

    文章

    54358

    浏览量

    785767
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136215
  • Arduino
    +关注

    关注

    190

    文章

    6514

    浏览量

    195904

原文标题:使用Arduino KNN进行简单的机器学习

文章出处:【微信号:xiaojiaoyafpga,微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Altium Designer集成如何进行离散编辑

    集成是一个原理图库和PCB封装对应好封装的一个集合,集成的方便就是可以直接调用,但是往往我们需要对封装添加或者修改,集成
    的头像 发表于 10-16 11:06 641次阅读
    Altium Designer集成<b class='flag-5'>库</b>如何<b class='flag-5'>进行</b>离散编辑

    Arduino Uno l两轮自平衡机器人 电机驱动无输出求解

    Arduino Uno l两轮自平衡机器人 电机驱动无输出求解
    发表于 10-15 06:36

    芯科科技Arduino开发资源重大更新

    Silicon Labs (芯科科技)近期于在线技术社群中发布了面向Arduino Core和Matter的重大更新,带来了两个关键突破:全面支持Matter 1.4标准,以及人工智能和机器
    的头像 发表于 08-20 15:51 609次阅读

    【嘉楠堪智K230开发板试用体验】K230机器视觉相关功能体验

    画图 机器学习模型在通过摄像头获取图像后,经过处理输入后,在输出环节通常还需要进行后处理,例如图像检测应用中,目标位置的框选等。 在K230中提供了画图的功能,可以实现画线段、画矩形、画圆、画箭头
    发表于 07-08 17:25

    使用MATLAB进行无监督学习

    无监督学习是一种根据未标注数据进行推断的机器学习方法。无监督学习旨在识别数据中隐藏的模式和关系,无需任何监督或关于结果的先验知识。
    的头像 发表于 05-16 14:48 1160次阅读
    使用MATLAB<b class='flag-5'>进行</b>无监督<b class='flag-5'>学习</b>

    《ESP32S3 Arduino开发指南》第二章 Arduino基础知识

    的发展,在Arduino出现以前,虽然也有很多公司在推广一些简单易用的可编程控制器,但是由于开发平台种类繁多,而且使用这些控制器基本上都需要对电子技术、数字逻辑、寄存器等内容进行多方面的了解和
    发表于 05-13 09:28

    开源项目!基于Arduino控制的六足机器

    步骤,完整复现这款低成本、高性能的六足机器人。开发过程中建议使用支架辅助调试,避免足部意外触地。如需进一步优化步态或扩展功能,可基于提供的Arduino代码进行二次开发。 其他代码资料:*附件:
    发表于 03-03 11:25

    机器学习模型市场前景如何

    当今,随着算法的不断优化、数据量的爆炸式增长以及计算能力的飞速提升,机器学习模型的市场前景愈发广阔。下面,AI部落小编将探讨机器学习模型市场的未来发展。
    的头像 发表于 02-13 09:39 617次阅读

    嵌入式机器学习的应用特性与软件开发环境

    作者:DigiKey Editor 在许多嵌入式系统中,必须采用嵌入式机器学习(Embedded Machine Learning)技术,这是指将机器学习模型部署在资源受限的设备(如微
    的头像 发表于 01-25 17:05 1201次阅读
    嵌入式<b class='flag-5'>机器</b><b class='flag-5'>学习</b>的应用特性与软件开发环境

    深度学习入门:简单神经网络的构建与实现

    深度学习中,神经网络是核心模型。今天我们用 Python 和 NumPy 构建一个简单的神经网络。 神经网络由多个神经元组成,神经元之间通过权重连接。我们构建一个包含输入层、隐藏层和输出层的简单
    的头像 发表于 01-23 13:52 838次阅读

    传统机器学习方法和应用指导

    用于开发生物学数据的机器学习方法。尽管深度学习(一般指神经网络算法)是一个强大的工具,目前也非常流行,但它的应用领域仍然有限。与深度学习相比,传统方法在给定问题上的开发和测试速度更快。
    的头像 发表于 12-30 09:16 1967次阅读
    传统<b class='flag-5'>机器</b><b class='flag-5'>学习</b>方法和应用指导

    如何选择云原生机器学习平台

    当今,云原生机器学习平台因其弹性扩展、高效部署、低成本运营等优势,逐渐成为企业构建和部署机器学习应用的首选。然而,市场上的云原生机器
    的头像 发表于 12-25 11:54 695次阅读

    zeta在机器学习中的应用 zeta的优缺点分析

    在探讨ZETA在机器学习中的应用以及ZETA的优缺点时,需要明确的是,ZETA一词在不同领域可能有不同的含义和应用。以下是根据不同领域的ZETA进行的分析: 一、ZETA在机器
    的头像 发表于 12-20 09:11 1615次阅读

    cmp在机器学习中的作用 如何使用cmp进行数据对比

    机器学习领域,"cmp"这个术语可能并不是一个常见的术语,它可能是指"比较"(comparison)的缩写。 比较在机器学习中的作用 模型评估 :比较不同模型的性能是
    的头像 发表于 12-17 09:35 1315次阅读

    如何使用cmp进行数据库管理的技巧

    使用 cmp 命令进行数据库管理可能不是最直观的方法,因为 cmp 通常用于比较两个文件是否相同。然而,如果你的意图是使用 cmp 来检查数据文件或备份文件的一致性,以下是一些技巧和步骤,可以帮助
    的头像 发表于 12-17 09:31 961次阅读