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

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

    关注

    2577

    文章

    55460

    浏览量

    793780
  • 机器学习
    +关注

    关注

    67

    文章

    8561

    浏览量

    137208
  • Arduino
    +关注

    关注

    190

    文章

    6527

    浏览量

    197431

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    机器学习特征工程:分类变量的数值化处理方法

    编码是机器学习流程里最容易被低估的环节之一,模型没办法直接处理文本形式的分类数据,尺寸(Small/Medium/Large)、颜色(Red/Blue/Green)、城市、支付方式等都是典型的分类
    的头像 发表于 02-10 15:58 443次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>特征工程:分类变量的数值化处理方法

    机器学习和深度学习中需避免的 7 个常见错误与局限性

    无论你是刚入门还是已经从事人工智能模型相关工作一段时间,机器学习和深度学习中都存在一些我们需要时刻关注并铭记的常见错误。如果对这些错误置之不理,日后可能会引发诸多麻烦!只要我们密切关注数据、模型架构
    的头像 发表于 01-07 15:37 342次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>和深度<b class='flag-5'>学习</b>中需避免的 7 个常见错误与局限性

    如何深度学习机器视觉的应用场景

    深度学习视觉应用场景大全 工业制造领域 复杂缺陷检测:处理传统算法难以描述的非标准化缺陷模式 非标产品分类:对形状、颜色、纹理多变的产品进行智能分类 外观质量评估:基于学习的外观质量标准判定 精密
    的头像 发表于 11-27 10:19 319次阅读

    自制巡线解迷宫机器人(上)

    Arduino语法的静态链接,取名为RVStarArduino,这样不仅我可以将自己之前基于Arduino所做的机器人项目中的一些代码无缝地移植过来,从而大大提高了项目的开发效率,还
    发表于 10-20 10:39

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

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

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

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

    XKCON祥控输煤皮带智能机器人巡检系统对监测数据进行挖掘分析

    XKCON祥控输煤皮带智能机器人巡检系统通过智能机器人在皮带运行过程中对皮带的运行状态和环境状况进行实时检测,在应用过程中,不但提升了巡视周期频次,还通过大数据分析和深度学习算法,对监
    的头像 发表于 09-15 11:22 763次阅读
    XKCON祥控输煤皮带智能<b class='flag-5'>机器</b>人巡检系统对监测数据<b class='flag-5'>进行</b>挖掘分析

    如何在机器视觉中部署深度学习神经网络

    图 1:基于深度学习的目标检测可定位已训练的目标类别,并通过矩形框(边界框)对其进行标识。 在讨论人工智能(AI)或深度学习时,经常会出现“神经网络”、“黑箱”、“标注”等术语。这些概念对非专业
    的头像 发表于 09-10 17:38 1042次阅读
    如何在<b class='flag-5'>机器</b>视觉中部署深度<b class='flag-5'>学习</b>神经网络

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

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

    FPGA在机器学习中的具体应用

    随着机器学习和人工智能技术的迅猛发展,传统的中央处理单元(CPU)和图形处理单元(GPU)已经无法满足高效处理大规模数据和复杂模型的需求。FPGA(现场可编程门阵列)作为一种灵活且高效的硬件加速平台
    的头像 发表于 07-16 15:34 3079次阅读

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

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

    免费分享Arduino入门+进阶(全套例程+书籍)

    创意,比如控制灯光、传感器、电机等。以下是Arduino入门+进阶学习资料1.Arduino编程语言说明(相关文件可在下文扫码领取)2.Arduino系列
    的头像 发表于 05-22 11:40 1303次阅读
    免费分享<b class='flag-5'>Arduino</b>入门+进阶(全套例程+书籍)

    使用MATLAB进行无监督学习

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

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

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

    【「# ROS 2智能机器人开发实践」阅读体验】+ROS2应用案例

    的应用。书中详细介绍了如何在ROS 2中实现二维码识别,包括二维码扫描Zbar的使用,以及如何通过相机识别二维码。 通过学习这一部分,我了解到二维码识别的基本原理和实现步骤。首先,需要通过相机获取环境图像
    发表于 04-27 11:42