Cross-Compiling OpenVINO™ Toolkit und NCS2-Plugin unter Verwendung vorkonfigurierter Dockerfile für 32-Bit Debian* OS

Dokumentation

Installation und Setup

000057005

16.06.2023

Notizen
  • Bei der Installation sind alle Schritte erforderlich.
  • Diese Schritte wurden mit Raspberry Pi 4* Mainboard und Raspbian* Buster, 32-Bit, getestet.
  • Um die in dieser Anleitung angegebenen Schritte durchzuführen, ist eine Internetverbindung erforderlich.
  • Der Artikel wurde mit der 2022.1-Version der Open-Source-Distribution des OpenVINO™ Toolkits verifiziert.

Das OpenVINO™-Toolkit stellt schnell Anwendungen und Lösungen bereit, die das menschliche Sehvermögen nachahmen. Das Toolkit erweitert Computer-Vision(CV)-Workloads auf Intel® Hardware, die auf Convolutional Neural Networks (CNN) basiert und die Leistung maximiert. Diese Schritte folgen im Allgemeinen dem verfügbaren How to Build ARM CPU-Plugin . Allerdings sind spezifische Änderungen erforderlich, um alles auf dem Raspberry Pi 4* auszuführen. Dieser Leitfaden enthält Schritte zum Aufbau einer Open-Source-Distribution des OpenVINO™ Toolkits für Das 32-Bit-Betriebssystem Raspbian* mit einer Cross-Kompilierungsmethode.

Klicken Sie auf das Thema, um weitere Informationen anzuzeigen:

Systemvoraussetzungen
Hinweis Dieser Leitfaden nimmt an, dass Ihr Raspberry Pi* Mainboard mit dem unten aufgeführten Betriebssystem aktiviert ist.

Hardware

  • Raspberry Pi* 4 (Raspberry Pi* 3 Model B+ sollte funktionieren.)
  • Mindestens eine 16-GB-microSD-Karte
  • Intel® Neural Compute Stick 2
  • Ethernet-Internetverbindung oder kompatibles drahtloses Netzwerk
  • Host-Maschine mit installiertem Docker-Container

Vorgesehenes Betriebssystem

  • Raspbian* Buster, 32-Bit
Einrichten Ihrer Build-Umgebung
Hinweis Dieser Leitfaden enthält Befehle, die als Root- oder S ascii-Zugriff ausgeführt werden müssen, um sie korrekt zu installieren.

Stellen Sie sicher, dass Ihre Gerätesoftware auf dem neuesten Stand ist:

sudo apt update && sudo apt upgrade -y

Installation von Docker-Container
Hinweis Sie können die Installationsanweisungen befolgen, die auf der offiziellen Dokumentation für den Docker basieren
https://docs.docker.com/engine/install

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker ${USER}
sudo systemctl restart docker

Klon-openvino_contrib-Klon-Openvino_contrib
Hinweis Die openvino_contrib- und OpenVINO Toolkit-Version für diesen Artikel basiert auf 2022.1

Laden Sie den Quellcode herunter und ändern Sie die Konfigurationsdatei:

git clone --recurse-submodules --single-branch --branch=2022.1 https://github.com/openvinotoolkit/openvino_contrib.git

Rufen Sie das arm_plugin verzeichnis auf:

cd openvino_contrib/modules/arm_plugin

Ändern Sie den Inhalt der Dockerfile.RPi32_buster-Datei wie unten mit den Editor-Tools:

vim dockerfiles/Dockerfile.RPi32_buster

Fügen Sie "RUN pip install protobuf==3.20.0" in Zeile 114 hinzu, wie in der abbildung unten dargestellt.

Screenshot

Speichern Sie die bearbeitete Datei.

Ändern Sie den Inhalt der arm_cpu_plugin_build.sh-Datei wie unten gezeigt mit den Editor-Tools:

vim scripts/arm_cpu_plugin_build.sh

Bearbeiten Sie die Zeilen 77, 78, 79 und 136 und fügen Sie Änderungen hinzu, wie unten fettgedruckt dargestellt:

