Forum: Projekte & Code Neuronales Netzwerke auf der "3cent CPU" (Padauk PFS154 und PMS150C)


von Tim  . (cpldcpu)


Lesenswert?

Eine Implementierung einer Inferenzengine für den MNIST Datensatz auf 
einer MCU mit 1kword ROM und 64 bytes RAM.

Die Eingangsdaten müssen auf 8x8 skaliert werden. Immerhin werden noch 
>90% Genauigkeit erreicht.

https://github.com/cpldcpu/BitNetPDK

Der Nutzen auf so einem kleinen Mikrocontroller ist natürlich begrenzt, 
zeigt aber wie weit machine-learning Ansätze skalieren können.

von Flip B. (frickelfreak)


Lesenswert?

INteressant. Mich würde mal interessieren, wie die Performance im 
vergleich zu einem klassischen algoritmischen Programm für die gleiche 
Aufgaben ist.

von Tim  . (cpldcpu)


Lesenswert?

Flip B. schrieb:
> INteressant. Mich würde mal interessieren, wie die Performance im
> vergleich zu einem klassischen algoritmischen Programm für die gleiche
> Aufgaben ist.

Das gibt es viele verschiedene Ansätze:
https://en.wikipedia.org/wiki/MNIST_database#Classifiers

Für einen fairen Vergleich müsste man die jetzt mit den gleichen 
Randbedingungen implementieren.

von Bruno V. (bruno_v)


Lesenswert?

Tim  . schrieb:
> Eine Implementierung einer Inferenzengine für den MNIST Datensatz auf
> einer MCU mit 1kword ROM und 64 bytes RAM.

Entschuldige mein völliges Unwissen und die Übersetzung für mich:

Du hast
 * einen Handschrift-Datensatz 
(https://en.wikipedia.org/wiki/MNIST_database) genommen
 * nach 8x8 Pixel in Graustufen gerendert
 * damit ein neuronales Netz trainiert
 * das Netz (die Gewichtungen) und die Regeln in den Padauk gestopft
   * + BitBang-Sende-Uart
   * + 4 Test-Beispiel-Daten

Und der Padauk erkennt das "Geschmiere" zu 90% richtig? D.h. prinzipiell 
reicht der aus, um eine handgeschrieben Zahl zu erkennen, die ihm 
irgendwie übermittelt wird (abgesehen vom zusätzlich notwendigen RAM)?

Ich bin wirklich beeindruckt.

von Tim  . (cpldcpu)


Lesenswert?

Bruno V. schrieb:
> Und der Padauk erkennt das "Geschmiere" zu 90% richtig? D.h. prinzipiell
> reicht der aus, um eine handgeschrieben Zahl zu erkennen, die ihm
> irgendwie übermittelt wird (abgesehen vom zusätzlich notwendigen RAM)?

Genau. Die UART-Routinen passen nur in den PFS154, der PMS150C kommt 
ohne Ausgabe aus.

Der MNIST-Datensatz ist ziemlich bekannt, da er der ersten relevanten 
Anwendung zu Grunde lag, bei der Machine-Learning für die 
Klassifizierung von Bildern genutzt wurde:

https://en.wikipedia.org/wiki/LeNet

von Vanye R. (vanye_rijan)


Lesenswert?

Koennte man damit eigentlich auch eine ADC-Messung mit sagen wir mal 
50-100Messwerten mache und dann darin irgendein Muster finden? Sagen wir 
mal das Maximum nach einem Minimum oder irgendsowas schlichtes? Oder ist 
der dafuer schon zu klein?

Vanye

von Bruno V. (bruno_v)


Lesenswert?

Vanye R. schrieb:
> Koennte man damit eigentlich auch eine ADC-Messung mit sagen wir mal
> 50-100Messwerten mache und dann darin irgendein Muster finden? Sagen wir
> mal das Maximum nach einem Minimum oder irgendsowas schlichtes? Oder ist
> der dafuer schon zu klein?

Bei 64 Byte RAM sollten die Daten schon als Stream vorliegen ;-)

Ohne das Projekt des TOs zu relativieren (das ist genial), hier was 
komplett anderes mit einem vergleichbaren Prozessor:

https://www.dos4ever.com/uscope/uscope_e.html

von Vanye R. (vanye_rijan)


Lesenswert?

> Bei 64 Byte RAM sollten die Daten schon als Stream vorliegen ;-)

Okay okay.... :-)
Aber es muss ja nicht immer so ganz minimal sein.
Also sagen wir mal so ein kleiner STM32xxx mit 128k flash und 32k
ram wie man sie heute zu dutzenden rumfliegen hat.

Das ist schon ganz interessant sich da mal mit zu beschaeftigen.

Vanye

von Klaus (feelfree)


Lesenswert?

Vanye R. schrieb:
> Aber es muss ja nicht immer so ganz minimal sein.

Mit mehr geht mehr.
Für die Erkennung von Minima/Maxima brauchts aber bestimmt keine 
neuronale Netze.

von Tim  . (cpldcpu)


Lesenswert?

Vanye R. schrieb:
> Koennte man damit eigentlich auch eine ADC-Messung mit sagen wir
> mal
> 50-100Messwerten mache und dann darin irgendein Muster finden? Sagen wir
> mal das Maximum nach einem Minimum oder irgendsowas schlichtes? Oder ist
> der dafuer schon zu klein?

Ja klar. Für Zeitserien würde man aber evtl. auf RNN zurück greifen.
https://en.wikipedia.org/wiki/Recurrent_neural_network

Für einfachere Aufgaben reichen wohl klassische statistische Methoden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.