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

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

    关注

    2525

    文章

    48137

    浏览量

    740292
  • 机器学习
    +关注

    关注

    66

    文章

    8136

    浏览量

    130587
  • Arduino
    +关注

    关注

    184

    文章

    6428

    浏览量

    184873

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

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

收藏 人收藏

    评论

    相关推荐

    esp8266microPython如何调用Arduino

    esp8266microPython如何简单的调用Arduino,本人C++不是太熟练,想把ATmega328p的一个LCD屏驱动移植到esp8266 microPython 上,不知如何实现
    发表于 10-30 07:42

    Arduino教学机器人的使用教程

    本文档的主要内容详细介绍的是Arduino教学机器人的使用教程
    发表于 09-27 06:53

    机器学习有哪些算法?机器学习分类算法有哪些?机器学习预判有哪些算法?

    机器学习有哪些算法?机器学习分类算法有哪些?机器学习预判有哪些算法?
    的头像 发表于 08-17 16:30 1413次阅读

    机器学习算法入门 机器学习算法介绍 机器学习算法对比

    机器学习算法入门 机器学习算法介绍 机器学习算法对比 机器
    的头像 发表于 08-17 16:27 634次阅读

    基于Arduino机器学习开发

    本项目采用的开发板是Arduino Nano 33 ble Sense,模型训练平台为SensiML或者Edge Impulse。对于SensiML,模型部署平台为VS Code和PlatformIO;对于Edge Impulse,模型部署平台为Arduino IDE。
    的头像 发表于 08-11 11:06 886次阅读
    基于<b class='flag-5'>Arduino</b>的<b class='flag-5'>机器</b><b class='flag-5'>学习</b>开发

    如何使用Arm CMSIS-DSP实现经典机器学习

    通常,当开发人员谈论机器学习(ML)时,他们指的是神经网络(nn)。 神经网络的巨大优势在于,你不需要成为一个领域专家,而且可以迅速找到一个可行的解决方案。神经网络的缺点是它们通常需要无数的记忆
    发表于 08-02 07:12

    力感电阻(FSR)Arduino简单教程

    电子发烧友网站提供《力感电阻(FSR)Arduino简单教程.zip》资料免费下载
    发表于 07-06 15:10 0次下载
    力感电阻(FSR)<b class='flag-5'>Arduino</b><b class='flag-5'>简单</b>教程

    使用Arduino简单追逐者

    电子发烧友网站提供《使用Arduino简单追逐者.zip》资料免费下载
    发表于 07-05 10:26 0次下载
    使用<b class='flag-5'>Arduino</b>的<b class='flag-5'>简单</b>追逐者

    使用机器学习进行预测

    电子发烧友网站提供《使用机器学习进行预测.zip》资料免费下载
    发表于 07-04 10:22 0次下载
    使用<b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>进行</b>预测

    基于Arduino和超声波传感器构建一个简单的油箱液位指示器电路

    在这篇文章中,我们将学习如何使用 Arduino 和超声波传感器构建一个简单的油箱液位指示器电路。
    的头像 发表于 06-27 18:14 815次阅读
    基于<b class='flag-5'>Arduino</b>和超声波传感器构建一个<b class='flag-5'>简单</b>的油箱液位指示器电路

    使用Arduino制作简单的数字时钟

    电子发烧友网站提供《使用Arduino制作简单的数字时钟.zip》资料免费下载
    发表于 06-26 10:48 5次下载
    使用<b class='flag-5'>Arduino</b>制作<b class='flag-5'>简单</b>的数字时钟

    iMX8M Plus将机器学习添加到Yocto精简固件映像?

    我想知道conf/local.conf有什么必要的修改,以便添加机器学习和其他东西,以便在板上部署 AI 功能而不需要 bitbaking imx-image-full,请问?换句话说,我希望固件
    发表于 06-07 06:16

    机器学习理论:k近邻算法

    KNN(k-Nearest Neighbors)思想简单,应用的数学知识几乎为0,所以作为机器学习的入门非常实用、可以解释机器
    的头像 发表于 06-06 11:15 435次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>理论:k近邻算法

    【沁恒 CH32V208 开发板免费试用】RTT 模拟Arduino开发项目

    将介绍如何使用RT-thread实时操作系统和Arduino在沁恒 CH32V208开发板上进行开发。 概述 沁恒 CH32V208是一款基于RISC-V内核的微控制器,支持RT-thread实时
    发表于 05-24 20:31

    如何制作一个简单的2步Arduino可编程定时器电路

    在本文中,我们将学习如何制作一个简单的2 步 Arduino 可编程定时器电路,该电路可用于通过独立可调的 ON 和 OFF 时序来切换电气负载的开/关。
    的头像 发表于 05-24 17:04 1438次阅读
    如何制作一个<b class='flag-5'>简单</b>的2步<b class='flag-5'>Arduino</b>可编程定时器电路