77 checkSrcTree $OPENCV_HOME https://github.com/opencv/opencv.git 4.5.5-openvino-2022.1 4.x
78 checkSrcTree $OPENVINO_HOME https://github.com/openvinotoolkit/openvino.git 2022.1.0 releases/2022/1
81 checkSrcTree $OMZ_HOME https://github.com/openvinotoolkit/open_model_zoo.git 2022.1.0 releases/2022/1
136 -DENABLE_INTEL_MYRIAD=ON -DCMAKE_BUILD_TYPE=$BUILD_TYPE \

Speichern Sie die bearbeitete Datei.

Cross-Compile OpenVINO™ Toolkit in Docker-Container-Umgebung

In diesem Schritt führen wir das Skript aus, um OpenVINO™ Toolkit und andere Komponenten wie OpenCV* in der Docker-Container-Umgebung herunterzuladen und zu kompilieren:

Gehen Sie zum ARM CPU Plugin-Verzeichnis:

cd openvino_contrib/modules/arm_plugin

Erstellen Sie ein Docker*-Image:

docker image build -t arm-plugin -f dockerfiles/Dockerfile.RPi32_buster .

Erstellen Sie das Plugin in Docker* Container:

Der Build-Prozess wird von /arm_cpu_plugin_build.sh Skript ausgeführt, das innerhalb /arm_cpu_plugin Verzeichnisses ausgeführt wird (der standardmäßige Container-Befehl zur Ausführung). Alle Zwischenergebnisse und Build-Artefakte werden im Arbeitsverzeichnis gespeichert.

So könnte man das gesamte Arbeitsverzeichnis mounten, um alle Ergebnisse außerhalb des Containers zu erhalten:

mkdir build

docker container run --rm -ti -v $PWD/build:/arm_cpu_plugin arm-plugin

Hinweis

Es gibt einige Umgebungsvariablen, die /arm_cpu_plugin_build.sh Skriptausführung steuern.

  • BUILD_JOBS steuert die Anzahl der Threads für die gleichzeitige Kompilierung
  • BUILD_TYPE steuert die Debug/Release-Konfiguration (Standardversion)
  • UPDATE_SOURCES steuert das Quellen-Retrievement
    • clean – Laden Sie keine Quellen erneut, wenn sie bereits geladen sind. Nur saubere Build-Ordner (Standard)
    • reload (Neuladen ) – Löschen Sie alle geladenen Quellen und rufen Sie sie erneut auf.
    • check – Keine Quellen neu laden oder bereinigen
  • WITH_OMZ_DEMO baut C++ Open Model Zoo Demos (standardmäßig ON)

Im Build-Ordner wird OV_ARM_package.OV_ARM_package.gz generiert.

ls build

Übertragen Sie die OV_ARM_package.OV_ARM_package.gz auf das Zielgerät (Raspberry Pi 4* 32-Bit Buster)
Es gibt verschiedene Möglichkeiten, die Pakete auf das Zielgerät (Raspberry Pi 4*) zu übertragen, die Kopie direkt auf das Zielgerät zu sichern, das Paket auf ein USB-Stick-Laufwerk zu kopieren und zu übertragen.
Dieser Artikel zeigt, wie Sie ein USB-Thumb-Laufwerk in der Host-Maschine anschließen und das Build-Paket auf das montierte Thumb-Laufwerk kopieren.

Stecken Sie das USB-Stick-Laufwerk in den SYSTEM-USB-Port ein und überprüfen Sie dann den Gerätestart mit dem folgenden Befehl;

SSDs (FDISK) – l

Sobald das Gerät booten überprüft wurde, stellen Sie den Gerätestart (z. B. /dev/sda) in /mntein;

sudo mount /dev/sda /mnt

Kopieren Sie als Nächstes das OpenVINO-Paket auf das USB-Thumb-Laufwerk;

sudo cp -rf build/OV_ARM_package.tar.gz /mnt/

Überprüfen des Build-Pakets

Nach Abschluss der Cross-Kompilierung kopierte er die OV_ARM_package.OV_ARM_package.gz erfolgreich auf das Zielgerät (Raspberry Pi 4*).

Kompilierungstool installieren

sudo apt update
S ascii apt install cmake -y

Extrahieren Sie die OV_ARM_package.OV_ARM_package.gzpackage

