Anwendbarkeit auf ArmSoM und Quelle
Dies ist eine Rockchip-Plattformreferenz, kein ArmSoM-Testbericht. Quellen: RK-JC-YF-416, RKNN SDK V2.3.2, 27 chinesische und 29 englische Seiten. Chinesisch folgt dem chinesischen, Englisch dem englischen Original; Russisch und Deutsch übersetzen Englisch vollständig. Chinesisch verwendet alle 16 chinesischen Abbildungen, die anderen Sprachen die 16 englischen Originale. Gezeigte Rockchip-Referenzboards, Anschlüsse und Netzteile sind keine ArmSoM-Spezifikation: 12V-2A/12V-3A nicht ungeprüft auf ArmSoM-Hardware übertragen. Die Quelle nennt RK3562, RK3566/3568/3576/3588-Serien und RV1126B, aber keine SDK/BSP-, Firmware- oder Kernelkombination eines konkreten ArmSoM-Boards. Stromversorgung, OTG/adb, NPU-Treiber und Toolkit2/Server/Runtime-Kompatibilität prüfen. Linux 5.10.160, Treiber 0.8.8, Erkennungen und Protokolle sind Quellbeispiele. Installations-/Debugbefehle sowie Hardware-/Leistungstests wurden nicht ausgeführt. V2.3.2 bezeichnet den Quellstand, nicht die aktuell neueste Version.
Sicherheits- und Redaktionshinweis: Die Quelle enthält root, adb remount, setenforce 0, docker-Gruppenmitgliedschaft und –privileged. Dies beeinflusst Sicherheitsgrenzen von Gerät und Host; es sind beibehaltene Quellbeispiele, keine für Produktion validierten Anweisungen. Versions-, Pfad- und Nummerierungsunterschiede sowie Fehlermeldungen im Protokollbild sind in den redaktionellen Hinweisen erfasst. Riskante Optionen wurden nicht stillschweigend geändert.
1 Einführung
Diese Anleitung erläutert Einsteigern ausführlich, wie Modelle am Computer mit RKNN-Toolkit2 konvertiert und über RKNPU2 auf einem Rockchip-Entwicklungsboard bereitgestellt werden. Die Beispiele sind im RKNN Model Zoo enthalten.
Laut Quelle unterstützte Plattformen: RK3562, RK3566-, RK3568-, RK3576- und RK3588-Serie sowie RV1126B.
2 Entwicklungsboard vorbereiten
Dieses Kapitel behandelt den Anschluss des Entwicklungsboards an den Computer in zwei Teilen:
Entwicklungsboard und Anschlussmittel kennenlernen
Entwicklungsboard an den Computer anschließen
2.1 Entwicklungsboard und Anschlussmittel
1. Entwicklungsboard

Abbildung 2-1: RK3562-Entwicklungsboard

Abbildung 2-2: RK3566-Entwicklungsboard

Abbildung 2-3: RK3568-Entwicklungsboard

Abbildung 2-4: RK3588-Entwicklungsboard

Abbildung 2-5: RK3576-Entwicklungsboard

Abbildung 2-6: RV1126B-Entwicklungsboard

Abbildung 2-7: RV1126B-Entwicklungsboard, Seitenansicht
2. Datenkabel zwischen Entwicklungsboard und Computer

Abbildung 2-8: USB-A-Datenkabel für das RK3562/RK3568-Entwicklungsboard

Abbildung 2-9: Micro USB-Datenkabel für das RK3566-Entwicklungsboard

Abbildung 2-10: USB-C-Datenkabel für das RK3576/RK3588-Entwicklungsboard
3. Netzteil

Abbildung 2-11: Netzteil mit 12V-2A-Ausgang für das RK3562/RK3566/RK3568-Entwicklungsboard

Abbildung 2-12: Netzteil mit 12V-3A-Ausgang für das RK3576/RK3588-Entwicklungsboard
2.2 Entwicklungsboard an den Computer anschließen
Der Anschluss an den Computer wird am Beispiel von RK3568 erläutert:
1. Einen Computer mit Ubuntu18.04 / Ubuntu20.04 / Ubuntu22.04 vorbereiten.
2. Den Stromanschluss in der Abbildung finden und das Netzteil des Entwicklungsboards anschließen.
3. Entwicklungsboard und Computer mit dem Datenkabel verbinden. Je nach Fertigungscharge können Anschlusstyp und Position abweichen. Üblicherweise kennzeichnet die Aufschrift OTG am Board den Datenanschluss.
4. Den Netzschalter einschalten und warten, bis das System des Entwicklungsboards vollständig gestartet ist.

