AdobeStock_183298823.eps

(Bild: ToheyVector @ Adobe Stock)

| von Rich Miron

Die Entwicklung eines beliebigen Modells für überwachtes maschinelles Lernen umfasst drei wichtige Schritte:

  • Vorbereitung von Daten für das Training eines Modells
  • Implementierung des Modells
  • Training des Modells

Eckdaten

Anwendungen für maschinelles Lernen folgen einem typischen Entwicklungsmuster mit Datenvorbereitung und Training, das über verschiedene Zielplattformen hinweg konzeptionell unverändert bleibt. Daher sind die Entwickler in der Lage, mit kostengünstigen Entwicklungsboards in kurzer Zeit Erfahrungen mit der Implementierung von Algorithmen für maschinelles Lernen zu sammeln. Da Bibliotheken und Frameworks für maschinelles Lernen zu Verfügung stehen, die für diese Boards optimiert sind, lassen sich auf Boards wie dem Raspberry Pi 3 effektive Inferenz-Engines für maschinelles Lernen implementieren, die ansprechende Ergebnisse für Anwendungen mit bescheidenen Anforderungen liefern können.

Die Vorbereitung der Daten beinhaltet bekannte Datenerfassungsmethoden sowie zusätzliche Schritte zur Markierung spezifischer Dateninstanzen zur Verwendung im Trainingsprozess. Für die letzten beiden Schritte mussten Spezialisten für Modelle des maschinellen Lernens vor Kurzem noch auf mathematische Low-Level-Bibliotheken zurückgreifen, um die in den Modellalgorithmen verwendeten detaillierten Berechnungen zu implementieren. Die Verfügbarkeit von Frameworks für maschinelles Lernen hat die Komplexität der Implementierung und des Trainings von Modellen dramatisch reduziert.

Heute kann jeder Entwickler, der mit Python oder einer anderen unterstützten Programmiersprache vertraut ist, mithilfe dieser Frameworks schnell Modelle für maschinelles Lernen entwickeln, die auf einer Vielzahl von Plattformen lauffähig sind.

Stapel für das maschinelle Lernen

Bild 1: Bei einem typischen Stapel für maschinelles Lernen stellen die Bibliotheken auf hoher Ebene Funktionen zur Implementierung von neuronalen Netzen und anderen Algorithmen für maschinelles Lernen bereit und greifen dabei auf spezialisierte mathematische Bibliotheken zurück, in denen für CPUs und GPUs der zugrunde liegenden Hardwareschicht optimierte Kernfunktionen implementiert sind.

Bild 1: Bei einem typischen Stapel für maschinelles Lernen stellen die Bibliotheken auf hoher Ebene Funktionen zur Implementierung von neuronalen Netzen und anderen Algorithmen für maschinelles Lernen bereit und greifen dabei auf spezialisierte mathematische Bibliotheken zurück, in denen für CPUs und GPUs der zugrunde liegenden Hardwareschicht optimierte Kernfunktionen implementiert sind. Google

Zur Unterstützung der Modellentwicklung stellen die Frameworks für maschinelles Lernen einen vollständigen Ressourcenstapel bereit (Bild 1). An der Spitze eines typischen Stapels stellen Trainings- und Inferenzbibliotheken Dienste zum Definieren, Trainieren und Ausführen von Modellen bereit. Diese Modelle beruhen ihrerseits auf optimierten Implementierungen von Kernfunktionen wie Faltung und Aktivierungsfunktionen wie ReLU sowie Matrixmultiplikation und anderen. Diese optimierten mathematischen Funktionen arbeiten mit Treibern auf niedriger Ebene zusammen, die eine Abstraktionsschicht zum Ansprechen einer gewöhnlichen CPU bereitstellen.

Seitdem Frameworks für maschinelles Lernen wie Tensorflow verfügbar sind, verläuft der Entwicklungsprozess für die Implementierung des maschinellen Lernens unabhängig von der Ziel-Hardware immer gleich. Die Möglichkeit TensorFlow über verschiedene Hardwareplattformen hinweg einzusetzen, erlaubt es den Entwicklern, die Entwicklung von Modellen auf relativ bescheidenen Hardwareplattformen in Angriff zu nehmen. Diese Erfahrungen können sie dann für die Entwicklung von Anwendungen für maschinelles Lernen auf robusterer Hardware übernehmen.

Es wird erwartet, dass spezialisierte Hochleistungschips für Künstliche Intelligenz die Entwickler schließlich in die Lage versetzen, ausgeklügelte Algorithmen für maschinelles Lernen zu implementieren. Bis dahin kann die Entwicklung mit der Erprobung des maschinellen Lernens beginnen und echte Anwendungen für maschinelles Lernen auf Universalplattformen wie dem Raspberry Pi 3 der Raspberry Pi Foundation erstellen.

