Schnelles Entwickeln KI-basierter Bilderfassungs- und Hörgeräte mit einem kostengünstigen Modul und MicroPython
Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey
2019-08-01
Um dem zunehmenden Wunsch nach intelligenten vernetzten Produkten gerecht zu werden, greifen Entwickler immer häufiger auf Teilgebiete der künstlichen Intelligenz (KI) wie beispielsweise maschinelles Lernen (ML) zurück. Die Entwickler stehen jedoch häufig vor einer schwierigen Entscheidung bei der Hardware. Sie können ihre Designs entweder auf Universalprozessoren aufbauen, die zwar kostengünstig sind, dafür aber nicht ausreichend leistungsfähig für komplexe Algorithmen, oder sie können auf spezielle Lösungen setzen, die hohe Leistung bieten, dafür aber die Kosten und die Komplexität des Designs erhöhen.
Das sind jedoch nicht länger die einzigen Optionen. Dieser Artikel beschreibt eine einfachere und kostengünstigere Alternative von Seeed Technology, mit der Entwickler leistungsstarke KI-basierte Lösungen mithilfe der bekannten Programmiersprache MicroPython bereitstellen können.
Ansätze im maschinellen Lernen
Der Erfolg von ML-Algorithmen hat die Aufmerksamkeit von Entwicklern geweckt, die nach effizienteren Ansätzen zur Objekt- und Spracherkennung in den verschiedensten Anwendungsbereichen suchen. Von diesen Algorithmen haben neuronale Faltungsnetzwerke (Convolutional Neural Networks, CNNs) die Art von hoher Erkennungsgenauigkeit gezeigt, die für maschinelle Bilderfassungs- und Höranwendungen erforderlich sind. Daher haben CNNs und vergleichbare tiefe neuronale Netzwerke (Deep Neural Networks, DNNs) zunehmend Anwendung in Designs für Unterhaltungselektronik, Wearables und das Internet der Dinge (IoT) gefunden.
Bei Anwendungen mit moderaten CNN-Interferenzanforderungen können Entwickler erfolgreiche Lösungen über Softwarebibliotheken für neuronale Netzwerke implementieren, die auf Universalprozessoren mit SIMD-Architekturen (Single Instruction Multiple Data) und DSP-Erweiterungen (Digital Signal Processing, digitale Signalverarbeitung) ausgeführt werden (siehe „Entwicklung einer Anwendung für maschinelles Lernen mit dem Raspberry Pi“).
Wenn die Anforderungen anspruchsvoller sind, können die Entwickler für leistungsfähigere CNN-basierte Designs auf FPGAs (Field Programmable Gate Arrays, feldprogrammierbare Gate-Arrays) zurückgreifen, die Hochleistungs-DSP-Blöcke einbetten, die zur Beschleunigung von ML-Algorithmen geeignet sind (siehe „Verwenden Sie FPGAs zum Erstellen eingebetteter High-Performance-Vision-Anwendungen mit maschinellem Lernen“).
Prozessor-basierte ML-Designs lassen sich in der Regel zwar einfacher implementieren als die FPGA-basierten, aber die mathematische Komplexität von CNN-Modellen verlangsamt üblicherweise die Interferenz von Prozessor-basierten Lösungen. Bei FPGA-basierten Lösungen ist eine Hardwareimplementierung wichtiger Verarbeitungsschritte möglich, um die Interferenzleistung zu beschleunigen. Die Entwicklungsanforderungen können die schnelle Implementierung optimierter Lösungen jedoch erschweren.
Mit dem Modul Sipeed MAIX-I 114991684 von Seeed Technology steht den Entwicklern eine alternative Lösung zur Verfügung, mit der die Bereitstellung von CNN-Interferenzlösungen mit hoher Leistung in intelligenten Produkten und Edge-Computing-Geräten beschleunigt werden kann.
CNN-Verarbeitungsmodule mit hoher Leistung
Das MAIX-1-Modul vereint einen leistungsstarken Dual-Core-Prozessor, einen Wi-Fi-Mikrocontroller ESP8285 von Espressif Systems, einen seriellen Flash-Speicher W25Q128FW von Winbond mit 128 Megabit (Mbit), einen Spannungsregler und einen IPEX-Antennenanschluss. Eine Wireless-Version des Sipeed MAIX-I 114991695-Moduls ist ohne ESP8285-Mikrocontroller erhältlich. Der zur Beschleunigung einer Vielzahl von Anwendungslasten konzipierte Dual-Core-Prozessor integriert zwei 64-Bit-RISC-V-Prozessoren mit Gleitkommaeinheiten (FPUs, Floating Point Units) und Beschleunigern für CNN-Modelle, Audioverarbeitung, Kryptographie und schnelle Fourier-Transformationen (FFTs) (Abbildung 1).
Abbildung 1: Das MAIX-I-Modul von Seeed Technology kombiniert einen Wireless-Mikrocontroller, einen Flash-Speicher, einen DC-Spannungsregler und einen IPEX-Antennenanschluss mit einem leistungsstarken Dual-Core-Prozessor und Beschleunigern zur Verarbeitung von Convolutional Neural Networks (CNNs) und für weitere Funktionen. (Bildquelle: Seeed Technology)
Neben 8 Megabyte (MB) SRAM (Static Random Access Memory) und 128 Kilobit (kbit) einmal programmierbarem Speicher (OTP, One-Time Programmable) integriert der Dual-Core-Prozessor verschiedenste Schnittstellen wie beispielsweise einen LCD-Anschluss und einen DVP-Anschluss für eine digitale Videokamera. Entwickler können den FPIOA-Multiplexer (Field Programmable IO Array) des Prozessors verwenden, um den verfügbaren 48 GPIO-Anschlüssen (General Purpose IO) 255 interne Funktionen zuzuweisen.
Die Beschleuniger und integrierten Funktionen des Prozessors unterstützen verschiedenste Anforderungen typischer intelligenter Produktdesigns. Der Audioprozessor (APU, Audio Processor Unit) beispielsweise unterstützt bis zu acht Mikrofone und verfügt über seinen eigenen dedizierten FFT-Beschleuniger für 512 Punkte. Allein mit dieser APU können Entwickler Mikrofon-Arrays effizient nutzen, um eine direktionale Strahlformung zu implementieren, das in Sprachschnittstellen für intelligente Produkte zum Einsatz kommt. Für Sprachschnittstellenfunktionen (z. B. Aktivieren per Schlüsselbegriff) können Entwickler die vorverarbeitete Audioausgabe vom APU verwenden, um die integrierten CNN-Beschleuniger des Prozessors anzusteuern.
CNN-Beschleuniger
Von allen Funktionen des Sipeed MAIX-I-Moduls ist der in den Dual-Core-Prozessor des Moduls integrierte CNN-Beschleuniger das größte Unterscheidungsmerkmal. Die zur Beschleunigung der Verarbeitung individueller Kernel-Funktionen von CNN entwickelte neuronale Netzwerkprozessoreinheit, hier bezeichnet als „KPU“ (Kernel Processing Unit), bietet Hardwareimplementierungen für die Kernel-Funktionen Faltung (Convolution), Batch-Normalisierung, Aktivierung und Pooling, welche die individuellen Schichten von CNN-Modellen darstellen (siehe „Get Started with Machine Learning Using Readily Available Hardware and Software“ (Einstieg in das maschinelle Lernen mit verfügbarer Hardware und Software)).
Mithilfe dieser Funktionen können Entwickler energieeffiziente Designs implementieren, die CNNs in Audioschnittstellen zur Erkennung von Begriffen für die Sprachaktivierung oder in bildbasierten Anwendungen zur Erkennung und Klassifizierung von Objekten verwenden. In der Tat kann die KPU den integrierten SRAM des Prozessors verwenden, um mithilfe von bis zu 5,9 MB großen Festkomma-CNN-Interferenzmodellen oder bis zu 11,8 MB großen, vorquantifizierten Gleitkomma-Modellen Echtzeit-Interferenzen durchzuführen. In der maschinellen Bilderfassung etwa führt die KPU die Interferenz mit mehr als 30 Frames pro Sekunde durch. Hierbei verwendet er die relativ kleinen Frames, die zur Gesichts- oder Objekterkennung in intelligenten Produkten zum Einsatz kommen. Für Nicht-Echtzeitanwendungen können Entwickler externe Flash-Speicher für Modelle verwenden, deren Größe lediglich durch die Kapazität des Flash-Speichers eingeschränkt ist.
Intern führt die KPU Interferenzmodelle mit einem FIFO-Puffer (First In, First Out) aus, um jede einzelne Schicht eines typischen CNN-Modells schrittweise zu verarbeiten (Abbildung 2, oben). Die KPU liest für jede Schicht Modellparameter und -daten aus seinem On-Chip-SRAM oder von einem externen Flash-Speicher und führt die Kernel-Funktion dieser Schicht unter Verwendung der zugehörigen beschleunigten Kernel-Funktion aus (Abbildung 2, unten). Ein in den Verarbeitungsablauf dieser Schicht integrierter Callback-Mechanismus ermöglicht Entwicklern die Ausführung eigener Routinen, während die KPU-Hardware die einzelnen Verarbeitungsschritte abschließt.
Abbildung 2: Bei der Ausführung einer Interferenz umfasst die vollständige KPU-Aufgabe (oben) mehrere Schichten, wobei für jede dieser Schichten die entsprechenden Kernel-Funktionen ausgeführt werden müssen (unten). (Bildquelle: Seeed Technology)
Entwicklungsplattformen
Die KPU abstrahiert die Komplexität der Ausführung des CNN-Algorithmus hinter ihrer dedizierten Hardware. Für Entwickler vereinfacht Seeed die Komplexität der CNN-basierten Entwicklung durch eine Kombination aus Hardwareprodukten und Softwarepaketen. Zusammen mit dem MAIX-I-Modul können Entwickler im Handumdrehen MAIX-I-basierte Designs evaluieren und entwickeln, indem sie Produkte von Seeed auf Kartenebene verwenden, die einen größeren Funktionsumfang bieten.
Das grundlegende Entwicklungskit 110991188 von Seeed kombiniert ein auf einer Grundplatine montiertes MAIX-I-Modul mit einem 2,4-Zoll-LCD und einer Fisheye-Kamera 114991881 OV2640 von Seeed. Das Kit 110991189 von Seeed bietet dieselben Funktionen mit der Version des MAIX-I-Moduls ohne Wi-Fi.
Zur Prototypentwicklung setzt die Bit-Evaluierungskarte 102991150 von Seeed ein MAIX-I-Modul auf eine spezielle Steckplatine. Das MAIX-I-Bit-Kit 110991190 von Seeed Technology kombiniert die Bit-Evaluierungskarte, ein 2,4-Zoll-Display, eine OV2640-Kamera und ein Steckleistenpaar zum Verbinden der Bit-Karte mit einer Steckplatine.
Zur Entwicklung komplexerer Anwendungen kombiniert das Sipeed-MAIX-Go-Kartenkit 110991191 von Seeed das MAIX-I-Modul mit einem Mikrocontroller STM32F103C8 von STMicroelectronics, einer Kamera, einem I2S-Mikrofon, einem Lautsprecher, einem Lithium-Batteriemanagement, einem MicroSD-Einschub und verschiedenen Schnittstellenverbindern (Abbildung 3). Wenn Sie das enthaltene 2,8-Zoll-LCD auf der Rückseite der Karte anbringen, können Entwickler das Kit effektiv als Plattform für ein KI-gesteuertes digitales Videosystem verwenden.
Abbildung 3: Das Board Sipeed MAIX Go, eine aus einer Reihe von MAIX-Karten von Seeed Technology, kombiniert das MAIX-I-Modul mit einem STM32F103C8-Mikrocontroller von STMicroelectronics, einer Kamera, einem Display und verschiedenen Schnittstellen zu einem eigenständigen Bildgebungssystem zur Objekterkennung. (Bildquelle: Seeed Technology)
Die Karten stellen eine eigenständige Lösung für die Anforderungen vieler intelligenter Produkte dar und sie sind dank MicroPython-Unterstützung sehr benutzerfreundlich. Mit der Kombination aus Sipeed-Karten von Seeed und MicroPhython steht Entwicklern bei der Entwicklung KI-basierter intelligenter Produkte ein einfacherer Ansatz zur Verfügung.
Schnelle Entwicklung mit MicroPython
MicroPython wurde als optimiertes Subset der Programmiersprache Python für Mikrocontroller mit begrenzten Ressourcen entwickelt. Da sie den direkten Hardwarezugriff unterstützt, bietet MicroPython für die Softwareentwicklung für Embedded-Systeme die relative Einfachheit der Python-basierten Entwicklung.
Anstelle von C-Bibliotheken verwenden die Entwickler vertraute Python-Importverfahren, um die erforderlichen Bibliotheken zu laden. Beispielsweise importieren sie das MicroPython-Maschinenmodul, um Zugriff auf die I2C-Schnittstelle, die Timer und weitere Funktionen eines Mikrocontrollers zu erhalten. Bei Designs, die Bildsensoren verwenden, können die Entwickler ein Bild erfassen, indem sie das Sensormodul importieren und sensor.snapshot() aufrufen, um einen Frame vom Bildsensor zu erhalten.
Das MaixPy-Projekt von Seeed erweitert MicroPython um die Unterstützung für den Dual-Core-Prozessor K210 des MAIX-I-Moduls und der zugehörigen Entwicklungskarten. Der auf dem K210-Prozessor des MAIX-I-Moduls ausgeführte MicroPython-Interpreter MaixPy verwendet MicroPython-Funktionen und spezielle MaixPy-Module wie beispielsweise das KPU-Modul, das die KPU-Funktionen des Prozessors umschließt.
Entwickler können MaixPy und das KPU-Modul verwenden, um problemlos eine CNN-Interferenz bereitzustellen. In der Tat enthält die MaixHub-Modellbibliothek von Seeed zahlreiche vortrainierte CNN-Modelle, um Entwicklern bei ihren ersten Schritten mit dem MAIX-I-Modul zu helfen. Um diese Modelle herunterladen zu können, müssen die Entwickler eine Maschinen-ID angeben, die sie erhalten, indem sie ein ID-Generierungsprogramm auf der MAIX-Karte ausführen.
Beispielsweise können Entwickler für das Sipeed-MAIX-Go-Kit von Seeed mit angeschlossenem LCD ein vortrainiertes Modul zur Gesichtserkennung herunterladen. Die Ausführung einer Interferenz mit dem Modell erfordert lediglich einige Zeilen in Python (Listing 1).
Kopieren
import sensor
import image
import lcd
import KPU as kpu
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000
# task = kpu.load("/sd/face.kmodel")
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)
if code:
for i in code:
print(i)
a = img.draw_rectangle(i.rect())
a = lcd.display(img)
a = kpu.deinit(task)
Listing 1: Entwickler benötigen nur wenige Zeilen in MicroPython, um mithilfe eines neuronalen Netzwerkmodells, das sich in einem Flash-Speicher befindet, eine Interferenz zu implementieren. (Codequelle: Seeed Technology)
Das vortrainierte Modell implementiert einen CNN-Typ, der als Yolo-Modell (You only look once) bezeichnet wird. Es beschleunigt die Interferenz, indem es während des Trainings und der Interferenz ein ganzes Bild verwendet und nicht eine Reihe von Sliding Windows wie frühere CNN-Algorithmen. Weitere Optimierungen von Yolo sind im Modell „Tiny Yolo2“ zu finden, das in der MaixHub-Modellbibliothek enthalten ist. Das Ergebnis ist ein leistungsstarkes Modell, das mit der MAIX Go die Gesichtserkennung in Echtzeit ermöglicht (Abbildung 4).
Abbildung 4: Mit dem Board Sipeed MAIX Go und einem speziell vortrainierten CNN-Interferenzmodell können Entwickler im Handumdrehen eine Echtzeit-Gesichtserkennung bauen. (Bildquelle: Seeed Technology)
Natürlich stellt die Interferenz nur die Bereitstellungsstufe des Entwicklungsprozesses des komplexen DNN-Modells dar und die offensichtliche Einfachheit dieses Beispiels kann darüber hinwegtäuschen, mit welchen Herausforderungen die Implementierung eines effektiven Modells verbunden ist.
Um ein eigenes Modell zu entwickeln, müssen die Entwickler zuerst eine ausreichend große Menge an Beispielen für das Training des Modells zusammentragen. Zum Trainieren verwenden die Entwickler ein Deep-Learning-Framework wie TensorFlow, um ein Modell zu konfigurieren und es mithilfe der Trainingsdaten zu trainieren.
Das mag sich zwar kompliziert anhören, aber mit der MAIX-I-Umgebung gestaltet sich die Interferenzentwicklung relativ einfach.
Seeed stellt Konverter zur Verfügung, mit denen die Entwickler Modelle, die in TensorFlow, Keras oder Darknet entwickelt wurden, in das spezielle kmodel-Format der KPU umgewandelt werden können. So, wie vortrainierte Modelle aus der MaixHub-Modellbibliothek heruntergeladen werden können, können Entwickler ihre eigenen Modelle in das MAIX-I-Modul hochladen und ihre Leistung wie oben angemerkt mit MicroPython evaluieren.
Seeed hat außerdem Software-Entwicklungskits (SDKs, Software Development Kits) im Angebot, mit denen eigene Softwareanwendungen in der Programmiersprache C geschrieben werden können. Separate SDKs unterstützen eigenständige C-Anwendungen oder C-Anwendungen auf einem Echtzeit-Betriebssystem (RTOS, Real-Time Operating System).
Fazit
Die rasche Verbreitung von bild- und sprachbasierten Schnittstellen für intelligente Produkte fördert weiterhin das Interesse daran, Algorithmen für maschinelles Lernen in den ressourcenbeschränkten Designs zu verwenden, die diesen Produkten zugrunde liegen. In der Vergangenheit standen den Entwicklern nur wenig effektive Lösungsoptionen zur Verfügung, die einfach zu implementieren und leistungsstark genug sind, um in Echtzeit Funktionen für maschinelles Lernen zu unterstützen.
Wie gezeigt können Entwickler mit dem MAIX-I-Modul und den zugehörigen Karten von Seeed Technology im Handumdrehen Interferenzmodelle auf einer Hardwareplattform bereitstellen, mit denen in Echtzeit die Erkennung von Sprache oder Objekten aus gestreamten Audio- oder Videodaten möglich ist.
Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.




