50x per seconde met TinyML bepalen of de camera een Hond of Beer voor zich heeft staan… proefopstelling met Raspberry 4

13 januari 2022

Machine Learning en TinyML wordt steeds beter toegankelijk, ook voor embedded computing zoals een Arduino of Raspberry. Om zelf de proef op de som te nemen heb ik een testopstelling gemaakt waarin ik binnen een uur een werkend machine learning model in Python ontwikkeld heb welke met 95% zekerheid kan zeggen of de camera een hond of een beer voor zich heeft staan.

Praktische toepassingen voor dit soort TinyML zijn het meten en herkennen van productiefouten met behulp van visual inspection, het monitoren van indicatoren voor predictive maintenance met accelerator- en motionsensors op draaiende assen of bewegende onderdelen, en opgevangen geluid middels keyword spotting met behulp van audio-analysis. Doorgaans zijn deze gebaseerd op stand-alone en low-power omgevingen zoals STM, Raspberry, Arduino en NVIDIA Jetson. Precies de platforms waarin ik mijn meeste prototypen ontwikkel.

Met EdgeImpulse als ondersteuningstool is het mogelijk om zelf een machine learning model samen te stellen – van data acquisitie, verwerking, modellering, training tot en met deployment. Geluid, beweging of beeld kan vanuit verschillende devices verzameld worden. Vervolgens classificeer je de verzamelde data, modelleer je het layermodel, en finetune je de parameters voor de gekozen layers. Ten slotte train je het model en analyseer je de nauwkeurigheid.

Zo heb ik voor deze proefopstelling 30 images van zowel de hond als de beer geclassificeerd en blijk ik na het operationeel stellen van mijn model op de Raspberry in staat binnen 20 milliseconde (50x per seconde) te kunnen bepalen welk object zich voor de camera bevindt. Dit, gekoppeld aan interactie met de GPIO poorten, opent een scala aan mogelijkheden voor het aansturen van relais, motoren, actuator en displays. Mijn TinyML ‘Beer of Hond’-applicatie draait stand-alone op een Raspberry 4 B. Wanneer mijn bestelde Arduino Portenta H7 met Vision Shield binnen is, ga ik ondervinden of ik daarmee een soortgelijke performance in C++ kan halen. Wordt vervolgd.