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
- Umgebung und Objektlebenszyklus
- Modellkonfiguration und Quantisierungsparameter
- Caffe, TensorFlow, ONNX und PyTorch laden
- Aufbau, hybride Quantisierung und Export
- Laufzeit, Operatorregistrierung und Inferenz
- Genauigkeit, Leistung, Speicher und Geräteabfragen
- C++-Bereitstellungsbeispiele erzeugen, bauen und ausführen
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.
