CNN-modellen uitvoeren op RK3576
Converteer YOLO11n op een Ubuntu-pc, implementeer het via SSH/SCP op RK3576 en controleer C++- en Python-inferentie op de ingebouwde NPU.
Snelstart: CNN-modellen uitvoeren op RK3576
Deze handleiding behandelt NPU-stuurprogramma controleren → Runtime en Toolkit Lite2 installeren → model op pc converteren → C++ bouwen en implementeren → inferentie op het board. Het voorbeeld gebruikt YOLO11n uit RKNN Model Zoo op de ingebouwde NPU van RK3576, via SSH/SCP of een lokale terminal op het board.
#Voordat je begint
| Onderdeel | Configuratie en geteste omgeving |
|---|---|
| PC | Ubuntu 20.04.6 LTS,x86_64,Python 3.11 |
| Board | reComputer RK3576, aarch64 |
| Besturingssysteem van het board | Debian 12 / Armbian 26.05.0-trunk |
| Kernel van het board | 6.1.115-vendor-seeed-rk3576 |
| NPU-stuurprogramma | Getest met 0.9.8 |
| Toolversies | RKNN-Toolkit2 / Toolkit Lite2 2.3.2 |
| Runtime | Deze handleiding installeert librknnrt.so 2.3.2 |
| Voorbeeld | YOLO11n, 640 × 640, INT8-kwantisatie |
| Conversie- / builddoel | rk3576 / rk3576 + aarch64 |
Waar voer je opdrachten uit: ‘Op pc’ betekent de Ubuntu-ontwikkelcomputer; ‘Op het board’ een SSH-sessie of de lokale terminal. BOARD_IP is een tijdelijke aanduiding: vervang die door het LAN-IP-adres van je board.
Als SSH nog niet is ingeschakeld op het board, voer dan eerst lokaal op het board uit:
sudo apt update
sudo apt install openssh-server
sudo systemctl enable --now ssh
hostname -IMaak daarna vanaf de pc verbinding. Controleer bij de eerste verbinding de hostvingerafdruk en voer op verzoek je wachtwoord in:
ssh rk3576@BOARD_IP#1. Een ontbrekend NPU-stuurprogramma oplossen
#1.1 Kernelstuurprogramma versus gebruikerssoftware
Het NPU-stuurprogramma van RK3576 is RKNPU in de kernel, ingesteld via CONFIG_ROCKCHIP_RKNPU. Noch het Runtime-.so-bestand, noch het Python-wheel van Toolkit Lite2 kan het kernelstuurprogramma vervangen.
#1.2 Stuurprogramma, apparaatknooppunt en belasting controleren
Op het board:
uname -r
sudo dmesg | grep -i rknpu
sudo cat /sys/kernel/debug/rknpu/version
sudo cat /sys/kernel/debug/rknpu/load
ls -l /sys/class/drm/renderD*/device/driverFragment uit de werkelijke testuitvoer:
RKNPU driver: v0.9.8
NPU load: Core0: 0%, Core1: 0%,
/sys/class/drm/renderD129/device/driver -> .../bus/platform/drivers/RKNPUrenderD129 was het NPU-knooppunt in deze test, geen vast nummer. Herken het aan de verwijzing van device/driver naar RKNPU. Andere render-knooppunten kunnen bij de beeldschermcontroller of GPU horen; alleen de aanwezigheid van /dev/dri bewijst niet dat de NPU werkt.
Als debugfs niet is aangekoppeld, voer dan eerst uit:
mountpoint -q /sys/kernel/debug || sudo mount -t debugfs debugfs /sys/kernel/debugProbeer de versiecontrole daarna opnieuw. Alleen een ontbrekend debugfs-querybestand bewijst niet dat het stuurprogramma ontbreekt; controleer ook opstartlogboeken en de stuurprogrammakoppeling.
Controleer de kernelconfiguratie op het board:
grep '^CONFIG_ROCKCHIP_RKNPU=' /boot/config-$(uname -r)Werkelijke uitvoer:
CONFIG_ROCKCHIP_RKNPU=y=y betekent ingebouwd in de kernel; als rknpu niet in lsmod staat, is het stuurprogramma dus niet noodzakelijk afwezig. De officiële snelstart van RKNN SDK V2.3.2 beveelt RKNPU 0.9.2 of hoger aan; hier is inferentie met 0.9.8 geverifieerd.
#1.3 Als het stuurprogramma ontbreekt of moet worden bijgewerkt
Deze handleiding gebruikt de Seeed/Armbian-kernel voor reComputer RK3576. Als de stuurprogrammacontroles slagen, ga dan direct naar sectie 2 zonder de kernel opnieuw te installeren.
Controleer op hetzelfde boardmodel, met de Seeed-pakketbron ingesteld, eerst de kernel- en device-tree-pakketten:
sudo apt update
apt-cache policy linux-image-vendor-seeed-rk3576 linux-dtb-vendor-seeed-rk3576Controleer of beide pakketten uit de juiste bron voor dit board komen en of hun kandidaatversies overeenkomen. Installeer of werk daarna de passende kernel en device tree bij:
sudo apt install --reinstall linux-image-vendor-seeed-rk3576 linux-dtb-vendor-seeed-rk3576
sudo rebootDit onderhoud wijzigt de opstartkernel en verbreekt SSH. Controleer na opnieuw aanmelden sectie 1.2; een geslaagde installatieopdracht bewijst niet dat het stuurprogramma werkt.
Als deze pakketten ontbreken, gebruik dan een fabrikantsimage of BSP voor precies dit boardmodel. Installeer geen kernel van een ander board, kopieer rknpu.ko niet willekeurig en gebruik geen RK182x-DKMS-pakketten. Schakel voor een eigen BSP CONFIG_ROCKCHIP_RKNPU=y in de passende kernel in, behoud de juiste NPU-device tree en volg de build- en implementatiestappen van dat BSP. Kernel en device tree zijn boardspecifiek en kunnen niet met pip install van Toolkit worden aangevuld.
#2. Runtime en Toolkit Lite2 installeren en controleren
#2.1 De drie componenten
| Component | Installatielocatie | Hoofdtaak |
|---|---|---|
| RKNN-Toolkit2 | Afzonderlijke Python-omgeving op Ubuntu-pc | ONNX converteren en kwantiseren tot .rknn |
RKNN Runtime / librknnrt.so | RK3576-board | C/C++-API voor modellen laden en NPU-inferentie uitvoeren |
| RKNN-Toolkit-Lite2 | Python-omgeving op RK3576-board | Python-inferentie-API; vereist Runtime en stuurprogramma op het board |
Importeer op de pc from rknn.api import RKNN en op het board Lite2 met from rknnlite.api import RKNNLite. Lite2 voert inferentie uit, maar converteert ONNX niet naar RKNN; het C++-voorbeeld is niet afhankelijk van Lite2.
Deze handleiding draagt bestanden over met SCP en voert ze op het board uit. USB-inferentie vanaf de pc wordt niet gebruikt; rknn_server hoeft niet te draaien.
#2.2 Vaste revisies van de officiële repositories op de pc ophalen
Secties 3 en 4 gebruiken dezelfde twee mappen; kloon ze eenmalig in een nieuwe werkmap.
Op pc:
sudo apt update
sudo apt install git wget cmake make gcc g++ openssh-client
mkdir -p ~/RKNN2_Project
cd ~/RKNN2_Project
git clone https://github.com/airockchip/rknn-toolkit2.git
git -C rknn-toolkit2 checkout 59a913d172e7f5ff03c9076e2ec7b1b1288ffd08
git clone https://github.com/airockchip/rknn_model_zoo.git
git -C rknn_model_zoo checkout bad6c7334531becaf90a561988519b7bec34d0abDit zijn de tijdens de test gebruikte commits; Model Zoo komt overeen met v2.3.2. Zet code en pakketten vast zodat latere repository-updates de opdrachtpaden niet veranderen.
#2.3 Runtime op het board installeren
Op pc:
ssh rk3576@BOARD_IP 'mkdir -p ~/RKNN2_Project/packages'
scp ~/RKNN2_Project/rknn-toolkit2/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so \
rk3576@BOARD_IP:~/RKNN2_Project/packages/Op het board: maak een reservekopie van een eventuele oude bibliotheek voordat je de nieuwe installeert.
sudo apt update
sudo apt install binutils
if [ -e /usr/lib/librknnrt.so ]; then
sudo cp -a /usr/lib/librknnrt.so "/usr/lib/librknnrt.so.bak-$(date +%Y%m%d-%H%M%S)"
fi
sudo install -m 0644 ~/RKNN2_Project/packages/librknnrt.so /usr/lib/librknnrt.so
sudo ldconfig
strings /usr/lib/librknnrt.so | grep 'librknnrt version'De versietekst van dit pakket is:
librknnrt version: 2.3.2 (429f97ae6b@2025-04-09T09:09:27)Lite2 vereist deze stap. De geteste versie zoekt /usr/lib/librknnrt.so; LD_LIBRARY_PATH alleen voor de Demo-map instellen vervangt de controle van de systeembibliotheek niet. Op RK3588 veroorzaakte het ontbrekende bestand Can not find dynamic library on RK3588!; na installatie was de fout opgelost.
#2.4 Toolkit Lite2 op het board installeren
Het board gebruikt Debian 12 met Python 3.11; kies daarom het cp311-wheel voor aarch64.
Op pc:
scp ~/RKNN2_Project/rknn-toolkit2/rknn-toolkit-lite2/packages/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl \
rk3576@BOARD_IP:~/RKNN2_Project/packages/Op het board:
sudo apt install python3.11-venv
python3 -m venv ~/venvs/rknn-lite2
source ~/venvs/rknn-lite2/bin/activate
python -m pip install \
~/RKNN2_Project/packages/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
python -m pip check
python -c "from rknnlite.api import RKNNLite; print('RKNN Toolkit Lite2 import OK')"Werkelijke resultaten van de twee controles:
No broken requirements found.
RKNN Toolkit Lite2 import OKKopieer het x86_64-wheel van de pc niet naar het board. Verschijnt ensurepip is not available, installeer dan python3.11-venv en maak de virtuele omgeving opnieuw. Een geslaagde import controleert alleen het Python-pakket; sectie 4 test echte NPU-inferentie.
#3. Toolkit op de Ubuntu-pc instellen en YOLO11n converteren
#3.1 Een Python 3.11-omgeving op de pc maken
Op pc: deze opdrachten installeren Miniforge op een nieuwe pc. Als Conda al aanwezig is, maak daarmee een omgeving met dezelfde naam.
mkdir -p ~/Downloads
cd ~/Downloads
wget -c https://github.com/conda-forge/miniforge/releases/download/25.3.0-1/Miniforge3-25.3.0-1-Linux-x86_64.sh
bash Miniforge3-25.3.0-1-Linux-x86_64.sh -b -p "$HOME/miniforge3"
source ~/miniforge3/etc/profile.d/conda.sh
conda create -n rknn2 python=3.11 -y
conda activate rknn2Voer in elke nieuwe pc-terminal source ~/miniforge3/etc/profile.d/conda.sh en conda activate rknn2 uit vóór de volgende Python-opdrachten.
#3.2 Toolkit2 2.3.2 installeren
Op pc:
cd ~/RKNN2_Project/rknn-toolkit2/rknn-toolkit2
python -m pip install \
-r packages/x86_64/requirements_cp311-2.3.2.txt \
packages/x86_64/rknn_toolkit2-2.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl \
'onnx==1.16.1' 'protobuf==4.25.4'
python -m pip check
python -m pip show rknn-toolkit2
python -c "from rknn.api import RKNN; print('RKNN Toolkit2 import OK')"De geteste conversieomgeving gebruikte Python 3.11.14 en Toolkit2 2.3.2; na correctie van afhankelijkheden gaf pip check No broken requirements found. terug.
Door ONNX en protobuf expliciet vast te zetten, voorkom je restafhankelijkheden van oude projecten: conversie gebruikt ONNX 1.16.1 en protobuf 4.25.4 in een geïsoleerde omgeving zonder de oorspronkelijke Conda-omgeving te wijzigen.
#3.3 Officieel aangepast YOLO11n downloaden
Op pc:
cd ~/RKNN2_Project/rknn_model_zoo/examples/yolo11/model
bash download_model.sh
ls -lh yolo11n.onnxHet gedownloade yolo11n.onnx was 10,527,859 bytes groot.
Gebruik deze voor Rockchip aangepaste ONNX. De uitvoerindeling past bij de officiële C++-nabewerking; vervang het niet zomaar door een originele Ultralytics-export. Volg voor een zelfgetraind model de officiële YOLO11-exportinstructies.
#3.4 Converteren naar een RK3576 INT8-model
Op pc:
conda activate rknn2
cd ~/RKNN2_Project/rknn_model_zoo
export PYTHONPATH="$PWD${PYTHONPATH:+:$PYTHONPATH}"
ls datasets/COCO/coco_subset_20.txt
ls datasets/COCO/subset
cd examples/yolo11/python
python convert.py ../model/yolo11n.onnx rk3576 i8 ../model/yolo11n_rk3576.rknn
ls -lh ../model/yolo11n_rk3576.rknnDe vier argumenten zijn het ONNX-pad, doelplatform, kwantisatietype en uitvoerpad. Gebruik op deze pagina rk3576.
Het conversiescript gebruikt datasets/COCO/coco_subset_20.txt uit de repository voor kalibratie. Voer het uit vanuit examples/yolo11/python zodat relatieve paden kloppen. Deze kleine dataset is voor een eerste test; kalibreer en beoordeel productiemodellen met gegevens die echte situaties vertegenwoordigen.
Fragment uit de werkelijke conversie-uitvoer:
I rknn-toolkit2 version: 2.3.2
...
--> Building model
...
I rknn building ...
I rknn building done.
done
--> Export rknn model
doneDe eerste logregel kan interne buildinformatie bevatten; controleer vooral of het doelbestand is gemaakt. Een melding dat de standaard invoer-/uitvoertypen veranderen naar int8 is normaal voor dit kwantisatiescript. Laat het bijbehorende C++-voorbeeld de modelinvoer en -uitvoer verwerken; converteer de afbeelding niet willekeurig naar getekende waarden.
Voor dit RKNN2-voorbeeld hoeft maar één .rknn-modelbestand te worden geïmplementeerd.
#4. Bouwen, met SCP implementeren en uitvoeren
#4.1 ARM64-crosscompiler voorbereiden
Op pc:
cd ~/RKNN2_Project
wget -c https://dn.odroid.com/compiler/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar
tar -xf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar
export GCC_COMPILER="$HOME/RKNN2_Project/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu"
"${GCC_COMPILER}-gcc" --versionDe geteste compiler was Linaro GCC 6.3.1 20170404. GCC_COMPILER is een voorvoegsel zonder afsluitende -gcc; het buildscript voegt dit toe.
#4.2 Het YOLO11 C++-voorbeeld voor RK3576 bouwen
Op pc:
cd ~/RKNN2_Project/rknn_model_zoo
bash build-linux.sh -t rk3576 -a aarch64 -b Release -d yolo11Gebruik bash build-linux.sh om Permission denied te vermijden als het repositoryscript niet uitvoerbaar is. Converteer eerst het model en bouw daarna, zodat het script de gemaakte .rknn in de implementatiemap opneemt.
Zo ziet de structuur van de implementatiemap eruit; andere meegeleverde voorbeelden mogen blijven staan:
install/rk3576_linux_aarch64/rknn_yolo11_demo/
├── rknn_yolo11_demo
├── lib/
│ ├── librknnrt.so
│ └── librga.so
└── model/
├── yolo11n_rk3576.rknn
├── bus.jpg
└── coco_80_labels_list.txtAls je beide platforms in dezelfde repository converteert, kan de installatiemap twee .rknn-bestanden bevatten. Kies bij uitvoering expliciet het bestand met achtervoegsel rk3576.
#4.3 De volledige map via SCP implementeren
Op pc:
ssh rk3576@BOARD_IP 'mkdir -p ~/RKNN2_Project'
cd ~/RKNN2_Project/rknn_model_zoo
scp -r install/rk3576_linux_aarch64/rknn_yolo11_demo \
rk3576@BOARD_IP:~/RKNN2_Project/Kopieer ook lib/ en model/, niet alleen het uitvoerbare bestand. De voorbeeld-Runtime zit in lib/; de geteste versie was 2.3.2.
#4.4 Objectdetectie op het board uitvoeren
Op het board:
cd ~/RKNN2_Project/rknn_yolo11_demo
sudo env LD_LIBRARY_PATH="$PWD/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" \
./rknn_yolo11_demo model/yolo11n_rk3576.rknn model/bus.jpgFragment uit de werkelijke RK3576-uitvoer:
model input num: 1, output num: 9
model is NHWC input fmt
model input height=640, width=640, channel=3
...
rknn_run
bus @ (95 136 553 438) 0.944
person @ (108 236 222 535) 0.898
person @ (212 240 284 509) 0.835
person @ (476 229 559 522) 0.831
person @ (79 358 117 515) 0.452
write_image path: out.png width=640 height=640 channel=3 ...De test slaagt als het proces normaal eindigt, bus en personen detecteert en out.png in de huidige map maakt. Coördinaten en scores kunnen iets verschillen per toolversie en kwantisatie. Stabiele FPS zijn niet gemeten; deze functietest is geen prestatiebenchmark.
Op pc de afbeelding ophalen:
mkdir -p ~/RKNN2_Project/results
scp rk3576@BOARD_IP:~/RKNN2_Project/rknn_yolo11_demo/out.png \
~/RKNN2_Project/results/yolo11n-rk3576-out.pngOpen de afbeelding op de pc om de detectiekaders te bekijken. Met een scherm op het board kan dat ook in de grafische interface van het board.
#4.5 Controleren of Lite2 hetzelfde model uitvoert
Test na de C++-detectie met hetzelfde model het Python-inferentiepad.
Op het board:
cd ~/RKNN2_Project/rknn_yolo11_demo
sudo "$HOME/venvs/rknn-lite2/bin/python" - <<'PYCODE'
import numpy as np
from rknnlite.api import RKNNLite
rknn = RKNNLite()
try:
ret = rknn.load_rknn('model/yolo11n_rk3576.rknn')
if ret != 0:
raise RuntimeError(f'load_rknn failed: {ret}')
ret = rknn.init_runtime()
if ret != 0:
raise RuntimeError(f'init_runtime failed: {ret}')
outputs = rknn.inference(inputs=[np.zeros((1, 640, 640, 3), dtype=np.uint8)])
if outputs is None:
raise RuntimeError('inference failed')
print('Lite2 inference OK; output count:', len(outputs))
finally:
rknn.release()
PYCODEWerkelijk resultaat:
Lite2 inference OK; output count: 9Gebruik het absolute pad naar Python in de virtuele omgeving, zodat sudo python3 niet per ongeluk de systeem-Python zonder Lite2 start.
#4.6 Veelvoorkomende problemen en acceptatiecriteria
| Probleem | Controle |
|---|---|
| NPU-stuurprogramma niet gevonden | Controleer de RKNPU-koppeling en het opstartlog uit sectie 1.2; een ingebouwd stuurprogramma hoeft niet in lsmod te staan |
| Lite2 importeert, maar initialisatie mislukt | Controleer /usr/lib/librknnrt.so, het NPU-stuurprogramma en toegangsrechten |
Can not find dynamic library | Installeer de systeem-Runtime volgens sectie 2.3; alleen Demo-lib/ is onvoldoende |
pip check meldt conflicten | Gebruik de geïsoleerde pc-omgeving en afhankelijkheden uit sectie 3.2, geen oude ONNX/protobuf van een ander project |
Kalibratieafbeeldingen of py_utils ontbreken | Controleer de werkmap, kalibratiedataset in de repository en PYTHONPATH |
| Verkeerd modelplatform | Converteer opnieuw voor rk3576 en voer yolo11n_rk3576.rknn uit |
| Model- of labelbestand ontbreekt | Kopieer de volledige implementatiemap en ga eerst naar rknn_yolo11_demo |
| Dynamische bibliotheek ontbreekt | Controleer lib/librknnrt.so en geef LD_LIBRARY_PATH door zoals in sectie 4.4 |
Na afloop moet het NPU-stuurprogramma opvraagbaar zijn, Runtime/Lite2 werken, pc-conversie slagen, het C++-programma een detectieafbeelding kunnen maken en Lite2 negen uitvoertensoren teruggeven.
#4.7 Bronnen
- Officiële RKNN-Toolkit2-repository: Toolkit, Runtime, Lite2 en documentatie.
- RKNN SDK V2.3.2-snelstart: deze handleiding gebruikt SSH/SCP voor verbinding en overdracht.
- Hier getest YOLO11-voorbeeld: ONNX-download, conversiescript en C++-nabewerking.
- Seeed Armbian-uitbreiding en pakketbron: bron van de passende kernel- en device-tree-pakketten voor reComputer.