Rockchip · AI & Linux Hub

KI-Inferenz

RKNN-Toolkit2 Python API V2.5.0 — Aufbau, hybride Quantisierung und Export

RKNN-Toolkit2 Python API V2.5.0 — Aufbau, hybride Quantisierung und Export | Vollständige Parameter, Beispiele und Plattformgrenzen

· ArmSoM · 6 Min. Lesezeit

Plattform und Quelle

Dieser Artikel basiert auf dem RKNN-V2.5.0-PDF des Herstellers und gilt nur für die dort genannten Chips und Schnittstellen. Bei ArmSoM-Boards zuerst SoC, NPU-Treiber, Toolkit/Runtime, SDK/BSP und Kernelversion prüfen. Eine ArmSoM-Hardwareprüfung wurde nicht durchgeführt; Beispiele und Messwerte stammen aus der Quelle, nicht aus ArmSoM-Tests.

Seriennavigation

5 APIs für Modellaufbau und Quantisierung

5.1 RKNN-Modell aufbauen

API build
Beschreibung Aus dem importierten Modell das entsprechende RKNN-Modell erstellen.
Parameter do_quantization: Gibt an, ob das Modell quantisiert werden soll. Standardwert: True.
Parameter dataset: Eingabedatensatz zur Kalibrierung der Quantisierungsparameter. Unterstützt wird eine Textdatei, in der Pfade zu Kalibrierungsbildern (jpg oder png) oder npy-Dateien stehen. Pro Zeile ein Pfad, beispielsweise:
a.jpg
b.jpg
oder
a.npy
b.npy
Bei mehreren Eingaben werden die zugehörigen Dateien durch Leerzeichen getrennt, etwa:
a.jpg a2.jpg
b.jpg b2.jpg
oder
a.npy a2.npy
b.npy b2.npy
Hinweis: Im Allgemeinen sollten die Quantisierungsbilder dem späteren Vorhersageszenario entsprechen.
Parameter rknn_batch_size: Passt die Batch-Größe der Eingabe an. Standardwert: None.
Bei Werten größer als 1 kann die NPU mehrere Eingabebilder oder Datensätze in einem Inferenzlauf verarbeiten. Beispielsweise hat MobileNet ursprünglich die Eingabeform [1, 224, 224, 3] und Ausgabeform [1, 1001]. Bei rknn_batch_size = 4 werden daraus [4, 224, 224, 3] und [4, 1001].
Hinweise:
1. rknn_batch_size verbessert die Leistung (Kernauslastung) nur auf NPU-Mehrkernplattformen. Der Wert sollte daher der Anzahl der NPU-Kerne entsprechen.
2. Eine Änderung von rknn_batch_size verändert die Eingabe- und Ausgabeformen. Die Eingaben für inference müssen die richtige Größe besitzen; auch die zurückgegebenen Ausgaben sind in der Nachverarbeitung entsprechend zu behandeln.
Parameter auto_hybrid: Aktiviert die automatische gemischte Quantisierung zur Anpassung der Genauigkeit oder Behandlung von Überläufen. Standardwert: False, also keine Anpassung. Während der Modellquantisierung wandelt auto_hybrid Operationen, deren Kosinusabstand und euklidischer Abstand unter den festgelegten Schwellenwerten liegen, in FP16-Berechnungen um (derzeit nur bei ‘w8a8’-Quantisierung unterstützt). Wird das Modell nicht quantisiert, wandelt auto_hybrid Operationen außerhalb des FP16-Wertebereichs in INT16-Berechnungen um.
Hinweis:
1. Die Schwellenwerte lassen sich über auto_hybrid_cos_thresh und auto_hybrid_euc_thresh der Schnittstelle config festlegen.
Rückgabewert 0: Erstellung erfolgreich.
Rückgabewert -1: Erstellung fehlgeschlagen.

Beispielcode:

# Build and quantize RKNN model
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')

5.2 Hybride Quantisierung

5.2.1 hybrid_quantization_step1

In der ersten Phase der hybriden Quantisierung wird hybrid_quantization_step1 aufgerufen. Die Schnittstelle erzeugt die temporäre Modelldatei (.model), die Datendatei (.data) und die Quantisierungskonfiguration (.quantization.cfg). Schnittstellendetails:

API hybrid_quantization_step1
Beschreibung Aus dem geladenen ursprünglichen Modell werden entsprechende temporäre Modelldateien, Datendateien und Quantisierungskonfigurationen erzeugt.
Parameter dataset: Siehe 5.1 „RKNN-Modell aufbauen“.
Parameter rknn_batch_size: Siehe 5.1 „RKNN-Modell aufbauen“.
Parameter proposal: Erzeugt Konfigurationsvorschläge für gemischte Quantisierung. Standardwert: False.
Parameter proposal_dataset_size: Größe des für proposal verwendeten Datensatzes. Standardwert: 1. Da proposal zeitaufwendig ist, beträgt die voreingestellte Größe 1.
Parameter custom_hybrid: Teilgraphen für hybride Quantisierung anhand mehrerer benutzerdefinierter Ein-/Ausgabenamenpaare wählen. Format [[input0_name, output0_name], [input1_name, output1_name], …]. Standard None.
Hinweis: Namen anhand der temporären Modelldatei (.model) wählen.
Rückgabewert 0: Erfolgreich.
Rückgabewert -1: Fehlgeschlagen.

Beispielcode:

# Call hybrid_quantization_step1 to generate quantization config
ret = rknn.hybrid_quantization_step1(dataset='./dataset.txt')

5.2.2 hybrid_quantization_step2

Zur Erzeugung des gemischt quantisierten RKNN-Modells wird hybrid_quantization_step2 aufgerufen. Schnittstellendetails:

API hybrid_quantization_step2
Beschreibung Nimmt die temporäre Modelldatei, Datendatei, Quantisierungskonfiguration und den Kalibrierdatensatz entgegen und erzeugt daraus ein gemischt quantisiertes RKNN-Modell.
Parameter model_input: Pfad zur von hybrid_quantization_step1 erzeugten temporären Modelldatei (.model).
Parameter data_input: Pfad zur von hybrid_quantization_step1 erzeugten Modelldatendatei (.data).
Parameter model_quantization_cfg: Pfad zur von hybrid_quantization_step1 erzeugten geänderten Quantisierungskonfigurationsdatei (.quantization.cfg).
Rückgabewert 0: Erfolgreich.
Rückgabewert -1: Fehlgeschlagen.

Beispielcode:

# Call hybrid_quantization_step2 to generate hybrid quantized RKNN model
ret = rknn.hybrid_quantization_step2(
               model_input='./ssd_mobilenet_v2.model',
               data_input='./ssd_mobilenet_v2.data',
               model_quantization_cfg='./ssd_mobilenet_v2.quantization.cfg')

6 RKNN-Modell exportieren

Das über build erstellte RKNN-Modell kann zur Bereitstellung in einer Datei gespeichert werden.

API export_rknn
Beschreibung RKNN-Modell in der angegebenen Datei speichern (Endung “.rknn”).
Parameter export_path: Pfad zur erzeugten RKNN-Modelldatei.
Rückgabewert 0: Export erfolgreich.
Rückgabewert -1: Export fehlgeschlagen.

Beispielcode:

# save the built RKNN model as a mobilenet_v1.rknn file in the current path
ret = rknn.export_rknn(export_path='./mobilenet_v1.rknn')

Quelle und redaktionelle Hinweise

Technische Kapitel sind nach Anwendung aufgeteilt. Code, Bezeichner und Parameter bleiben erhalten. Chinesisch folgt der chinesischen Quelle, Englisch, Russisch und Deutsch der englischen. Für Kapitel ohne Abbildungen wurden keine erfundenen Bilder hinzugefügt.

Redaktionelle Hinweise: Protokolle mit SDK 1.5.2 bleiben historische Beispiele, keine V2.5.0-Messungen. Die Python-Zelle für Ubuntu20.04 unterscheidet sich: chinesisch 3.8/3.9, englisch 3.8/3.8; ebenso für Debian11; im ARM64-Abschnitt ist Debian weiterhin als x64 bezeichnet. Quellwerte bleiben erhalten; tatsächliches Installationspaket prüfen. V2.5.0 ergänzt C++ codegen und präzisiert Quantisierung und Speicherstrategien; alte Parameter ersetzen nicht die neue Quelle.

RKNN-Toolkit2 · ArmSoM documentation

Dieses Thema entdecken → · Lernpfade →