mkdir ~/openvino_dist/
tar -xvzf OV_ARM_package.tar.gz -C ~/openvino_dist/

Quelle der Setup-Variable

source ~/openvino_dist/setupvars.sh

Kompilierung des Beispielcodes

cd ~/openvino_dist/samples/cpp
./build_samples.sh

Um zu überprüfen, ob das Toolkit und Intel® Neural Compute Stick 2 und ARM* Plugin auf Ihrem Gerät funktionieren, führen Sie die folgenden Schritte aus:

  1. Führen Sie die Beispielanwendung hello_query_device aus, um sicherzustellen, dass alle Bibliotheken korrekt geladen werden.
  2. Laden Sie ein vortrainiertes Modell herunter.
  3. Wählen Sie eine Eingabe für das neuronale Netzwerk (d. h. eine Bilddatei).
  4. Konfigurieren Sie den Intel® Neural Compute Stick 2 Linux* USB-Treiber.
  5. Führen Sie benchmark_app mit dem ausgewählten Modell und der Eingabe aus.

Beispielanwendungen

Das Intel® OpenVINO™ Toolkit umfasst Beispielanwendungen, die die Inferenz-Engine und Intel® Neural Compute Stick 2 verwenden. Eine der Anwendungen ist hello_query_device, die sie im folgenden Verzeichnis finden:

~/inference_engine_cpp_samples_build/armv7l/Release

Führen Sie die folgenden Befehle aus, um hello_query_device zu testen :

cd ~/inference_engine_cpp_samples_build/armv7l/Release

./hello_query_device

Es sollte einen Dialog drucken, in dem die verfügbaren Geräte zur Inferenz beschrieben werden, die auf dem System vorhanden sind.

Herunterladen eines Modells

Die Anwendung benötigt ein Modell, um die Eingabe zu übergeben. Sie können Modelle für das Intel® OpenVINO™ Toolkit im IR-Format erhalten, indem Sie:

  • Verwenden des Model Optimizer zur Konvertierung eines bestehenden Modells von einem der unterstützten Frameworks in ein IR-Format für die Inferenz-Engine. Beachten Sie, dass das Model Optimizer-Paket nicht für Raspberry Pi* verfügbar ist.
  • Verwenden des Model Downloader-Tools zum Herunterladen aus dem Open Model Zoo. Nur öffentliche vortrainierte Modelle.
  • Laden Sie die IR-Dateien direkt von storage.openvinotookit.org

Für unsere Zwecke ist das Herunterladen direkt am leichtesten. Verwenden Sie die folgenden Befehle, um ein Modell zur Personen-Fahrzeug-Fahrraderkennung zu greifen:

wget https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/3/person-vehicle-bike-detection-crossroad-0078/FP16/person-vehicle-bike-detection-crossroad-0078.bin -O ~/Downloads/person-vehicle-bike-detection-crossroad-0078.bin

wget https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/3/person-vehicle-bike-detection-crossroad-0078/FP16/person-vehicle-bike-detection-crossroad-0078.xml -O ~/Downloads/person-vehicle-bike-detection-crossroad-0078.xml

Hinweis Der Intel® Neural Compute Stick 2 erfordert Modelle, die für das als FP16 bezeichnete 16-Bit-Fließkommaformat optimiert sind. Wenn es sich von dem Beispiel unterscheidet, kann Ihr Modell eine Konvertierung mit dem Model Optimizer zu FP16 auf einer separaten Maschine erfordern, da der Model Optimizer auf Raspberry Pi* nicht unterstützt wird.

Eingabe für das neuronale Netzwerk

Der letzte benötigte Punkt ist die Eingabe für das neuronale Netzwerk. Für das Modell, das wir heruntergeladen haben, benötigen Sie ein Bild mit drei Farbkanälen. Laden Sie die notwendigen Dateien auf Ihr Mainboard herunter:

wget https://cdn.pixabay.com/photo/2018/07/06/00/33/person-3519503_960_720.jpg -O ~/Downloads/person.jpg

Konfiguration des Intel® Neural Compute Stick 2 Linux USB-Treibers

Einige UDEV-Regeln müssen hinzugefügt werden, damit das System Intel® NCS2 USB-Geräte erkennen kann.

