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 read

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

Enlaces