除了像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);
颜色样本的红色,绿色和蓝色级别也通过串口输出:
程序为每个对象获取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算法通过比较对象与先前看到的示例的接近程度来对对象进行分类。下面是一个示例图表,其中包含平均每日温度和湿度数据点。每个示例都标有一个季节:
为了对新对象(图表上的“?”)进行分类,KNN分类器将查找它所看到的最相似的先前示例。由于在我们的示例中有两个输入,因此算法通过计算新对象与每个先前示例之间的距离来实现此目的。上面最接近的示例标记为“Winter”。 KNN中的k只是算法考虑的最接近示例的数量。在k = 3的情况下,它会计算三个最接近的示例。在上面的图表中,该算法将对Spring投2票,对Winter投1票-因此结果将变为Spring。
KNN的一个缺点是训练示例数据的数量越大,每次对对象进行分类时,KNN算法需要花费的检查时间就越长。这使得KNN对于大型数据集不太可行,并且是KNN与基于深度学习的方法之间的主要区别。
按颜色分类的对象
在我们的颜色分类器示例中,来自颜色传感器的三个输入。每个对象的示例颜色可被视为位于R、G和B轴上的三维空间中的点。像往常一样,KNN算法通过检查输入与先前看到的示例的接近程度来猜测对象,但是由于这次有3个输入,因此必须计算三维空间中的距离。数据的维数越多,计算分类结果的工作就越多。
进一步的想法
这只是对KNN可能实现的快速了解。我们可以在库示例中找到一个有关电路板方向的示例,以及一个可以继续使用的简单示例。你也可以将BLE Sense板上的任何传感器用作输入,甚至可以将KNN与其他ML技术结合使用。
当然,还有其他可用于Arduino的机器学习资源,包括TensorFlow Lite教程以及专业工具(如Edge Impulse和Qeexo)的支持。在接下来我们将更多的在Arduino上探索机器学习。
原文标题:使用Arduino KNN进行简单的机器学习
文章出处:【微信公众号:FPGA入门到精通】欢迎添加关注!文章转载请注明出处。
责任编辑:haq
全部0条评论
快来发表一下你的评论吧 !