🛠 NPU 0,8 TOPS : inférence RKNN (YOLO, Whisper) sur la ZERO 3W
Objectifs
La ZERO 3W embarque un accélérateur neuronal RKNN de 0,8 TOPS — rarissime dans un format Pi Zero à ce prix — et Radxa documente une pile IA officielle complète : RKNN-Toolkit-Lite2 avec exemples YOLOv5/v8 (détection d'objets), Whisper (transcription vocale) et DeepLab (segmentation sémantique). Ce tutoriel explique comment obtenir une première inférence sur le NPU, choisir entre l'image officielle et l'image communautaire Qengineering, et gérer la contrainte thermique d'un format 65 × 30 mm.
Matériel
- 1 Radxa ZERO 3W — 2 GB minimum pour de la vision, 4/8 GB pour Whisper ; le SKU 1 GB sera trop juste
- eMMC (8–64 GB soudée) fortement conseillée : le chargement de modèles sur microSD lente est frustrant
- Dissipateur + flux d'air pour de l'inférence soutenue : le RK3566 est déjà sous-cadencé à 1,6 GHz (contre 1,8 GHz usuels) pour des raisons thermiques selon CNX — le NPU ne dérogera pas à la règle
- Alimentation 5 V/2 A stable (pics CPU + NPU + Wi-Fi)
1) Choisir sa base logicielle
- Voie officielle : Radxa OS bookworm b1 (image fully tested) + la pile d'exemples RKNN de la doc Radxa (app-development/ai/rknn-quick-start).
- Voie communautaire : Qengineering Radxa-Zero-3-NPU-Ubuntu22 — image Ubuntu 22 avec OpenCV, NCNN et drivers RKNPU préinstallés (github.com/Qengineering/Radxa-Zero-3-NPU-Ubuntu22).
# Verifier que le driver NPU est present et vu par le noyau :
sudo dmesg | grep -i rknpu
ls /sys/class/devfreq/ | grep -i npu # le NPU apparait comme peripherique freq
cat /sys/class/thermal/thermal_zone*/temp # temperature de reference au repos
2) Première inférence (exemple YOLO)
La chaîne RKNN se découpe en deux mondes : la CONVERSION du modèle (format .rknn) et l'INFÉRENCE sur la carte via le runtime Lite2. Les exemples Radxa (YOLOv5/v8, Whisper, DeepLab) fournissent modèles pré-convertis et scripts Python prêts à lancer.
# Apries application de la procédure Radxa rknn-quick-start :
python3 -c 'import rknn_lite; print("runtime present")' 2>/dev/null || \
python3 -c 'import rknnlite; print("runtime present")'
# Lancer l'exemple YOLO fourni (nom de script selon l'exemple télécharge) :
python3 detect.py --model yolov5s.rknn --img test.jpg
3) Mesurer, pas espérer
# Pendant l'inférence, dans un second terminal :
watch -n1 'cat /sys/class/thermal/thermal_zone*/temp'
time python3 detect.py --model yolov5s.rknn --img test.jpg
Si la température monte trop, le throttling réduit les fps — d'où dissipateur et ventilation. Pour un flux caméra continu, combinez avec le tuto CSI : les projets réels de la fiche (voiture caméra rk3566-ipc-car, KVM USBridge 2.0 avec OCR/AI) tournent exactement sur ce duo CSI + NPU.
Vérification attendue
dmesg mentionne le driver RKNPU au boot ; l'exemple YOLO affiche des boîtes de détection et un nombre d'images/s nettement supérieur à ce que donnerait le CPU seul (le test de bascule CPU vs NPU est le meilleur révélateur) ; Whisper transcrit un échantillon audio. La température se stabilise avec dissipateur.
Erreurs fréquentes
- Faire tourner le modèle sur le CPU en oubliant de cibler le NPU : les fps s'effondrent — vérifiez que le runtime attache bien le modèle au périphérique RKNPU.
- SKU 1 GB pour Whisper : l'OCR/ASR sature la RAM ; prenez 4 GB+ ou allégez le modèle.
- Convertir des modèles sur la carte : la chaîne de conversion est pensée pour station x86 ; sur la ZERO 3W on exécute, on ne convertit pas. >
- Carcasse fermée sans dissipateur en inférence continue : throttling, fps qui chutent après quelques minutes.
- Compter sur le GPU Mali G52 (OpenCL 2.0) à la place du NPU : la pile RKNN est le chemin documenté et optimisé ; le GPU reste un plan B.
- microSD bas de gamme : le chargement du modèle domine le temps de démarrage ; l'eMMC HS200 change la vie (voir le tuto eMMC).
Autres tutoriels pour cette carte
- Premiers pas avec la Radxa ZERO 3W : flasher Radxa OS et démarrer
- Wi-Fi 6 et Bluetooth 5.4 : se connecter, choisir l'antenne, connaître sa révision
- GPIO avec libgpiod : faire clignoter une LED et lire un bouton
- Installer le système sur l'eMMC : rkdeveloptool, MaskROM et gain de fiabilité
- Caméra MIPI CSI : brancher une Raspberry Pi Camera (OV5647/IMX219) sur la ZERO 3W
- Noyau mainline avec Armbian : vérifier le device tree, ajouter un overlay, lire le SARADC
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash