Test modelo YOLOv5 rknn en la Orange Pi 5 plus
Ejemplo práctico de como utilizar el modelo IA YOLOv5 rknn con la NPU de 6 TOP que incorpora la Orange Pi 5 plus
INTELIGENCIA ARTIFICIAL
Biblioman
3/8/20244 min leer
Introducción
Este artículo trata de como empezar a usar la NPU (Unidad de Procesamiento Neuronal) que trae la Orange Pi 5 y 5 plus, para ello vamos a probar el modelo de reconocimiento de objetos YOLOv5 rknn que se ha convertido en el equivalente al "hola mundo" en los modelos de IA para reconocer y clasificar objetos.
RKNN es el tipo de modelo de IA que soportan los chips de Rockchip, también podemos convertir otro tipo de modelos con la herramienta RKNN-Toolkit2. El tipo de modelos que podemos convertir son: Pytorch, ONNX, Tensorflow, Tflite, Caffe y Darknet.
Podemos decir que RKMM Toolkit es el framework creado por Rockchip para implementar modelos de IA en sus micros y que realiza varias funciones:
Convertir modelos entrenados en otras plataformas al formato RKNN que es el único que entiende la NPU (Unidad de Procesamiento Neuronal) de los micros de Rockchip.
Inferencia: una vez que el modelo se ha convertido al formato RKNN, el RKNN Toolkit permite realizar inferencias (probar el modelo ya entrenado) en las NPU de Rockchip .
Dispone de una versión mas ligera con una API para Python RKNN Toolkit Lite2 para facilitar la implementación y aprendizaje en Python de aplicaciones IA en sus micros.
Compatibilidad entre los micros que implementan una NPU: Serie RK3566/RK3568, Serie RK3588, Serie RK3562 y RV1103/RV1106, lo que aprendes en un micro te vale para los demás, en este artículo vimos un ejemplo con la LuckFox Pico Pro que implementa el SoC RV1106
Interfaces de programación con ejemplos en C/C++ y Python para ayudarnos a implementar los modelos RKNN. Podemos seguir el método de aprendizaje de toda la vida, primero estudiar y comprender los ejemplos proporcionados por el fabricante, después modificar el código de los ejemplos, comprobar y evaluar los resultados y por último crear nuestras propias aplicaciones en C/C++ o Python.
Implementar un controlador para el kernel que es el que se encarga de interactuar con el hardware de la NPU, además es de código abierto y se puede encontrar en las fuentes del kernel de Rockchip.
¿Por donde empezar?..
Las posibilidades son varias, podemos descargar las herramientas de desarrollo en un PC con arquitectura x86/64 bits con Ubuntu instalado en las siguientes versiones 18.04, 20.04 o 22.04 (podemos crear una máquina virtual si no disponemos de una máquina física con estos sistemas operativos instalados o incluso utilizar Docker) realizar compilación cruzada y descargar el ejecutable junto al modelo ya entrenado en la placa en este caso la Orange Pi 5 Plus, este procedimiento sería similar al utilizado con la LuckFox Pico Pro pero en este caso tenemos mas posibilidades, al disponer la Orange Pi 5 Plus de un procesador mucho mas potente que el RV1106 que tiene la LuckFox Pico podemos instalar el entorno de desarrollo en la propia placa y compilar directamente desde ella nuestras aplicaciones, es el método que vamos a utilizar en el siguiente ejemplo.
Instalación previa del software necesario
Necesitamos comprobar que tenemos instalado en la Orange Pi 5 plus el siguiente software:
sudo apt update
sudo apt install gcc cmake git build-essential
Después clonaremos con git el repositorio en nuestra carpeta home:
git clone https://github.com/rockchip-linux/rknpu2.git
Y compilaremos y probaremos el ejemplo Demo YOLOv5 en C para el SoC RK3588, los pasos a seguir son muy sencillos y se describen en el siguiente vídeo paso a paso:
Comandos utilizados en el vídeo
Edición del script de compilación build-linux_rK3588.sh
set -e
TARGET_SOC="rk3588"
GCC_COMPILER=/usr/bin/aarch64-linux-gnu
export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH
export CC=${GCC_COMPILER}-gcc
export CXX=${GCC_COMPILER}-g++
ROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd )
# build
BUILD_DIR=${ROOT_PWD}/build/build_linux_aarch64
if [[ ! -d "${BUILD_DIR}" ]]; then
mkdir -p ${BUILD_DIR}
fi
cd ${BUILD_DIR}
cmake ../.. -DCMAKE_SYSTEM_NAME=Linux -DTARGET_SOC=${TARGET_SOC}
make -j4
make install
cd -
Ejecución de los ejemplos.
Aplicación fotos. En la carpeta donde están los ejecutables creados tras la compilación abrimos una terminal y ejecutamos el siguiente comando:
./rknn_yolov5_demo model/RK3588/yolov5s-640-640.rknn model/autos.jpg
Se nos creara una foto con el reconocimiento de los objetos:
Aplicación vídeo en tiempo real. Nos descargamos el servidor MediaMTX desde aquí, editamos su archivo de configuración mediamtx.yml y añadimos la cámara USB:
paths:
# example:
# my_camera:
# source: rtsp://my_camera
# Settings under path "all_others" are applied to all paths that
# do not match another entry.
camUSB:
runOnInit: ffmpeg -f v4l2 -framerate 24 -video_size 640x640 -i /dev/video0 -vcodec h264 -f rtsp rtsp://localhost:$RTSP_PORT/$>
runOnInitRestart: yes
Ejecutamos la aplicación con: ./mediamtx
Por último ejecutamos el ejemplo del vídeo con:
./rknn_yolov5_video_demo model/RK3588/yolov5s-640-640.rknn rtsp://127.0.0.1:8554/camUSB 264