1.  Übersicht 

Dieser Artikel stellt Variscites Python pyvar -Paket vor und zeigt Ihnen den Einstieg in pyvars API für Maschinelles Lernen (ML). Diese API wurde entwickelt, um Anfänger dabei zu unterstützen, den ML-Bereich zu erkunden und ihre eigenen Anwendungen mithilfe von Kameras, Displays und Benutzeroberflächen zu entwickeln, die auf die System on Modules (SoMs) abzielen, welche von der i.MX8-Produktfamilie betrieben werden.

Wenn Sie völliger Anfänger sind, empfehlen wir Ihnen sehr, den folgenden Artikel zu lesen, um sich vertraut zu machen mit KI/ML und den Beispielen dafür:

Bevor wir uns in das pyvar-Paket stürzen und mehr über seinen Kern und seine Beispiele lernen, werden wir uns kurz  mit einigen wichtigen Themen beschäftigen: dem KI-Hardware-Beschleuniger, Modelltraining und Modellquantisierung. Das Verständnis dieser Themen sollte Ihnen helfen, zu verstehen, wie ML auf Embedded-Systemen funktioniert, und wird es Ihnen wahrscheinlich ermöglichen, die bestmögliche Interferenzleistung für Ihre ML-Anwendungen zu erzielen.

Der i.MX8M Plus aus der NXP i.MX8 SOC-Produktfamilie hat einen eigenen KI-Beschleuniger zur effizienten Abwicklung des ML-Interferenzprozesses – diese Recheneinheit wird Neural Processing Unit (NPU) genannt. Das pyvar-Paket ist nicht strikt an die NPU gebunden– Sie können jedes andere SoM aus der i.MX8-Produktfamilie mit der ML-API verwenden; eine Änderung gibt es nur beim Interferenzprozess, der entweder die GPU oder die CPU statt der CPU verwendet, was eventuell zu einer längeren Interferenzzeit führen könnte.

Die NPU selbst verarbeitet 8-Bit-Festkomma-Operationen, wodurch ein ML-Modul simple und kleine arithmetische Einheiten nutzen und größere Fließkommaberechnungen vermeiden kann. Zur Nutzung der NPU-Rechenkapazitäten und Erzielung der bestmöglichen Interferenzleistung sollten 32-Bit-Fließkomma-Netzwerkmodelle  in 8-Bit-Festkomma-Netzwerke konvertiert werden.

Diese Konvertierung ist als Quantisierung bekannt und es gibt zwei Möglichkeiten, ein Modell so zu quantisieren, dass es auf der NPU korrekt funktioniert. Die erste ist das Trainieren Ihres eigenen Modell durch Anwenden der QAT-Methode (Quantization-aware Training) während des Trainings und die einfachere ist die Nutzung einer Post-Training-Methode, die nur ein trainiertes Modell in das Format konvertiert, welcher die NPU benötigt. Auf den Konvertierungsprozess werden wir in künftigen Blogposts näher eingehen.

Das pyvar-Paket ist unter den Bedingungen der BSD-3-Klausel lizenziert, was bedeutet, dass Sie es kostenlos verwenden und  es nach Belieben modifizieren können, solange Sie den Urheberrechtshinweis beibehalten. Es ist wichtig zu wissen, dass sich dieses Paket noch in der Entwicklung befindet. Zudem möchten wir Sie ermutigen, zum Projekt beizutragen .

2. Einstieg in Pyvar 

2.1 Einrichtung der BSP 

  1. Richten Sie die neueste Yocto-Veröffentlichungmithilfe der fsl-imx-xwayland Distro ein (mit den Wayland + X11 -Funktionen) und erstellen Sie das fsl-image-qt5 Bild, welches die ML-Pakete bereits enthält, oder wenn Ihnen ein kleineres Bild, wie das fsl-image-gui lieber ist, befolgen Sie die untenstehende Anleitung um die ML-Pakte zum Build hinzuzufügen:
    a. Fügen Sie Pakete zum Maschinelles Lernen zur Datei confhinzu:
OPENCV_PKGS_imxgpu = " \ 
       opencv-apps \ 
       opencv-samples \ 
       python3-opencv \ 
" 
IMAGE_INSTALL_append = " \ 
    packagegroup-imx-ml \ 
    ${OPENCV_PKGS} \ 
" 
  1. Booten Sie die Platine mit dem erstellten Bild (z. B., indem Sie es auf eine SD-Karte schreiben).

2.2 Installation des Variscite Python-Pakets 

Das pyvar-Paket wird im PyPi (https://pypi.org) -Repository gehostet und ist dort verfügbar. Dies ermöglicht allen Benutzern die einfache Installation des Pakets durch Befolgen der nächsten Anleitung:

  1. Installieren Sie auf der Zielplatine das pyvar-Paket mithilfe des pip3-Tools:

# pip3 install pyvar

  1. Um sicherzugehen, dass das Paket installiert wurde, führen Sie den folgenden Befehl aus, um die Version zu prüfen:

# pip3 list | grep pyvar 

 

3. PyVar API 

Das pyvar-Paket implementiert die häufigsten ML-Funktionen, die von der eIQ® ML-Software-Entwicklungsumgebung von NXP bereitgestellt werden. Es verfügt zudem über Multimedia- und Utility- Klassen, um Anfängern bei der Implementierung von ML-Anwendungen zu helfen und ihren Code so einfach wie möglich zu gestalten.

Sehen Sie sich einige Beispiele für Pyvar Module an:

  • pyvar.ml.engines verarbeitet Interferenz-Engines wie TensorFlow Lite und Arm NN: 

from pyvar.ml.engines.tflite import TFLiteInterpreter
2 engine = TFLiteInterpreter(model_file_path=”path_to_your_model”

Um weitere Informationen zu erhalten, besuchen Sie die Seite pyvar API für Maschinelles Lernen .

  • pyvar.multimedia verarbeitet Multimedia-Fälle wie Videodateien, Kameras und Geräte:

1 from pyvar.multimedia.helper import Multimedia 
2 multimedia = Multimedia(source=”path_to_video_file_or_camera_device”) 

Um weitere Informationen zu erhalten, besuchen Sie die Seite pyvar Multimedia-API .

3.1 Schnelle Beispiele , die mit PyVar geschrieben wurden 

Die in diesem Artikel verwendeten Beispiele verwenden quantisierte trainierte Modelle von TensorFlow Lite. Diese Beispiele wurden geschrieben, um dem Benutzer zu helfen, zu verstehen, wie sich einfacher Code durch Erkunden mehrerer Anwendungsfälle mit PyVar-Modulen schreiben lässt. Sie können die Beispiele ganz einfach herunterladen und auf der Zielplatine ausführen.

Im nächsten Beispiel wird ein Startmodell von TensorFlow verwendet und eine Interferenz auf einem Bild mit TensorFlow Lite als Interferenz-Engine durchgeführt:

# curl -LJO \ 
https://github.com/varigit/pyvar/raw/master/examples/ml/detection/image_detection_tflite.py 
# python3 image_detection_tflite.py 

Andere häufige ML-Beispiele, die mit pyvar geschrieben wurden:

Wenn Sie weitere Informationen benötigen, ist die vollständige Dokumentation zur Variscite-Python-API unter pyvar.dev verfügbar.