Abbildung 2-13: RK3568-Entwicklungsboard
1. Prüfen, ob das Entwicklungsboard mit dem Computer verbunden ist. Die Schrittnummer 1 folgt dem englischen Original; im chinesischen Original steht hier Schritt 5.
Im Terminal des Computers (Befehlszeile) folgenden Befehl ausführen:
# If adb has not been installed, please install it first using 'sudo apt install adb'
adb devices
Bei erfolgreicher Verbindung erscheint folgende Ausgabe; 13af7b28115662cd ist die Geräte-ID des RK3568. Wird kein Gerät angezeigt, Abschnitt 6.1 zur Fehlersuche heranziehen.
$ adb devices
List of devices attached
13af7b28115662cd device
3 Entwicklungsumgebung vorbereiten
Dieses Kapitel beschreibt die direkte Installation der Entwicklungsumgebung auf dem Computer. Auch die anschließenden Beispiele gehen von dieser Installation aus. Für die Ausführung in Docker die Umgebung gemäß Kapitel 5 vorbereiten.
Das Kapitel besteht aus vier Teilen:
RKNN-Repositories herunterladen
RKNN-Toolkit2 auf dem Computer installieren
Kompilierwerkzeuge auf dem Computer installieren
RKNPU2-Umgebung auf dem Board installieren
3.1 RKNN-Repositories herunterladen
Für die RKNN-Repositories wird ein eigener Ordner empfohlen, beispielsweise Projects. Darin RKNN-Toolkit2 und RKNN Model Zoo ablegen. Beispielbefehle:
# Create the 'Projects' folder
mkdir Projects
# Switch to this directory
cd Projects
# Download the RKNN-Toolkit2 repository
git clone https://github.com/airockchip/rknn-toolkit2.git --depth 1
# Download the RKNN Model Zoo repository
git clone https://github.com/airockchip/rknn_model_zoo.git --depth 1
# Notice:
# 1. Parameter --depth 1 means to clone only the latest commit
# 2. If the 'git clone' command fails, you can also download the compressed file directly from GitHub and unzip it locally in this directory.
Gesamte Verzeichnisstruktur:
Projects
├── rknn-toolkit2
│ ├── doc
│ ├── rknn-toolkit2
│ │ ├── packages
│ │ ├── docker
│ │ └── ...
│ ├── rknpu2
│ │ ├── runtime
│ │ └── ...
│ └── ...
└── rknn_model_zoo
├── datasets
├── examples
└── ...
3.2 RKNN-Toolkit2 auf dem Computer installieren
3.2.1 Python installieren
Ist Python 3.8 nicht installiert oder bestehen mehrere Python-Umgebungen, wird eine neue Python-3.8-Umgebung mit Miniforge Conda empfohlen.
3.2.1.1 Miniforge Conda installieren
Mit folgendem Befehl im Computerterminal prüfen, ob Miniforge Conda installiert ist. Bei vorhandener Installation kann dieser Schritt entfallen.
conda -V
# Reference output: conda 23.9.0, indicating that Miniforge Conda version is 23.9.0
# If it shows 'conda: command not found', it means Miniforge Conda is not installed.
Ist Miniforge Conda nicht installiert, den Installer über folgenden Verweis herunterladen:
wget -c https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
Anschließend Miniforge Conda mit folgenden Befehlen installieren:
chmod 777 Miniforge3-Linux-x86_64.sh
bash Miniforge3-Linux-x86_64.sh
3.2.1.2 Python-Umgebung mit Miniforge Conda erstellen
Im Computerterminal mit folgendem Befehl in die Basisumgebung von Miniforge conda wechseln:
source ~/miniforge3/bin/activate
# Upon successful activation, the command prompt will change to the following form:
# (base) xxx@xxx:~$
Mit folgendem Befehl eine Python-3.8-Umgebung namens toolkit2 erstellen:
conda create -n toolkit2 python=3.8
Die Umgebung toolkit2 aktivieren; die anschließende Installation von RKNN-Toolkit2 erfolgt in dieser Umgebung.
conda activate toolkit2
# Upon successful activation, the command prompt will change to the following form:
# (toolkit2) xxx@xxx:~$
3.2.2 RKNN-Toolkit2 installieren
Nach Aktivierung von toolkit2 lässt sich RKNN-Toolkit2 über die pip-Paketquelle oder ein lokales Wheel-Paket installieren:
Installation über die pip-Paketquelle
pip install rknn-toolkit2 -i https://pypi.org/simple
# If RKNN-Toolkit2 is already installed, you can upgrade it with the following command:
pip install rknn-toolkit2 -i https://pypi.org/simple --upgrade
Installation über ein lokales Wheel-Paket
# Switch to the rknn-toolkit2 directory
cd Projects/rknn-toolkit2/rknn-toolkit2
# Please choose the appropriate requirements file based on the Python version and processor architecture:
# where cpxx is the Python version
pip install -r packages/x86_64/requirements_cpxx.txt
# pip install -r packages/arm64/arm64_requirements_cpxx.txt
# Install RKNN-Toolkit2
# Please choose the appropriate wheel package file based on the Python version and processor architecture:
# where x.x.x is the RKNN-Toolkit2 version number, cpxx is the Python version
pip install packages/x86_64/rknn_toolkit2-x.x.x-cpxx-cpxx-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# pip install packages/arm64/rknn_toolkit2-x.x.x-cpxx-cpxx-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
3.2.3 Installation der RKNN-Toolkit2-Umgebung prüfen
Folgenden Befehl ausführen. Erscheinen keine Fehler, wurde die RKNN-Toolkit2-Umgebung erfolgreich installiert.
# Switch to Python interactive mode
python
# Import the RKNN class
from rknn.api import RKNN
Bei Installationsfehlern Abschnitt 10.2 „RKNN-Toolkit2 Installation Issue“ in Rockchip_RKNPU_User_Guide_RKNN_SDK_EN.pdf heranziehen. Er enthält ausführliche Lösungen für Installationsprobleme der RKNN-Toolkit2-Umgebung.
3.3 Kompilierwerkzeuge auf dem Computer installieren
3.3.1 CMake installieren
Im Computerterminal folgende Befehle ausführen:
# Update package list
sudo apt update
# Install cmake
sudo apt install cmake
3.3.2 Compiler installieren
3.3.2.1 Systemtyp und Architektur des Entwicklungsboards bestimmen
Im Folgenden wird das Entwicklungsboard der Kürze halber als „Board“ bezeichnet.
1. Den Systemtyp des Boards bestimmen.
Im Computerterminal folgenden Befehl ausführen:
adb shell getprop ro.build.version.release
Ist die Ausgabe eine Zahl (Android-Systemversion), läuft auf dem Board Android.
$ adb shell getprop ro.build.version.release
12
Andernfalls läuft auf dem Board Linux.
$ adb shell getprop ro.build.version.release
/bin/sh: getprop: not_found
1. Die Systemarchitektur des Boards bestimmen. Die wiederholte Nummer folgt dem Original.
Für ein Board mit Android die Systemarchitektur mit folgendem Befehl am Computer abfragen:
adb shell getprop ro.product.cpu.abi
Die folgende Referenzausgabe zeigt arm64-v8a: 64-Bit-ARM-Architektur mit ABI-Version 8.
$ adb shell getprop ro.product.cpu.abi
arm64-v8a
Für ein Board mit Linux die Systemarchitektur mit folgendem Befehl am Computer abfragen:
adb shell uname -a
In der folgenden Referenzausgabe bezeichnet aarch64 die 64-Bit-ARM-Architektur.
$ adb shell uname -a
Linux Rockchip 5.10.160 #183 SMP Tue Oct 24 18:52:11 CST 2023 aarch64 GNU/Linux
3.3.2.2 NDK für ein Board mit Android installieren
Hinweis: Dieser Abschnitt gilt für Boards mit Android. Bei einem Board mit Linux diesen Abschnitt überspringen.
NDK-Downloadadresse (die Quelle empfiehlt r19c): https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip
Softwarepaket entpacken
Das NDK-Paket vorzugsweise im Ordner Projects entpacken. Die Position ist dann wie folgt:
Projects
├── rknn-toolkit2
├── rknn_model_zoo
└── android-ndk-r19c # This path will be used when compiling RKNN C Demo
Damit lautet der Pfad zum NDK-Compiler Projects/android-ndk-r19c.
3.3.2.3 GCC-Cross-Compiler für ein Board mit Linux installieren
Hinweis: Dieser Abschnitt gilt für Boards mit Linux. Bei einem Board mit Android diesen Abschnitt überspringen.
GCC-Downloadadresse
Für ein Board mit 64-Bit-System: https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
Für ein Board mit 32-Bit-System: https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
Softwarepaket entpacken
Das GCC-Paket vorzugsweise im Ordner Projects entpacken. Beispielposition des GCC-Pakets für ein 64-Bit-System:
Projects
├── rknn-toolkit2
├── rknn_model_zoo
└── gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu # This path will be used when compiling the RKNN C Demo
Damit lautet der Pfad zum GCC-Compiler Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu.
3.4 RKNPU2-Umgebung auf dem Board installieren
3.4.1 RKNPU2-Treiberversion prüfen
Die Version des RKNPU2-Treibers kann mit folgendem Befehl auf dem Board abgefragt werden:
dmesg | grep -i rknpu
Die folgende Abbildung zeigt das Quellbeispiel mit RKNPU2-Treiberversion 0.8.8.