Hinweis Wenn der aktuelle Benutzer nicht Mitglied der Gruppe des Benutzers ist, führen Sie den folgenden Befehl aus und starten Sie Ihr Gerät neu.

sudo usermod -a -G users "$(whoami)"

Einrichten der OpenVINO™-Umgebung:

source /home/pi/openvino_dist/setupvars.sh

Um in der Intel® Neural Compute Stick 2 Inferenz durchzuführen, installieren Sie die USB-Regeln, indem Sie das install_NCS_udev_rules.sh -Skript ausführen:

sh /home/pi/openvino_dist/install_dependencies/install_NCS_udev_rules.sh

Der USB-Treiber sollte jetzt korrekt installiert werden. Wenn der Intel® Neural Compute Stick 2 bei der Ausführung von Demos nicht erkannt wird, starten Sie Ihr Gerät neu und versuchen es erneut.

Ausführen von benchmark_app

Wenn das Modell heruntergeladen wird, ist ein Eingabe-Image verfügbar und die Intel® Neural Compute Stick 2 an einen USB-Port angeschlossen ist, verwenden Sie den folgenden Befehl, um die benchmark_app auszuführen:

cd ~/inference_engine_cpp_samples_build/armv7l/Release

./benchmark_app -i ~/Downloads/person.jpg -m ~/Downloads/person-vehicle-bike-detection-crossroad-0078.xml -d MYRIAD

Dadurch wird die Anwendung mit den ausgewählten Optionen ausgeführt. Die -d -Kennzeichnung weist das Programm an, welches Gerät für Inferenz verwendet werden soll. Die Angabe von MYRIAD aktiviert das MYRIAD-Plugin unter Verwendung der Intel® Neural Compute Stick 2. Nachdem der Befehl erfolgreich ausgeführt wurde, wird das Terminal Statistiken für Inferenz anzeigen. Sie können auch das CPU-Plugin verwenden, um in der ARM-CPU Ihres Raspberry Pi 4* Geräts Inferenz auszuführen. Lesen Sie dazu die Arm*-Plugin-Betriebsspezifikation zur Betriebsunterstützung, da das in diesem Beispiel verwendete Modell vom ARM* Plugin nicht unterstützt wird.

[ INFO ] First inference took 410.75 ms
[Step 11/11] Dumping statistics report
[ INFO ] Count: 388 iterations
[ INFO ] Duration: 60681.72 ms
[ INFO ] Latency:
[ INFO ] Median: 622.99 ms
[ INFO ] Average: 623.40 ms
[ INFO ] Min: 444.03 ms
[ INFO ] Max: 868.18 ms
[ INFO ] Throughput: 6.39 FPS


Wenn die Anwendung erfolgreich auf Ihrem Intel® NCS2 ausgeführt wurde, sind OpenVINO™ Toolkit und Intel® Neural Compute Stick 2 korrekt für den Einsatz auf Ihrem Gerät eingerichtet.

Umgebungsvariablen

Sie müssen mehrere Umgebungsvariablen aktualisieren, bevor OpenVINO Toolkit-Anwendungen kompiliert und ausgeführt werden. Führen Sie das folgende Skript aus, um die Umgebungsvariablen vorübergehend einzustellen:

source /home/pi/openvino_dist/setupvars.sh

**(Optional)** Die OpenVINO™-Umgebungsvariablen werden entfernt, wenn Sie die Shell schließen. Als Option können Sie die Umgebungsvariablen dauerhaft wie folgt festlegen:

echo "source /home/pi/openvino_dist/setupvars.sh" >> ~/.bashrc

Um Ihre Änderung zu testen, öffnen Sie ein neues Terminal. Sie werden Folgendes sehen:

[setupvars.sh] OpenVINO environment initialized

Dies vervollständigt die Cross-Kompilierung und das Build-Verfahren für die Open-Source-Distribution des OpenVINO™ Toolkits für Raspbian* OS und die Verwendung mit Intel® Neural Compute Stick 2 und ARM* Plugin.

Verwandte Themen
Aufbau von Open Model Zoo Demos auf Raspberry Pi*
OpenVINO™ toolkit Open Model Zoo
Community-Forum und technischer Support