机器学习(ML)算法有各种形式和大小,每种都有自己的优缺点。我们将通过Arduino KNN库继续探索TinyML(嵌入式机器学习)。
除了Arduino的TensorFlow除了强大的深度学习框架外,还有一些适合嵌入式设备上小数据集的经典ML它们非常有用和容易理解——最简单的方法之一是KNN。
KNN只要Arduino有了一些示例数据,可以立即分类!现在发布了一个新的Arduino这样你就可以在你的例子中快速而轻松地包含它KNN,不需要使用其他设备或工具进行训练。
本文将使用颜色分类器示例来理解KNN。相比之下,我们已经展示了深度学习的相同应用,KNN这是一种更快、更轻的方法,但它不能很好地扩展到更大、更复杂的数据集。
颜色分类示例程序
在本教程中,我们将演示如何使用它Arduino Nano 33 BLE Sense上的Arduino_KNN库根据颜色对象进行分类。
演示学习需要以下步骤:
- Arduino Nano 33 BLE Sense 开发板
- Micro USB数据线
- 打开Arduino IDE或Arduino Create 软件开发平台
- 安装Arduino_KNN库
- 从文件> 示例> Arduino_KNN中选择ColorClassifier
- 编译此示例并上传到您身上Arduino板上
Arduino_KNN库
使用了示例草图Arduino_KNN图书馆。图书馆为您自己的程序提供了一个简单的接口KNN:
#include <Arduino_KNN.h> // Create a new KNNClassifier KNNClassifier myKNN(INPUTS);
抽样对象的颜色
当你打开Arduino您应该看到以下信息:
Arduino KNN颜色分类器以苹果为例
Arduino板材已准备好采样物体的颜色。如果你手头没有苹果、梨和橘子,你可能需要修改程序来输入不同的颜色标签。请记住,在光线好的房间里,颜色传感器是最好的哑光。非闪光物体需要与每个类别有明显的颜色区别!(这种颜色传感器不能很好地区分橙子和橙子——但它可以检测橙子的成熟度。如果你想根据形状对物体进行分类,你通常可以使用相机。)
当您将Arduino板靠近目标时,它会采样颜色,并将其与标记对象所属类的数字(即数字0、1或2代表苹果、橘子或梨)一起添加到KNN示例中。提供标记示例数据ML技术又称监督学习。
添加示例数据KNN函数的示意图代码如下:
readColor
红、绿、蓝色样品标准也将连续输出:
这个示例程序为每个对象类选择30个颜色样本。你可以向它展示一个对象,它会采样30次颜色——在这个教程中你不需要30个苹果!(虽然更广泛的数据集会使模型更广泛。
分类
使用简单的采样使您的程序可以用来识别和猜测目标。示例程序使用获取训练数据时使用的相同函数来读取颜色传感器——但此次调用classification函数,当你显示颜色时,它会猜测对象类别:
readColor
你可以试着向它展示一个对象,看看它猜测对象是什么:
让我猜猜你是什么。
0.44,0.28,0.28
识别结果:你现在展示的是苹果。
注:它不是100%准确,特别是当物体表面或照明条件发生变化时。您可以使用不同数量的示例k值以及不同的对象和环境进行试验,以了解这将如何影响识别的结果。
KNN如何工作?
虽然Arduino_KNN库为您完成了计算,但在选择应用程序时ML理解算法ML算法的工作方法非常有用。简而言之,KNN该算法通过比较对象与之前看到的例子之间的距离来分类对象。这里有一个包含日均温度和湿度数据点的示例图。每个例子都标有一个季节:
对图表上的新对象进行分类( ?)KNN分类器会找到它以前见过的最相似的例子。由于我们的示例中有两个输入,算法通过计算新对象与前一个示例之间的距离来实现这一点。你可以看到上面最接近的例子被标记为冬天。
KNNk只是算法中最接近的例子。k=3.计算三个最接近的例子。在上图中,算法春天两票,给冬天一票——所以结果会变成春天。
KNN缺点之一是训练样本数据越多,KNN每次对象进行分类时,算法需要检查的时间越长。KNN降低大数据集的可行性也是如此KNN与基于深度学习的方法主要不同。
物体按颜色分类
在我们的颜色分类器示例中,有三个输入来自颜色传感器。每个对象的示例颜色可以看作是三维空间中位于红色、绿色和蓝色轴上的点。和往常一样,KNN算法通过检查输入与前面看到的示例的距离来猜测对象,但是由于这次有三个输入,它必须计算三维空间中的距离。数据的维数越多,计算分类结果的工作量就越大。
未来构想
这只是KNN可能的快速体验。您将在图书馆示例中找到面向开发板的示例和用于构建的简单示例。您可以使用它BLE Sense板上的任何传感器甚至可以作为输入KNN与其他ML结合技术使用。
当然,Arduino还有其他可用的机器学习资源,包括TensorFlow Lite教程以及Edge Impulse和Qeexo支持其他专业工具。未来将邀请更多专家Arduino进一步探索机器学习。