Kopierbare Quellprotokoll-Transkription (einschließlich Quellfehlermeldungen; kein ArmSoM-Test):
rk3588_s_evb7:/ $ dmesg | grep -i rknpu
[ 2.919448] [ T1] RKNPU fdab0000.npu: Adding to iommu group 0
[ 2.919608] [ T1] RKNPU fdab0000.npu: RKNPU: rknpu iommu is enabled, using iommu mode
[ 2.920935] [ T1] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdab0000-0xfdabffff]
[ 2.920959] [ T1] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdac0000-0xfdacffff]
[ 2.920973] [ T1] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdad0000-0xfdadffff]
[ 2.921339] [ T1] [drm] Initialized rknpu 0.8.8 20230428 for fdab0000.npu on minor 1
[ 2.924082] [ T1] RKNPU fdab0000.npu: RKNPU: bin=0
[ 2.924994] [ T1] RKNPU fdab0000.npu: leakage=10
[ 2.925052] [ T1] debugfs: Directory 'fdab0000.npu-rknpu' with parent 'vdd_npu_s0' already present!
[ 2.931816] [ T1] RKNPU fdab0000.npu: pvtm=866
[ 2.936313] [ T1] RKNPU fdab0000.npu: pvtm-volt-sel=3
[ 2.937408] [ T1] RKNPU fdab0000.npu: avs=0
[ 2.937608] [ T1] RKNPU fdab0000.npu: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=800000000 h_table=0
[ 2.948777] [ T1] RKNPU fdab0000.npu: failed to find power_model node
[ 2.948814] [ T1] RKNPU fdab0000.npu: RKNPU: failed to initialize power model
[ 2.948826] [ T1] RKNPU fdab0000.npu: RKNPU: failed to get dynamic-coefficient
Abbildung 3-1: Versionsinformationen des RKNPU2-Treibers
Laut Quelle ist der RKNPU2-Treiber in offiziellen Rockchip-Board-Firmwares enthalten. Kann der obige Befehl keine NPU-Treiberversion abfragen, wird möglicherweise Drittanbieter-Firmware ohne diesen Treiber verwendet. Bei vorhandenen Firmwarequellen CONFIG_ROCKCHIP_RKNPU in der Kernelkonfiguration auf y setzen, anschließend den Kerneltreiber neu kompilieren und flashen. Empfohlen wird RKNPU2-Treiberversion >= 0.9.2.
3.4.2 Installation der RKNPU2-Umgebung prüfen
Für die Board-gebundene Debugfunktion von RKNN-Toolkit2 müssen die RKNPU2-Umgebung auf dem Board installiert und der Dienst rknn_server gestartet sein. Zwei grundlegende Begriffe dieser Umgebung:
RKNN Server ist ein Hintergrund-Proxydienst auf dem Entwicklungsboard. Er ruft die passenden Schnittstellen der Board-Runtime auf, verarbeitet die per USB vom Computer übertragenen Daten und liefert die Ergebnisse an den Computer zurück.
Die RKNPU2-Runtime-Bibliothek (librknnrt.so) lädt das RKNN-Modell im System und führt die Modellinferenz über die spezialisierte Neural Processing Unit (NPU) aus.
Sind RKNN Server und Runtime-Bibliothek nicht installiert oder ihre Versionen nicht aufeinander abgestimmt, die RKNPU2-Umgebung neu installieren. Hinweise der Quelle: 1. RKNN-Modelle mit dynamischen Eingabedimensionen benötigen RKNN Server und Runtime-Bibliothek in Version >= 1.5.0. 2. RKNN Server, Runtime und RKNN-Toolkit2 müssen aufeinander abgestimmt sein; die Quelle empfiehlt die neuesten Versionen. Diese Empfehlung beschreibt den Dokumentstand, keine Prüfung heutiger Pakete.
In der Regel ist auf dem Board bereits eine RKNPU2-Umgebung mit abgestimmten Versionen vorinstalliert. Dies mit folgendem Befehl prüfen. Fehlt die Umgebung oder stimmen die Versionen nicht überein, sie gemäß dem nächsten Abschnitt installieren bzw. aktualisieren.
1. Auf dem Board läuft Android
Installation der RKNPU2-Umgebung prüfen
Lässt sich der Dienst rknn_server starten, ist die RKNPU2-Umgebung auf dem Board bereits installiert.
# Switch to the board
adb shell
# Start rknn_server
su
setenforce 0
/vendor/bin/rknn_server &
Die folgende Ausgabe zeigt einen erfolgreichen Start von rknn_server und damit eine installierte RKNPU2-Umgebung:
start rknn server, version: x.x.x
Abstimmung der Versionen prüfen
# Query rknn_server version
strings /vendor/bin/rknn_server | grep -i "rknn_server version"
# Query librknnrt.so library version
# For 64-bit systems
strings /vendor/lib64/librknnrt.so | grep -i "librknnrt version"
# For 32-bit systems
strings /vendor/lib/librknnrt.so | grep -i "librknnrt version"
In der folgenden Ausgabe ist die Version von rknn_server x.x.x und die von librknnrt.so ebenfalls x.x.x.
rknn_server version: x.x.x
librknnrt version: x.x.x
1. Auf dem Board läuft Linux. Die wiederholte Nummer folgt dem Original.
Installation der RKNPU2-Umgebung prüfen
Lässt sich der Dienst rknn_server starten, ist die RKNPU2-Umgebung auf dem Board bereits installiert.
# Switch to the board
adb shell
# Start rknn_server
restart_rknn.sh
Die folgende Ausgabe zeigt einen erfolgreichen Start von rknn_server und damit eine installierte RKNPU2-Umgebung:
start rknn server, version: x.x.x
Abstimmung der Versionen prüfen
# Query rknn_server version
strings /usr/bin/rknn_server | grep -i "rknn_server version"
# Query librknnrt.so library version
strings /usr/lib/librknnrt.so | grep -i "librknnrt version"
In der folgenden Ausgabe ist die Version von rknn_server x.x.x und die von librknnrt.so ebenfalls x.x.x.
rknn_server version: x.x.x
librknnrt version: x.x.x
3.4.3 RKNPU2-Umgebung installieren bzw. aktualisieren
Unterschiedliche Board-Systeme benötigen unterschiedliche RKNPU2-Umgebungen. Nachfolgend werden die Installationsmethoden je System erläutert.
Hinweis: Ist bereits eine RKNPU2-Umgebung mit abgestimmten Versionen installiert, kann dieser Abschnitt entfallen.
1. Auf dem Board läuft Android
In das Verzeichnis rknpu2 wechseln, mit adb die passenden Dateien rknn_server und librknnrt.so auf das Board übertragen und anschließend rknn_server starten. Beispielbefehle:
# Switch to the rknpu2 directory
cd Projects/rknn-toolkit2/rknpu2
# Switch to root user permissions
adb root
# Remount the file system as read-write
adb remount
# Push the rknn_server executable
# Note: In a 64-bit Android system, BOARD_ARCH corresponds to the arm64 directory; in 32-bit systems, it corresponds to the arm directory.
adb push runtime/Android/rknn_server/${BOARD_ARCH}/rknn_server /vendor/bin/
# Push the librknnrt.so library
# For 64-bit systems
adb push runtime/Android/librknn_api/arm64-v8a/librknnrt.so /vendor/lib64/
# For 32-bit systems
adb push runtime/Android/librknn_api/armeabi-v7a/librknnrt.so /vendor/lib/
# Switch to the board
adb shell
# Grant executable permissions
chmod +x /vendor/bin/rknn_server
# Restart the rknn_server service
su
setenforce 0
/vendor/bin/rknn_server &
1. Auf dem Board läuft Linux. Die wiederholte Nummer folgt dem Original.
In das Verzeichnis rknpu2 wechseln, mit adb die passenden Dateien rknn_server und librknnrt.so auf das Board übertragen und anschließend rknn_server starten. Beispielbefehle:
# Switch to the rknpu2 directory
cd Projects/rknn-toolkit2/rknpu2
# Push rknn_server to the board
# Note: In 64-bit Linux systems, BOARD_ARCH corresponds to the aarch64 directory. in 32-bit systems, it corresponds to the armhf directory.
adb push runtime/Linux/rknn_server/${BOARD_ARCH}/usr/bin/* /usr/bin
# Push librknnrt.so
adb push runtime/Linux/librknn_api/${BOARD_ARCH}/librknnrt.so /usr/lib
# Switch to the board
adb shell
# Grant executable permissions
chmod +x /usr/bin/rknn_server
chmod +x /usr/bin/start_rknn.sh
chmod +x /usr/bin/restart_rknn.sh
# Restart the rknn_server service
restart_rknn.sh
4 Beispielprogramme ausführen
Dieses Kapitel erläutert den schnellen Start der Beispielprogramme auf dem Board in drei Teilen:
Einführung in RKNN Model Zoo
RKNN Python Demo ausführen
RKNN C Demo ausführen
4.1 Einführung in RKNN Model Zoo
RKNN Model Zoo stellt Beispielcode bereit, mit dem verbreitete Modelle rasch auf Rockchip-Entwicklungsboards ausgeführt werden können. Projektstruktur:
rknn_model_zoo
├── 3rdparty # Third-party libraries
├── datasets # Datasets
├── examples # Example code
├── utils # Commonly used methods
├── build-android.sh # Compilation script for Android system board
├── build-linux.sh # Compilation script for Linux system board
└── ...
Unter examples befinden sich verbreitete Modelle wie MobileNet und YOLO. Für jedes Modell liegen Python- und C/C++-Beispiele vor, im Folgenden RKNN Python Demo und RKNN C Demo genannt. Beispielstruktur für das YOLOv5-Modell:
rknn_model_zoo
├── examples
│ └── yolov5
│ ├── cpp # C/C++ version of the sample code
│ ├── model # Models, test images, and other files
│ ├── python # Python version of the sample code
│ └── README.md
└── ...
4.2 RKNN Python Demo ausführen
Die Verwendung von RKNN Python Demo wird am Beispiel von YOLOv5 erläutert.
Hinweis: Unterschiedliche RKNN Python Demos können sich in der Verwendung unterscheiden. Den Anweisungen in der jeweiligen README.md folgen.
4.2.1 Modell vorbereiten
Nach rknn_model_zoo/examples/yolov5/model wechseln und download_model.sh ausführen. Das Skript lädt ein verfügbares YOLOv5-ONNX-Modell und speichert es im aktuellen model-Verzeichnis. Beispielbefehle:
# Switch to the rknn_model_zoo/examples/yolov5/model directory
cd Projects/rknn_model_zoo/examples/yolov5/model
# Run the download_model.sh script to download the yolov5 ONNX model
# For example, the downloaded ONNX model is stored at model/yolov5s_relu.onnx
./download_model.sh
4.2.2 Modell konvertieren
Nach rknn_model_zoo/examples/yolov5/python wechseln und convert.py ausführen. Das Skript konvertiert das ursprüngliche ONNX-Modell in ein RKNN-Modell. Beispielbefehle:
# Switch to the rknn_model_zoo/examples/yolov5/python directory
cd Projects/rknn_model_zoo/examples/yolov5/python
# Run the convert.py script to convert the original ONNX model to RKNN format
# Usage: python convert.py model_path [rk3566|rk3588|rk3562] [i8/fp] [output_path]
python convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn
4.2.3 RKNN Python Demo ausführen
Nach rknn_model_zoo/examples/yolov5/python wechseln und yolov5.py ausführen. Das YOLOv5-Modell läuft über die Board-gebundene Debugfunktion auf dem Entwicklungsboard. Beispielbefehl:
# Switch to the Projects/rknn_model_zoo/examples/yolov5/python directory
cd Projects/rknn_model_zoo/examples/yolov5/python
# Run the yolov5.py script to execute YOLOv5 model on the edge device
# Usage: python yolov5.py --model_path {rknn_model} --target {target_platform} --img_show
# If the --img_show parameter is included, the result image will be displayed
# Note: Here, the example is for the rk3588 platform. if using a different board, modify the platform type in the command accordingly
python yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3588 --img_show
# If you want to run the original onnx model on the computer first, you can use the following command
# Usage: python yolov5.py --model_path {onnx_model} --img_show
python yolov5.py --model_path ../model/yolov5s_relu.onnx --img_show
Das voreingestellte Eingabebild ist model/bus.jpg; das Ausgabebild ist nachfolgend dargestellt:

Abbildung 4-1: Ausgabebild von RKNN Python Demo
4.2.4 Genauigkeit bewerten (optional)
Unter rknn_model_zoo/datasets liegen Datensätze zur Genauigkeitsbewertung. Diese müssen zunächst heruntergeladen und dort gespeichert werden. Für YOLOv5 wird beispielsweise COCO benötigt. In rknn_model_zoo/datasets/COCO download_eval_dataset.py ausführen; es lädt val2017 in das aktuelle COCO-Verzeichnis. Beispielbefehle:
# Switch to the rknn_model_zoo/datasets/COCO directory
cd Projects/rknn_model_zoo/datasets/COCO
# Run the download_eval_dataset.py script to download the COCO dataset
python download_eval_dataset.py
Zur Genauigkeitsbewertung –coco_map_test und den Datensatzpfad über –img_folder angeben. Beispielbefehle; der visuelle Umbruch im Namen –img_folder wurde zusammengefügt:
# Please install pycocotools first
pip install pycocotools
# Switch to the rknn_model_zoo/examples/yolov5/python directory
cd Projects/rknn_model_zoo/examples/yolov5/python
# Run the yolov5.py script
python yolov5.py \
--model_path ../model/yolov5s_relu.rknn \
--target rk3588 \
--img_folder ../../../datasets/COCO/val2017 \
--coco_map_test
4.3 RKNN C Demo ausführen
Die Verwendung von RKNN C Demo wird am Beispiel von YOLOv5 erläutert.
Hinweis: Unterschiedliche RKNN C Demos können sich in der Verwendung unterscheiden. Den Anweisungen in der jeweiligen README.md folgen.
4.3.1 Modell vorbereiten
Nach rknn_model_zoo/examples/yolov5/model wechseln und download_model.sh ausführen. Das Skript lädt ein verfügbares YOLOv5-ONNX-Modell und speichert es im aktuellen model-Verzeichnis. Beispielbefehle:
# Switch to the rknn_model_zoo/examples/yolov5/model directory
cd Projects/rknn_model_zoo/examples/yolov5/model
# Run the download_model.sh script to download the yolov5 ONNX model
# For example, the downloaded ONNX model is stored at model/yolov5s_relu.onnx
./download_model.sh
4.3.2 Modell konvertieren
Nach rknn_model_zoo/examples/yolov5/python wechseln und convert.py ausführen. Das Skript konvertiert das ursprüngliche ONNX-Modell in ein RKNN-Modell. Beispielbefehle:
# Switch to the rknn_model_zoo/examples/yolov5/python directory
cd Projects/rknn_model_zoo/examples/yolov5/python
# Run the convert.py script to convert the original ONNX model to RKNN format
# Usage: python convert.py model_path [rk3566|rk3588|rk3562] [i8/fp] [output_path]
python convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn
4.3.3 RKNN C Demo ausführen
Für RKNN C Demo zunächst den C/C++-Quellcode in eine ausführbare Datei kompilieren. Danach diese Datei, Modelle, Eingabebilder und weitere benötigte Dateien auf das Board übertragen und dort die ausführbare Datei starten.
Die Ausführung unterscheidet sich je nach Board-System. Nachfolgend wird sie anhand von RK3588 mit Android und RK356x mit Linux erläutert.
4.3.3.1 Kompilierung
Auf dem Board läuft Android
Für RK3588 mit Android und arm64-v8a-Architektur wird build-android.sh aus rknn_model_zoo verwendet. Vor dem Aufruf ANDROID_NDK_PATH auf den lokalen NDK-Compilerpfad setzen. Dazu folgende Zeile in build-android.sh einfügen:
# Add the following line to the beginning of the 'build-android.sh' script
ANDROID_NDK_PATH=Projects/android-ndk-r19c
Anschließend build-android.sh im Verzeichnis rknn_model_zoo mit folgendem Befehl ausführen:
# Switch to the rknn_model_zoo directory
cd Projects/rknn_model_zoo
# Run the build-android.sh script
# Usage: ./build-android.sh -t <target> -a <arch> -d <build_demo_name> [-b <build_type>] [-m]
# -t : target (rk356x/rk3588) # Platform type
# -a : arch (arm64-v8a/armeabi-v7a) # Edge device system architecture
# -d : demo name # Corresponding to the name of the subfolders under the examples directory, such as yolov5, MobileNet
# -b : build_type (Debug/Release)
# -m : enable address sanitizer, build_type needs to be set to Debug
./build-android.sh -t rk3588 -a arm64-v8a -d yolov5
Auf dem Board läuft Linux
Für RK356x mit Linux und aarch64-Architektur wird build-linux.sh aus rknn_model_zoo verwendet. Vor dem Aufruf GCC_COMPILER auf den lokalen GCC-Compilerpfad setzen. Dazu folgende Zeile in build-linux.sh einfügen:
# Add the following line to the beginning of the 'build-linux.sh' script
GCC_COMPILER=Projects/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
Anschließend build-linux.sh im Verzeichnis rknn_model_zoo mit folgendem Befehl ausführen:
# Switch to the rknn_model_zoo directory
cd Projects/rknn_model_zoo
# Run the build-linux.sh script
# Usage: ./build-linux.sh -t <target> -a <arch> -d <build_demo_name> [-b <build_type>] [-m]
# -t : target (rk356x/rk3588) # Platform type, rk3568/rk3566 are both unified as rk356x
# -a : arch (aarch64/armhf) # Edge device system architecture
# -d : demo name # Corresponding to the name of the subfolders under the examples directory, such as yolov5, MobileNet
# -b : build_type(Debug/Release)
# -m : enable address sanitizer, build_type needs to be set to Debug
./build-linux.sh -t rk356x -a aarch64 -d yolov5
4.3.3.2 Dateien auf das Board übertragen
Nach der Kompilierung entsteht unter rknn_model_zoo ein install-Verzeichnis. Es enthält die ausführbare Datei und zugehörige Dateien wie Eingabebilder. Verzeichnisstruktur:
install
├── rk356x_linux_aarch64 # rk356x platform
└── rk3588_android_arm64-v8a # rk3588 platform
└── rknn_yolov5_demo
├── lib # Dependency library
├── model # Store models, test images and other files
└── rknn_yolov5_demo # Executable file
Die Dateiübertragung auf das Board unterscheidet sich je nach Systemtyp.
Auf dem Board läuft Android
Für RK3588 mit Android:
# Switch to the rknn_model_zoo directory
cd Projects/rknn_model_zoo
# Switch to root user permissions
adb root
# Push the entire rknn_yolov5_demo folder to the board
# Note: The rknn_yolov5_demo folder contains an executable file with the same name, rknn_yolov5_demo
# Note: When using different models and platforms, it is recommended to find the corresponding path directly under the 'install' directory
adb push install/rk3588_android_arm64-v8a/rknn_yolov5_demo/ /data/
Auf dem Board läuft Linux
Für RK356x mit Linux:
# Switch to the rknn_model_zoo directory
cd Projects/rknn_model_zoo
# Push the entire rknn_yolov5_demo folder to the board
# Note: The rknn_yolov5_demo folder contains an executable file with the same name, rknn_yolov5_demo
# Note: When using different models and platforms, it is recommended to find the corresponding path directly under the 'install' directory
adb push install/rk356x_linux_aarch64/rknn_yolov5_demo /data/
4.3.3.3 Demo auf dem Entwicklungsboard starten
Mit folgenden Befehlen die ausführbare Datei auf dem Board starten:
# Switch to the board
adb shell
# Switch to the rknn_yolov5_demo directory
cd /data/rknn_yolov5_demo/
# Set the library dependency environment
export LD_LIBRARY_PATH=./lib
# Run the executable file
# Usage: ./rknn_yolov5_demo <model_path> <input_path>
./rknn_yolov5_demo model/yolov5s_relu.rknn model/bus.jpg
4.3.3.4 Ergebnisse anzeigen
Das Ausgabebild wird standardmäßig unter rknn_yolov5_demo/out.png gespeichert. Mit adb vom Board auf den Computer übertragen. Dazu im lokalen Computerterminal folgenden Befehl ausführen:
# Pull to the local current directory
adb pull /data/rknn_yolov5_demo/out.png .
Ausgabebild:

Abbildung 4-2: Ausgabebild von RKNN C Demo
5 RKNN Python Demo in Docker ausführen (optional)
Für die Ausführung von RKNN Python Demo in Docker die Entwicklungsumgebung gemäß diesem Kapitel vorbereiten.
Das bereitgestellte Docker-Image enthält die RKNN-Toolkit2-Umgebung, sodass RKNN Python Demo ohne eigene Installation der Umgebung gestartet werden kann. Es enthält jedoch ausschließlich eine saubere RKNN-Toolkit2-Umgebung und ist speziell für RKNN Python Demo vorgesehen.
Das Kapitel besteht aus drei Teilen:
Docker installieren
RKNN-Toolkit2-Umgebung in Docker installieren
RKNN Python Demo ausführen
5.1 Docker installieren
Ist Docker bereits installiert, kann dieser Schritt entfallen. Andernfalls der offiziellen Installationsdokumentation folgen.
Offizielle Docker-Installationsanleitung: https://docs.docker.com/install/linux/docker-ce/ubuntu/
Hinweis: Der Benutzer muss der Gruppe docker hinzugefügt werden.
# Create the docker group
sudo groupadd docker
# Add the current user to the docker group
sudo usermod -aG docker $USER
# Update to activate the docker group
newgrp docker
# Verify that docker commands can be executed without sudo
docker run hello-world
Referenzausgabe nach erfolgreicher Installation:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
5.2 RKNN-Toolkit2-Umgebung in Docker installieren
5.2.1 RKNN-Toolkit2-Image vorbereiten
Nachfolgend werden zwei Wege zum Erstellen der RKNN-Toolkit2-Image-Umgebung beschrieben. Einer davon kann gewählt werden.
1. RKNN-Toolkit2-Image mit einer Dockerfile erstellen
Im RKNN-Toolkit2-Projekt enthält docker/docker_file eine Dockerfile zum Erstellen der Entwicklungsumgebung. Das Image wie folgt mit docker build erstellen:
# Note: Replace 'xx' and 'x.x.x' with the actual version numbers
cd Projects/rknn-toolkit2/rknn-toolkit2/docker/docker_file/ubuntu_xx_xx_cpxx
docker build -f Dockerfile_ubuntu_xx_xx_for_cpxx -t rknn-toolkit2:x.x.x-cpxx .
2. RKNN-Toolkit2-Image aus einer vorgefertigten Docker-Image-Datei laden
Die Projektdateien der passenden RKNN-Toolkit2-Version über folgenden Link herunterladen und entpacken. Unter docker/docker_image befindet sich ein vorgefertigtes Docker-Image mit der gesamten Entwicklungsumgebung.
Cloud-Downloadlink: https://console.zbox.filez.com/l/I00fc3 (Abrufcode: rknn).
Mit folgendem Befehl die Image-Datei der passenden Python-Version laden.
# Note: Replace 'x.x.x' with the actual version number of RKNN-Toolkit2, and 'cpxx' with the Python version
docker load --input rknn-toolkit2-x.x.x-cpxx-docker.tar.gz
5.2.2 Image-Informationen abfragen
Nach erfolgreichem Erstellen oder Laden eines Images dessen Informationen mit folgendem Befehl anzeigen:
docker images
Beispielinformationen zum RKNN-Toolkit2-Image:
REPOSITORY TAG IMAGE ID CREATED SIZE
rknn-toolkit2 x.x.x-cpxx xxxxxxxxxxxx 1 hours ago 5.89GB
5.3 RKNN Python Demo ausführen
Hinweis: Sicherstellen, dass die RKNPU2-Umgebung auf dem Board installiert ist. Andernfalls zur Installation Abschnitt 3.4 heranziehen.
Dateien einbinden und Container starten
Das RKNN-Model-Zoo-Projekt gemäß Abschnitt 3.1 lokal herunterladen. Anschließend in den Container einbinden und diesen mit docker run starten. Danach wird in die bash-Umgebung des Containers gewechselt. Beispielbefehle:
# Use the docker run command to create and run the RKNN Toolkit2 container
# Map local files into the container by attaching the -v <host src folder>:<image dst folder> parameter
docker run -t -i --privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v /Projects/rknn_model_zoo:/rknn_model_zoo \
rknn-toolkit2:x.x.x-cpxx \
/bin/bash
Modell vorbereiten
Nach rknn_model_zoo/examples/yolov5/model wechseln und download_model.sh ausführen. Das Skript lädt ein verfügbares YOLOv5-ONNX-Modell und speichert es im aktuellen model-Verzeichnis. Beispielbefehle:
# Switch to the rknn_model_zoo/examples/yolov5/model directory
cd rknn_model_zoo/examples/yolov5/model
# Run the download_model.sh script to download the yolov5 onnx model
./download_model.sh
# For example, the downloaded onnx model will be stored at model/yolov5s_relu.onnx
Modell konvertieren
Nach rknn_model_zoo/examples/yolov5/python wechseln und convert.py ausführen. Das Skript konvertiert das ursprüngliche ONNX-Modell in ein RKNN-Modell. Beispielbefehle:
# Switch to the rknn_model_zoo/examples/yolov5/python directory
cd Projects/rknn_model_zoo/examples/yolov5/python
# Run the convert.py script to convert the original ONNX model to RKNN format
# Usage: python convert.py model_path [rk3566|rk3588|rk3562] [i8/fp] [output_path]
python convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn
RKNN Python Demo ausführen
Nach rknn_model_zoo/examples/yolov5/python wechseln und yolov5.py ausführen. Das YOLOv5-Modell läuft über die Board-gebundene Debugfunktion auf dem Entwicklungsboard. Beispielbefehl:
# Switch to the rknn_model_zoo/examples/yolov5/python directory
cd rknn_model_zoo/examples/yolov5/python
# Run the yolov5.py script to run the yolov5 model on the board
# Usage: python yolov5.py --model_path {rknn_model} --target {target_platform}
# Note: Here, we use rk3588 as an example platform. If using a different board, modify the platform type in the command accordingly.
python yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3588
Nach erfolgreicher Skriptausführung erscheint folgende Ausgabe. class bezeichnet die vorhergesagte Kategorie, score den Konfidenzwert; (xmin, ymin) sind die Koordinaten der linken oberen, (xmax, ymax) der rechten unteren Ecke des Erkennungsrahmens.
# class @ (xmin, ymin, xmax, ymax)score
person @ (209 244 286 506) 0.884
person @ (478 238 559 526) 0.868
person @ (110 238 230 534) 0.825
bus @ (94 129 553 468) 0.705
person @ (79 354 122 516) 0.339
6 Häufig gestellte Fragen
6.1 adb devices zeigt kein Gerät an
Folgende Maßnahmen können zur Behebung versucht werden:
1. Die Verbindung prüfen, das Datenkabel erneut anschließen und einen anderen USB-Port am Computer oder ein anderes Datenkabel versuchen.
2. Beim USB-Anschluss des Entwicklungsboards darf gleichzeitig nur ein adb server auf Computer und Docker-Container aktiv sein. Soll das Board beispielsweise im Container verbunden werden, mit adb kill-server im Computerterminal den lokalen adb server beenden.
3. Die folgende Fehlermeldung bedeutet, dass adb nicht installiert ist. Zur Installation sudo apt install adb ausführen.
command 'adb' not found, but can be installed with:
sudo apt install adb
6.2 Dienst rknn_server manuell starten
Für die Board-gebundene Debugfunktion von RKNN-Toolkit2 müssen die RKNPU2-Umgebung auf dem Board installiert und der Dienst rknn_server gestartet sein.
Auf manchen Boards startet rknn_server nach dem Einschalten oder Neustart nicht automatisch. RKNN Python Demo kann dann etwa E init_runtime: The rknn_server on the connected device is abnormal melden. In diesem Fall auf das Board wechseln und den Dienst gemäß Abschnitt 3.4.2 „Installation der RKNPU2-Umgebung prüfen“ manuell starten.
7 Referenzdokumentation
Ausführliche Hinweise zur Verwendung und zu den Schnittstellen von RKNN-Toolkit2 und RKNPU2 stehen in Rockchip_RKNPU_User_Guide_RKNN_SDK_EN.pdf.
