Maxim kooperiert im Bereich der Wake Word-Erkennung für den AI-Beschleuniger MAX78000 ab sofort mit Aizip – Grund, einen Blick auf die Programmiermöglichkeiten zu werfen.
von Tam Hanna
Der MAX78000 ist in vielerlei Hinsicht eine europäische Variante des Kendryte K210: ein mehrkerniger Mikrocontroller ist mit einer als CNN bezeichneten Hardwareengine kombiniert, die manche neuronale Netzwerk-Aufgaben sehr schnell abarbeitet.
Wichtigstes Verkaufsargument pro MAX78000 ist der sehr geringe Energieverbrauch, was die Pressemeldung nach folgendem Schema an mehrerlei Stelle betont:
1 |
using Aizip’s Visual Wake Words (VWW) model at just 0.7 millijoules (mJ) of energy per inference. This is 100 times lower than conventional software solutions, and the most economical and efficient IoT person-detection solution available. |
Gegen den MAX78000 spricht der vergleichsweise hohe Preis – interessanterweise spricht Maxim in der Pressemeldung von einem 1k-Preis von 8.5USD, der laut einer Preisanalyse mit OEMSecrets allerdings nur als realitätsfern zu bezeichnen ist (siehe Bild).
Andererseits ist der K210 insbesondere in Stückzahlen auch nicht einfach zu bekommen: Wer nicht physikalisch in Shenzhen sitzt, hat beim MAX78000 mit Sicherheit die besseren Chancen.
Welche Hardware gibt es?
Für erste Experimente mit dem MAX78000-Ökosystem bietet Dallas Maxim zwei unterschiedliche Hardwareplattformen an – einerseits das kleine Evaluationsboard MAX78000FTHR (rund 25EUR), das auf dem Adafruit Feather-Format basiert und mit einem seperat zu kaufenden Display auszustatten ist. Kandidat Nummero zwei ist die Vollversion MAX78000EVKIT# (rund 170EUR), die neben einem großen Haupt-Display auch den in der Abbildung gezeigten Energie-Statusmonitor hat. Zudem erlaubt nur sie das Debugging des RISC-V-Koprozessorkerns.
Gegen das große Entwicklungskit – sein Umfang ist unter https://www.youtube.com/watch?v=eRCht0zcFoc im Detail beschrieben – spricht vor allem, dass das physikalisch umfangreiche Kit auf der Platine selbst keinen Debugger mitbringt. Zum Debuggen ihres Codes müssen sie unbedingt einen der beiden (!!!) beigelegten Debugger mitführen, was sich beim Herumreisen als lästig erweist. Achten Sie zudem unbedingt darauf, vor der ersten Ausführung die Kameraabdeckung zu entfernen.
Wie entwickeln?
Die Entwicklung von AI-Systemen für den MAX78000 erfolgt in einem janusköpfigen Ökosystem – der hier nicht weiter zu besprechende Data Scientist arbeitet mit einer pythonbasierten Toolchain, die idealerweise auf einer mit einer NVIDIA-Grafikkarte ausgestatteten Workstation unter Linux arbeitet.
Der Embedded-Experte arbeitet unter Windows 10 mit dem unter https://www.maximintegrated.com/en/design/software-description.html/swpart=SFW0010820A bereitstehenden Maxim Micros SDK.
Das Maxim Micros SDK wird mit einer ganzen Gruppe von Codebeispiel ausgestattet, die sich in aktuellen Versionen der IDE unter der Rubrik File → New → Project → C/C++ → Maxim Microcontrollers finden lassen. Beachten Sie, dass die für das neuronale Netzwerk vorgesehenen Einstellungen prinzipiell mit dem Präfix CNN Slash gekennzeichnet werden – das in älteren Versionen des Produkts erforderliche „manuelle Laden“ ist hier nicht mehr notwendig.
Lohn der Mühen ist jedenfalls der in der Abbildung gezeigte Einstellungs-Assistent, indem Sie sich für das gewünschte Ziel-Board und den gewünschten Ziel-Mikrocontroller entscheiden müssen – Maxim Micros SDK ist ja nicht nur für den MAX78000 vorgesehen, sondern unterstützt auch andere Controller.
Im Moment gibt es im Projektgenerator einen kleinen Bug – das Makefile, das unter anderem nach folgendem Schema für die korrekte Deklaration des Ziel-Boards sorgt, ist immer für die „große“ Version des Boards konfiguriert:
1 |
# Specify the board used
|
2 |
ifeq "$(BOARD)" "" |
3 |
BOARD=EvKit_V1 |
4 |
#BOARD=FTHR_RevA
|
5 |
endif
|
Das Anpassen des Kommentars behebt dieses Problem – der nächste interessante Abschnitt findet sich in der Datei cnn.c.
Das File ist für das Bereitstellen der diversen Kernel- und sonstigen Informationen verantwortlich, die das „Inferenzmodell“ der KI-Applikation bereitstellen. Die Erzeugung dieser numerischen Parameter erfolgt über die weiter oben angesprochene AI-Tool Chain; die Rolle der einzelnen Zahlen ist – im Allgemeinen – nicht wirklich begründbar, wenn man nicht Data Scientist ist ist.
Interessanterweise weist Maxim darauf auch explizit in einem Kommentar im Beginn der Datei hin:
1 |
// kws20_v3
|
2 |
// Created using ./ai8xize.py --verbose --log --test-dir sdk/Examples/MAX78000/CNN --prefix kws20_v3 --checkpoint-file trained/ai85-kws20_v3-qat8-q.pth.tar --config-file networks/kws20-v3-hwc.yaml --softmax --device MAX78000 --compact-data --mexpress --timer 0 –display-checkpoint
|
Sonst ist die Programmierung der CNN-Beschleuniger-Engine mit dem vergleichbar, was der geneigte Entwickler schon von anderen Systemen kennt. Im Rahmen des Programmstarts muss man durch einen Methoden-Dreikampf dafür sorgen, dass „grundlegende“ Koeffizienten in den Arbeitsspeicher der Beschleuniger-Engine wandern:
1 |
cnn_init(); |
2 |
cnn_load_weights(); |
3 |
cnn_configure(); |
Die eigentliche Bereitstellung der AI-Informationen erfolgt dann in einer Endlosschleife, die die Informationen in den Beschleuniger lädt, diesen startet und den Fertigstellungs-Interrupt abwartet. Wer mit einem anderen Beschleuniger wie dem in der Einleitung genannten Kendrute K210 schon Erfahrungen hat, findet an dieser Stelle keine Raketenphysik:
1 |
if (!cnn_load_data(pAI85Buffer)) { |
2 |
printf("ERROR: Loading data to CNN! n"); |
3 |
fail(); |
4 |
}
|
5 |
if (!cnn_start()) { |
6 |
printf("ERROR: Starting CNN! n"); |
7 |
fail(); |
8 |
}
|
9 |
while (cnn_time == 0) { |
10 |
__WFI(); |
11 |
}
|
12 |
cnn_unload((uint32_t*)ml_data); |
Lohnt es sich?
Der MAX78000 kann seine Stärken immer dann ausspielen, wenn „extrem geringer“ Energieverbrauch von Bedeutung ist – der Kendryte K210 mag (so man ihn beschaffen kann) leistungsfähiger sein, braucht aber auch viel mehr Energie. Zudem ist es für „Nicht-Chinesen“ wesentlich leichter, einen Dallas Maxim-Applikationsingenieur zu bekommen, der im Fall technischer Probleme kompetent weiterhilft. Der Autor ist übrigens – bei Bedarf – gerne bei der Suche eines Applikationsingenieurs behilflich.
- (Bildquelle: 1 Maxim, 2 / 5 Screenshot Ing. Tam HANNA / BSc, 3 / 4 Foto Ing. Tam HANNA / BSc) *
Zuerst erschienen bei Mikrocontroller.net News
Quelle: Read More