除了像TensorFlow for Arduino這樣強(qiáng)大的深度學(xué)習(xí)架構(gòu)外,還有一些經(jīng)典的ML方法適用于嵌入式設(shè)備上的較小數(shù)據(jù)集,這些方法有用且易于理解-最簡(jiǎn)單的方法之一就是KNN。
KNN的一個(gè)優(yōu)勢(shì)在于,一旦Arduino獲得了一些示例數(shù)據(jù),就可以立即對(duì)其進(jìn)行分類。我們已經(jīng)發(fā)布了一個(gè)新的Arduino庫,可以快速輕松地將KNN導(dǎo)入在程序中,且無需進(jìn)行設(shè)備外培訓(xùn)或其他工具。
在本文中,我們將使用顏色分類器示例來介紹KNN。之前在深度學(xué)習(xí)中我們展示過相同的應(yīng)用程序,相比之下,KNN是一種更快、更輕量的方法,但無法擴(kuò)展到更大,更復(fù)雜的數(shù)據(jù)集。
顏色分類示例
在本教程中,我們將介紹如何使用Arduino Nano 33 BLE Sense上的Arduino_KNN庫按顏色對(duì)其對(duì)象進(jìn)行分類。
在進(jìn)行配置時(shí)我們將需要進(jìn)行以下準(zhǔn)備:
Arduino Nano 33 BLESense開發(fā)板
MicroUSB數(shù)據(jù)線
打開Arduino IDE或Arduino Create的云端編譯器
安裝Arduino_KNN庫
從文件》示例》 Arduino_KNN中選擇ColorClassifier
編譯程序并上傳到您的Arduino開發(fā)板
Arduino_KNN庫
該示例使用了Arduino_KNN庫,該庫提供了一個(gè)簡(jiǎn)單的界面,可在我們自己的程序中使用KNN:
#include 《Arduino_KNN.h》 // Create a new KNNClassifierKNNClassifier myKNN(INPUTS);
在本示例中,INPUTS = 3 用來表示顏色傳感器的R、G和B值。
采樣對(duì)象顏色
當(dāng)打開串行監(jiān)視器時(shí)會(huì)看到以下消息:
Arduino KNN color classifierShow me an example Apple
Arduino開發(fā)板已準(zhǔn)備好采樣對(duì)象顏色。如果你沒有蘋果,梨或者橙子,則可能需要通過編輯程序來放置不同的標(biāo)簽。顏色傳感器最好在光線充足的房間中處理粗糙,無光澤的物體,并且每個(gè)類別都必須具有不同的顏色?。伾珎鞲衅鞑⒉皇菂^(qū)分橙色和橘子的理想選擇,但是它可以檢測(cè)到橙子的成熟程度。如果要按形狀對(duì)物體進(jìn)行分類,則可以始終使用相機(jī)。)
當(dāng)Arduino開發(fā)板靠近對(duì)象時(shí),它將對(duì)顏色進(jìn)行采樣并將其添加到KNN示例中,并帶有標(biāo)記對(duì)象所屬類的數(shù)字(即代表蘋果,橙子或梨的數(shù)字0、1或2)。提供標(biāo)記的示例數(shù)據(jù)的ML技術(shù)也稱為監(jiān)督學(xué)習(xí)。
程序中用于將示例數(shù)據(jù)添加到KNN函數(shù)的代碼如下:
readColor(color); // Add example color to the KNN modelmyKNN.addExample(color, currentClass);
顏色樣本的紅色,綠色和藍(lán)色級(jí)別也通過串口輸出:
程序?yàn)槊總€(gè)對(duì)象獲取30個(gè)顏色樣本??梢韵蚱滹@示一個(gè)對(duì)象,它將對(duì)顏色進(jìn)行30次采樣-本教程不需要30個(gè)蘋果?。ūM管更廣泛的數(shù)據(jù)集將使模型更通用)
分類
通過獲取示例樣品,程序現(xiàn)在將要求猜測(cè)該對(duì)象。該示例的使用與獲取訓(xùn)練數(shù)據(jù)時(shí)是相同的功能讀取顏色傳感器,只是這一次它調(diào)用分類函數(shù),當(dāng)顯示顏色時(shí),它將分類對(duì)象類:
readColor(color); // Classify the object classification = myKNN.classify(color, K);
您可以嘗試向其顯示一個(gè)對(duì)象,然后查看其效果:
Let me guess your object0.44,0.28,0.28You showed me an Apple
注意:這不是100%準(zhǔn)確的,尤其是在物體表面變化或照明條件變化的情況下。我們也可以嘗試使用不同數(shù)量的實(shí)例、k的值以及不同的對(duì)象和環(huán)境,以查看其如何影響結(jié)果。 KNN如何運(yùn)作?盡管Arduino_KNN庫完成了數(shù)學(xué)運(yùn)算,但在為應(yīng)用程序選擇ML算法時(shí),了解ML算法的工作原理很有用。簡(jiǎn)而言之,KNN算法通過比較對(duì)象與先前看到的示例的接近程度來對(duì)對(duì)象進(jìn)行分類。下面是一個(gè)示例圖表,其中包含平均每日溫度和濕度數(shù)據(jù)點(diǎn)。每個(gè)示例都標(biāo)有一個(gè)季節(jié):
為了對(duì)新對(duì)象(圖表上的“?”)進(jìn)行分類,KNN分類器將查找它所看到的最相似的先前示例。由于在我們的示例中有兩個(gè)輸入,因此算法通過計(jì)算新對(duì)象與每個(gè)先前示例之間的距離來實(shí)現(xiàn)此目的。上面最接近的示例標(biāo)記為“Winter”。 KNN中的k只是算法考慮的最接近示例的數(shù)量。在k = 3的情況下,它會(huì)計(jì)算三個(gè)最接近的示例。在上面的圖表中,該算法將對(duì)Spring投2票,對(duì)Winter投1票-因此結(jié)果將變?yōu)镾pring。
KNN的一個(gè)缺點(diǎn)是訓(xùn)練示例數(shù)據(jù)的數(shù)量越大,每次對(duì)對(duì)象進(jìn)行分類時(shí),KNN算法需要花費(fèi)的檢查時(shí)間就越長(zhǎng)。這使得KNN對(duì)于大型數(shù)據(jù)集不太可行,并且是KNN與基于深度學(xué)習(xí)的方法之間的主要區(qū)別。
按顏色分類的對(duì)象
在我們的顏色分類器示例中,來自顏色傳感器的三個(gè)輸入。每個(gè)對(duì)象的示例顏色可被視為位于R、G和B軸上的三維空間中的點(diǎn)。像往常一樣,KNN算法通過檢查輸入與先前看到的示例的接近程度來猜測(cè)對(duì)象,但是由于這次有3個(gè)輸入,因此必須計(jì)算三維空間中的距離。數(shù)據(jù)的維數(shù)越多,計(jì)算分類結(jié)果的工作就越多。
進(jìn)一步的想法
這只是對(duì)KNN可能實(shí)現(xiàn)的快速了解。我們可以在庫示例中找到一個(gè)有關(guān)電路板方向的示例,以及一個(gè)可以繼續(xù)使用的簡(jiǎn)單示例。你也可以將BLE Sense板上的任何傳感器用作輸入,甚至可以將KNN與其他ML技術(shù)結(jié)合使用。
當(dāng)然,還有其他可用于Arduino的機(jī)器學(xué)習(xí)資源,包括TensorFlow Lite教程以及專業(yè)工具(如Edge Impulse和Qeexo)的支持。在接下來我們將更多的在Arduino上探索機(jī)器學(xué)習(xí)。
原文標(biāo)題:使用Arduino KNN進(jìn)行簡(jiǎn)單的機(jī)器學(xué)習(xí)
文章出處:【微信公眾號(hào):FPGA入門到精通】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
傳感器
+關(guān)注
關(guān)注
2545文章
50459瀏覽量
751104 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8353瀏覽量
132315 -
Arduino
+關(guān)注
關(guān)注
187文章
6458瀏覽量
186504
原文標(biāo)題:使用Arduino KNN進(jìn)行簡(jiǎn)單的機(jī)器學(xué)習(xí)
文章出處:【微信號(hào):xiaojiaoyafpga,微信公眾號(hào):電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論