AI TouchGFX Demo

AI/TouchGFX/FreeRTOS Demo mit dem STM32F429 Discovery Board


Was wird hier gezeigt?


Dieses Programm zeigt die Anwendung eines AI Models zur Erkennung von handschriftlichen Ziffern (0-9) und Großbuchstaben (A-Z). Hierzu wird das vortrainierte MNIST Modell aus dem Modelzoo von ST  verwendet. Ich fand dieses Beispiel für eine Embedded AI relativ anschaulich, so daß ich es hier als kleine Demonstration oder auch zur Inspiration vorstellen möchte.


Das Programm ermöglicht es, handschriftliche Ziffern (0-9) und Großbuchstaben (A-Z) über ein AI Modell zu erkennen. Über ein Terminal wird der Input in die KI sowie die wahrscheinlichsten 3 Ergebnisse ausgegeben. Eine Weitergabe des Programms ist leider aus rechtlichen Gründen nicht möglich. Weiter unten befindet sich ein kurzes Video, welches die Funktionsweise des Programms demonstriert.
 
Hier ist die Ausgabe über das Terminal zu sehen.

Die 28x28 Input Matrix wird dargestellt und zeigt eine '4'.
Die '4' wird von der KI richtig erkannt und mit einer Wahrscheinlichkeit von 0.97 bewertet.

Weiter unten ist die Ausgabe der 3 wahrscheinlichsten Ergebnisse zu sehen.

Man sieht hier, dass die nächste, weit geringere Wahrscheinlichkeit für ein 'H' spricht.

Die Verarbeitungszeit (Modell Eingabe + Modell Verarbeitung + Modell Ausgabe) beträgt ca. 75ms.
Der Prozessor wird mit einer Taktfrequenz von 168 MHz betrieben.

Die Hauptlast der Berechnungen besteht aus ca. 1.000.000 macc Operationen.
Der Resourcenverbrauch des Modells ist erstaunlich gering.

Für die Parameter werden ca. 40 kByte Flash benötigt.

Die Verarbeitung und die Ein/Ausgangsbuffer benötigen nur ca. 30 kByte Ram.
Nachfolgend ein kleines Video zur Funktionsweise.

Weiter unten befindet sich noch eine etwas detalliertere Erklärung der technischen Zusammenhänge.

Das Programm läuft über RTOS mit 2 Threads - TouchGFX und Main Thread.


Über TouchGFX wird das große und kleine Canvas gezeichnet und gleichzeitig die Werte ins AI Array übertragen.


Wenn der Estimate Button gedrückt ist, wird, getriggert über den Main Thread das AI Input Array in den AI Input Buffer übertragen und dabei an das Modell angepasst. Danach startet der AI Prozess.


Der Ergebnis Tensor wird in die 36 ASCII Zeichen umgewandelt und  das wahrscheinlichste Ergebnis auf das Display übertragen.


Die Eingangsmatrix sowie die 3 wahrscheinlichsten Ergebnisse nebst Prozesszeit werden über USB Terminal mit 115000 Baud ausgegeben.




© 2024 Copyright Peter Groll