🛠 NPU 0,8 TOPS : inférence RKNN (YOLO, Whisper) sur la ZERO 3W
Objetivos
La ZERO 3W incorpora un acelerador neuronal RKNN de 0,8 TOPS — algo muy raro en un formato Pi Zero a este precio — y Radxa documenta una pila de IA oficial completa: RKNN-Toolkit-Lite2 con ejemplos YOLOv5/v8 (detección de objetos), Whisper (transcripción de voz) y DeepLab (segmentación semántica). Este tutorial explica cómo obtener una primera inferencia en la NPU, elegir entre la imagen oficial y la imagen comunitaria Qengineering, y gestionar la restricción térmica de un formato de 65 × 30 mm.
Material
- 1 Radxa ZERO 3W — mínimo 2 GB para visión, 4/8 GB para Whisper; el SKU de 1 GB será insuficiente
- eMMC (8–64 GB soldada) muy recomendable: la carga de modelos en una microSD lenta es frustrante
- Disipador + flujo de aire para una inferencia sostenida: el RK3566 ya está subfrecuenciado a 1,6 GHz (frente a los 1,8 GHz habituales) por razones térmicas según CNX — la NPU no será una excepción
- Fuente de alimentación estable de 5 V/2 A (picos de CPU + NPU + Wi-Fi)
1) Elegir la base de software
- Vía oficial: Radxa OS bookworm b1 (imagen totalmente probada) + la pila de ejemplos RKNN de la documentación de Radxa (app-development/ai/rknn-quick-start).
- Vía comunitaria: Qengineering Radxa-Zero-3-NPU-Ubuntu22 — imagen Ubuntu 22 con OpenCV, NCNN y controladores RKNPU preinstalados (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) Primera inferencia (ejemplo YOLO)
La cadena RKNN se divide en dos mundos: la CONVERSIÓN del modelo (formato .rknn) y la INFERENCIA en la placa mediante el runtime Lite2. Los ejemplos de Radxa (YOLOv5/v8, Whisper, DeepLab) proporcionan modelos preconvertidos y scripts Python listos para ejecutar.
# 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 telecharge) :
python3 detect.py --model yolov5s.rknn --img test.jpg
3) Medir, no esperar
# 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 temperatura sube demasiado, el throttling reduce los fps — de ahí la necesidad de disipador y ventilación. Para un flujo continuo de cámara, combínelo con el tutorial CSI: los proyectos reales de la ficha (coche con cámara rk3566-ipc-car, KVM USBridge 2.0 con OCR/IA) funcionan exactamente con este dúo CSI + NPU.
Verificación esperada
dmesg menciona el controlador RKNPU al arrancar; el ejemplo YOLO muestra cajas de detección y un número de imágenes/s claramente superior al que daría solo la CPU (la prueba comparativa CPU vs NPU es el mejor indicador); Whisper transcribe una muestra de audio. La temperatura se estabiliza con el disipador.
Errores frecuentes
- Ejecutar el modelo en la CPU olvidando dirigirlo a la NPU: los fps se desploman — verifique que el runtime asigne correctamente el modelo al dispositivo RKNPU.
- SKU de 1 GB para Whisper: el OCR/ASR satura la RAM; elija 4 GB+ o aligere el modelo.
- Convertir modelos en la placa: la cadena de conversión está pensada para estaciones x86; en la ZERO 3W se ejecuta, no se convierte. >
- Carcasa cerrada sin disipador en inferencia continua: throttling, caída de fps tras unos minutos.
- Confiar en la GPU Mali G52 (OpenCL 2.0) en lugar de la NPU: la pila RKNN es la vía documentada y optimizada; la GPU queda como plan B.
- microSD de baja calidad: la carga del modelo domina el tiempo de inicio; la eMMC HS200 cambia la vida (vea el tutorial eMMC).
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash