Op gebied van Machine Learning en AI is er de laatste tijd veel gebeurd. Waar ML vroeger enkel gebruikt kon worden op grotere computers met veel rekenkracht is er nu een hele evolutie begonnen die Machine Learning en AI mogelijk maakt op microcontrollers. We spreken dan van TinyML.
Meestal is het nog nodig om vooraf je model (dat is je getrainde algoritme) te maken op een computer en het dan op je microcontroller te installeren, maar nu een microcontroller in staat is om zelfstandig een ML-model te kunnen draaien ontstaan er heel wat nieuwe boeiende mogelijkheden. Hieronder worden al enkele mogelijkheden verkend.
Hoe werkt KNN?
KNN staat voor 'k-nearest neighbours algoritme'. Dat is een algoritme dat op basis van gegevens gaat oordelen in welke 'klasse' iets thuishoort. Hiernaast zie je een grafiek waarin enkele dagmetingen geplaatst werden op basis van vochtigheid en temperatuur. Eerst werd een reeks voorbeelden ingegeven met het bijhorende seizoen. Wanneer nu nieuwe gegevens worden ingevoerd komt er een nieuw datapunt in de grafiek. Het KNN algortitme gaat kijken naar een aantal (k) punten die het dichtst bij het nieuwe punt liggen in de grafiek. Wanneer k=3 dan wordt dus naar de 3 punten vlakbij gekeken. In dit geval is dat 2 x lente en 1 x winter, waarna het algoritme het punt als 'lente' zal beoordelen.
De grafiek daaronder komt erg overeen met onze situatie. Elke meting bevat 3 waarden (hier R, G en B de drie kleuren van de kleurensensor).
Eerst moeten enkele klassen aangemaakt worden. In ons voorbeeld zijn dat 'Appel', 'Citroen' en 'Sinaasappel'. Nadien zal je enkele voorbeelden moeten geven voor de verschillende klassen. Je Arduino zal dan bij elk voorbeeld gaan kijken welke waarden de kleurensensor doorgeeft voor rood, groen en blauw.
Aaangezien we nu drie waarden (kleuren) hebben, krijgen we in onze grafiek drie assen en krijgen alle metingen een plaats.
Die plaatsen (en hun waarden) van de voorbeelden worden opgeslagen in het geheugen. De 'k' van KNN is het aantal voorbeelden waarmee je programma zal gaan vergelijken. Wanneer k bijvoorbeeld 3 is, dan zal het naar de 3 voorbeelden kijken die het meest overeen komen met de nieuwe gegevens. Op basis daarvan zal het algoritme aangeven welk stuk fruit er getoond werd. Dit is bijna letterlijk het voorbeeld op de Arduino-site dat gebruikt wordt om KNN uit te leggen. Ga zeker ook eens op die pagina kijken want het idee achter KNN wordt er erg goed uitgelegd. Omdat het idee relatief eenvoudig is, is het een perfecte eerste stap in de wereld van ML.
Het algoritme zo eenvoudig dat we het trainen van het algoritme via onze Arduino kunnen doen. Bij complexere algoritmes zullen we de training op een computer moeten doen, en het 'model' dat is het getrainde algoritme nadien op onze Arduino downloaden.
De Libraries: we gebruiken hiervoor de Arduino_KNN (KNN-algoritme) en Arduino_APDS9960 (registreren van kleuren) libraries.
De code: hiervoor gebruiken we de voorbeeldcode ColorClassifier van de Arduino_KNN library.
In void setup zie je het deel van de code waar je model getraind wordt, in de readColor functie zie je hoe het model gaat kijken naar de kleuren en de waarden van een kleur toont in de Serial Monitor, in void loop zie je hoe een beoordeling van een nieuw stuk fruit gebeurt door naar de doorgegeven waarden (kleuren) van de readColor functie te kijken en op basis daarvan te gaan klasseren door het te vergelijken met de eerder ingegeven voorbeelden.
Je kan de code meteen naar je Arduino sturen en de Serial Monitor openen. Er wordt dan gevraagd om de verschillende stukken fruit te tonen. Wanneer we genoeg voorbeelden verzameld hebben (in dit voorbeeld 30) zal de Serial monitor aangeven dat we kunnen beginnen testen. Wanneer we nu een nieuw stuk fruit tonen, dan zal onze Arduino gaan kijken naar de 5 dichtstbijliggende voorbeelden (K is hier 5), om op basis daarvan het stuk fruit te gaan klasseren.
Natuurlijk kan je hier ook heel andere data gaan gebruiken dan de kleurensensor.