Bild 2: Kostengünstige Boards wie das Raspberry Pi 3 bieten eine nützliche Plattform für die Entwicklung für maschinelles Lernen, da sie Add-ons wie Kameramodule für die Entwicklung von Bildklassifizierungsanwendungen unterstützen.

Bild 2: Kostengünstige Boards wie das Raspberry Pi 3 bieten eine nützliche Plattform für die Entwicklung für maschinelles Lernen, da sie Add-ons wie Kameramodule für die Entwicklung von Bildklassifizierungsanwendungen unterstützen. Raspberry Pi Foundation

Der Raspberry Pi 3 bietet einige unmittelbare Vorteile als Entwicklungsplattform für Anwendungen maschinellen Lernens. Der Arm-Cortex-A53-Quadcore-Prozessor verfügt über beträchtliche Leistungsreserven und die Neon-SIMD-Erweiterungen (Single Instruction, Multiple Data) des Kerns sind bis zu einem gewissen Grad zur Multimediaverarbeitung und zur Datenverarbeitung für maschinelles Lernen geeignet. Die Entwickler können die Basis-Hardwareplattform des Raspberry Pi 3 auch durch viele verfügbare kompatible Hardware-Add-ons erweitern.

Um ein Bilderkennungssystem für maschinelles Lernen zu erstellen, lässt sich der Raspberry Pi durch eine Kamera wie die 8-Megapixel-Kamera des Raspberry Pi Camera Module v2 oder die Pi-NoIR-Kamera für schlechte Lichtverhältnisse erweitern (Bild 2).

Softwareseitig hat die Raspberry Pi Community ein ebenso reichhaltiges Ökosystem geschaffen, in dem Entwickler ganze Distributionen bereitstellen, darunter vollständige, vorkompilierte binäre Wheel-Dateien zur Installation von Tensorflow auf einem Raspberry Pi.

Implementierung eines Modells für maschinelles Lernen

Mit dieser Kombination von Software, einem Raspberry Pi 3 und einem Kameramodul lässt sich unter Verwendung von Beispielcode von Arm eine einfache, maschinell lernende Gestenerkennungsanwendung erstellen. Die Anwendung soll nur erkennen, wenn der Benutzer eine bestimmte Geste ausführt.

Zur Implementierung reichen mit dem Phyton-Skript aufgezeichnete Videos mit der entsprechenden Geste. Trotz der scheinbaren Einfachheit ist dieses Modell recht ausgeklügelt. Es kommt eine als Transfer-Lernen bezeichnete Technik zum Einsatz. Beim Transfer-Lernen wird ein mit einem Datensatz trainiertes bewährtes Modell als Startpunkt für das Training eines Modells für eine andere, aber ähnliche Problemkonstellation verwendet.

Modelle mit mehrfacher Klassifizierung

Die Entwicklung einer Anwendung, die eine Eingabeklasse wie etwa eine einzelne Geste erkennt, ist eine Übung auf dem Gebiet des maschinellen Lernens. Aber Anwendungen für maschinelles Lernen sind typischerweise für die Klassifizierung von mehreren Klassen bestimmt. Für die Anwendung für eine einzelne Geste sind keine signifikanten Vorbereitungen in Form von Daten erforderlich. Dagegen umfasst die Anwendung mit mehrfacher Klassifizierung eine substantielle Erfassung von Daten und einen dazugehörigen Entwicklungsschritt, um das aufgezeichnete Video mithilfe eines von Arm zur Verfügung gestellten Python-Skripts mit der Zielklasse zu markieren.

Nachdem nun die Trainingsdaten und der reservierte Testsatz bereitstehen, besteht der nächste Schritt im Erstellen des Modells selbst. Im Gegensatz zu der Anwendung für eine einzelne Geste, in der hauptsächlich ein bereits trainiertes Modell zum Einsatz kommt, baut diese Anwendung ein vollständiges CNN-Modell (Convolutional Neural Network) auf. In diesem Fall erstellen Entwickler mithilfe einer Folge von Keras-Anweisungen ein Modell aus 2D-Faltungsschicht, Aktivierungsschicht, und Pooling-Schicht.

Dieses Modell führt auch das Konzept einer Dropout-Schicht ein, die für eine als Regularisierung bezeichnete Optimierung des Modells sorgt. In den Trainingsalgorithmen für ein Modell reduziert ein Regularisierungsfaktor die Tendenz des Modells, die einzelnen Merkmale überzubetonen, die in Modellen zu einer sogenannten Überanpassung führen kann. Dropout erfüllt genau diese Aufgabe, indem eine zufällig bestimmte Anzahl von Neuronen aus der Verarbeitungskette sozusagen fallengelassen wird (Bild 3).

