Skip to main content

Benchmark de inferencia multicanal en Raspberry Pi 5 con Hailo8

Introducción

YOLOv8 (You Only Look Once versión 8) es la serie más popular de modelos de estimación de pose y detección de objetos en tiempo real de YOLO. Se basa en las fortalezas de sus predecesores al introducir varias mejoras en velocidad, precisión y flexibilidad. El Hailo8 se utiliza para acelerar la velocidad de inferencia, con 26 tera-operaciones por segundo (TOPS).

Este wiki presenta un benchmarking de YOLOv8m para la detección de objetos en Raspberry Pi 5 con Hailo8. Todas las pruebas utilizan el mismo modelo (YOLOv8m), cuantizado a int8, con un tamaño de entrada de 640x640 píxeles, tamaño de lote configurado a 8.

Preparar el hardware

reComputer AI R2130

Instalar el kit AI en RPi5

Por favor consulta este enlace

Preparar el software

Actualizar el sistema:

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
sudo apt update
sudo apt full-upgrade

Descargar el software Hailo desde el sitio oficial de Hailo

Nota: Necesitarás una cuenta oficial de Hailo y asegurarte de haber iniciado sesión. Haz clic en este enlace para descargar las bibliotecas necesarias:

pir

Instalar hailort_4.19.0_arm64.deb en Raspberry Pi 5

sudo dpkg -i hailort_4.19.0_arm64.deb 

sudo reboot

Instalar dkms

sudo apt-get install dkms

Instalar hailort-pcie-driver_4.19.0_all.deb

sudo dpkg -i hailort-pcie-driver_4.19.0_all.deb 
sudo reboot

Crear y activar un entorno virtual en Python

python -m venv hailo_env
source hailo_env/bin/activate

Instalar hailort-4.19.0-cp311-cp311-linux_aarch64.whl

pip install hailort-4.19.0-cp311-cp311-linux_aarch64.whl 

Verificar si el software está instalado correctamente.

hailortcli fw-control identify

El resultado debería ser el siguiente:

ain@pi5-hailo:~ $ hailortcli fw-control identify
Ejecutando en dispositivo: 0000:01:00.0
Identificando placa
Versión del protocolo de control: 2
Versión del firmware: 4.19.0 (release,app,extended context switch buffer)
Versión del registrador: 0
Nombre de la placa: Hailo-8
Arquitectura del dispositivo: HAILO8
Número de serie: HLLWM2B225100548
Número de parte: HM218B1C2FAE
Nombre del producto: HAILO-8 AI ACC M.2 M KEY MODULE EXT TEMP

Configurar PCIe para gen2/gen3 (gen3 es más rápido que gen2):

Añadir el siguiente texto a /boot/firmware/config.txt

# Habilitar el conector PCIe externo

dtparam=pciex1

# Forzar velocidades Gen 3.0

dtparam=pciex1_gen=3
note

Si deseas usar gen2, comenta la línea dtparam=pciex1_gen=3

Instalar Tapps

Instalar bibliotecas necesarias

sudo apt-get install -y rsync ffmpeg x11-utils python3-dev python3-pip python3-setuptools python3-virtualenv python-gi-dev libgirepository1.0-dev gcc-12 g++-12 cmake git libzmq3-dev

sudo apt-get install -y libopencv-dev python3-opencv

sudo apt-get install -y libcairo2-dev libgirepository1.0-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio gcc-12 g++-12 python-gi-dev

sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0

Configurar hailo_pci force_desc_page_size

sudo nano /etc/modprobe.d/hailo_pci.conf

Y luego ingresa el siguiente contenido:

options hailo_pci force_desc_page_size=4096

Finalmente, presiona Ctrl+X, escribe Y y presiona Enter para guardar el archivo.

Y luego reinicia Raspberry Pi 5:

sudo reboot

Descargar Tapps

git clone --depth 1 https://github.com/hailo-ai/tappas.git

Descargar hailort a tapps

cd tappas
mkdir hailort
git clone https://github.com/hailo-ai/hailort.git hailort/sources

Cambiar common.py

nano downloader/common.py

Y cambia el contenido como sigue, añadiendo RaspberryPI5 = 'rpi5' en common.py:

class Platform(Enum):
X86 = 'x86'
ARM = 'arm'
IMX8 = 'imx8'
Rockchip = 'rockchip'
RaspberryPI = 'rpi'
RaspberryPI5 = 'rpi5'

ANY = 'any'

def __str__(self):
return self.value

Instalar tappas

./install.sh --skip-hailort --target-platform rpi5

Cambiar el tamaño del lote a 8

cd ./apps/h8/gstreamer/general/multistream_detection/
nano multi_stream_detection.sh

Añadir readonly DEFAULT_BATCH_SIZE=8 en la línea 14 como sigue:

readonly DEFAULT_NETWORK_NAME="yolov5"
readonly DEFAULT_BATCH_SIZE=8
readonly MAX_NUM_OF_DEVICES=4

Añadir batch_size=$DEFAULT_BATCH_SIZE en la línea 19 como sigue:

network_name=$DEFAULT_NETWORK_NAME
batch_size=$DEFAULT_BATCH_SIZE
num_of_src=12

Añadir batch-size=$batch_size en la línea 154 como sigue:

queue name=hailo_pre_infer_q_0 leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \
hailonet hef-path=$hef_path batch-size=$batch_size device-count=$device_count scheduling-algorithm=0 nms-score-threshold=0.3 nms-iou-threshold=0.45 output-format-type=HAILO_FORMAT_TYPE_FLOAT32 ! \
queue name=hailo_postprocess0 leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \

Finalmente Ctrl+X y escribe Y para guardar el archivo.

Ejecutar inferencia multicanal

sudo chmod +x multi_stream_detection.sh
./multi_stream_detection.sh --network yolov8 --num-of-sources 8 --show-fps

Resultados

Todos los resultados se basan en inferencias con un tamaño de entrada de modelo de 640x640, tamaño de lote de 8 y resolución de video de 1280x760, que es 720p.

CanalRendimiento Gen2 PCIERendimiento Gen3 PCIE
1 canal de flujo39.82FPS76.99FPS
2 canales de flujo19.86FPS38.21FPS
4 canales de flujo8.45FPS16.94FPS
8 canales de flujo3.85FPS8.15FPS
12 canales de flujo2.94FPS5.43FPS

Soporte técnico y discusión sobre el producto

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.

Loading Comments...