除了像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
-
傳感器
+關注
關注
2550文章
51046瀏覽量
753135 -
機器學習
+關注
關注
66文章
8408瀏覽量
132575 -
Arduino
+關注
關注
188文章
6469瀏覽量
186968
原文標題:使用Arduino KNN進行簡單的機器學習
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論