Bild 3: Dropout führt in einem tiefen neuronalen Netz eine Regularisierung durch, indem es zufällig ausgewählte Neuronen deaktiviert, wodurch ein vollständig verbundenes neuronales Netz (oben) in eine weniger dichte Version überführt wird (unten).

Bild 3: Dropout führt in einem tiefen neuronalen Netz eine Regularisierung durch, indem es zufällig ausgewählte Neuronen deaktiviert, wodurch ein vollständig verbundenes neuronales Netz (oben) in eine weniger dichte Version überführt wird (unten). University of Toronto

Nachdem nun das vollständige Modell zur Verfügung steht, können die in Tensorflow und anderen Frameworks vorhandenen herkömmlichen Trainingsmethoden eingesetzt werden. Der eigentliche Trainingsprozess kann Stunden oder Tage dauern, bei sehr komplexen Modellen sogar Wochen. Obwohl die Entwickler zur Beschleunigung des Trainings typischerweise GPUs einsetzen, kann ein Transfer-Lernen wie in den oben behandelten Anwendungen zur Reduzierung der Trainingszeiten beitragen. Die Verwendung eines vollständigen Modells bei dieser Anwendung mit Mehrfach-Klassifizierung führt aber zu einer beträchtlich längeren Trainingsdauer. Arm merkt an, dass die Trainingsdauer für diese Anwendung auf einem Raspberry Pi sehr lang sein könnte. Arm schlägt den Entwicklern daher vor, Tensorflow auf ihrer Workstation zu installieren, das Training auf der Workstation durchzuführen und das trainierte Modell auf den Raspberry Pi zurückzukopieren.

Neben des grundlegenden Vorzugs als harte Messgröße können die Testphase und die Art, wie das Modell auf Testdaten reagiert, Hinweise darauf geben, welche Schritte zur Verbesserung des Modells erforderlich sein könnten. Da die Testdaten den im Training verwendeten Datentyp entsprechen, sollte ein trainiertes Modell Vorhersagen mit derselben Genauigkeit wie im Training selbst generieren. Sollte das Modell zu Überanpassung neigen, können Entwickler die Anzahl der Eingabemerkmale reduzieren und eine robustere Regularisierungsmethode verwenden. Bei Modellen mit Unteranpassung können sie dagegen weitere Merkmale hinzufügen und die Regularisierung lockern.

Anwendungen auf MCU-Basis

Tensorflow und andere Frameworks bieten jeweils einen konsistenten Ansatz für die Modellentwicklung, der mit einer großen Zahl von Hardwareplattformen kompatibel ist. Dies sind aber keineswegs die einzig möglichen Ansätze. Bei der Entwicklung von Anwendungen für maschinelles Lernen auf Arm-Plattformen lassen sich aber auch firmeneigene Bibliotheken einsetzen.

Die zur Unterstützung von MCUs der Arm-Cortex-A-Serie entwickelte Arm Compute Library bietet einen kompletten Funktionssatz zur Implementierung von CNNs und anderen Algorithmen für maschinelles Lernen. Der Arm-CMSIS (Cortex Microcontroller Software Interface Standard) umfasst eine Bibliothek für neuronale Netze (NN) für MCUs der Arm-Cortex-M-Serie. Ähnlich wie CMSIS-DSP eine Erweiterung von CMSIS für DSP-Anwendungen ist, bietet CMSIS-NN Funktionen für maschinelles Lernen zur Implementierung von beliebten NN-Architekturen auf Arm-Cortex-M-basierenden Plattformen. Zur Implementierung eines neuronalen Netzes mit CMSIS-NN können Entwickler ein vorhandenes Modell aus Tensorflow oder einem anderen Framework importieren. Als Alternative lässt sich auch ein CNN nativ durch eine Folge von CMSIS-NN-Funktionsaufrufen implementieren.

Universellen Plattformen mangelt es an Ressourcen für die Inferenzleistung, die mit Systemen auf GPU-Basis möglich ist. Daher können diese Plattformen normalerweise keine Echtzeit-Inferenz von Videodaten liefern, die mit den für eine flackerfreie Darstellung üblichen Bildfrequenzen arbeitet. Trotzdem kann das oben beschriebene CMSIS-NN CIFAR-10 Inferenzraten von etwa 10 pro Sekunde liefen, was für relativ einfache Anwendungen mit nicht zu hohen Aktualisierungsraten ausreichen sollte.

Rich Miron

(Bild: Digi-Key)
Senior Technical Content Developer bei Digi-Key

(prm)

Kostenlose Registrierung

Der Eintrag "freemium_overlay_form_all" existiert leider nicht.

*) Pflichtfeld

Sie sind bereits registriert?