1.  Übersicht 

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

Wenn Sie noch keine Erfahrung haben, kann der folgenden mit Beispielen untermauerte ArtikelIhnen helfen, um sich mit KI/ML vertraut zu machen:

Bevor wir uns in das pyvar-Paket stürzen und mehr über die Grundlagen und 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. Es wird Ihnen 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 NPU 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 Gleitkommaberechnungen vermeiden kann. Zur Nutzung der NPU-Rechenkapazitäten und Erzielung der bestmöglichen Interferenzleistung sollten 32-Bit-Gleitkomma-Netzwerkmodelle in 8-Bit-Festkomma-Netzwerke konvertiert werden.

Diese Konvertierung ist als Quantisierung bekannt und es gibt zwei Möglichkeiten, ein Modell so zu zerlegen, dass es auf der NPU korrekt funktioniert. Mit der ersten Methode trainieren Sie Ihr eigenes Modell durch Anwenden der QAT-Methode (Quantization-aware Training) . Die einfachere Methode ist dabei 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 kostenfrei 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 das neueste Yocto-Release mithilfe der fsl-imx-xwayland Distro ein (mit den Wayland + X11 -Funktionen) und erstellen Sie das fsl-image-qt5 Image, welches die ML-Pakete bereits enthält, oder wenn Ihnen ein kleineres Image, 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 Maschinellen Lernen zur Datei local.conf  hinzu:
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 Image (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 Dazu gehen Sie folgendermaßen vor:

  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 Kurze Beispiele , die mit PyVar geschrieben wurden 

Die in diesem Artikel enthaltenen 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 ausführen.

In diesem 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.