Saltar al contenido

Guía de inicio rápido: Raspberry Pi con Ultralytics YOLOv8

Esta completa guía proporciona un recorrido detallado para implantar Ultralytics YOLOv8 en dispositivos Raspberry Pi. Además, presenta pruebas de rendimiento para demostrar las capacidades de YOLOv8 en estos pequeños y potentes dispositivos.



Observa: Actualizaciones y mejoras de la Raspberry Pi 5.

Nota

Esta guía se ha probado con Raspberry Pi 4 y Raspberry Pi 5 que ejecutan la última versión de Raspberry Pi OS Bookworm (Debian 12). Se espera que esta guía funcione con dispositivos Raspberry Pi más antiguos, como la Raspberry Pi 3, siempre que se instale el mismo Raspberry Pi OS Bookworm.

¿Qué es Raspberry Pi?

Raspberry Pi es un pequeño y asequible ordenador de placa única. Se ha hecho popular para una amplia gama de proyectos y aplicaciones, desde la domótica para aficionados hasta usos industriales. Las placas Raspberry Pi son capaces de ejecutar diversos sistemas operativos, y ofrecen pines GPIO (Entrada/Salida de propósito general) que permiten una fácil integración con sensores, actuadores y otros componentes de hardware. Existen diferentes modelos con distintas especificaciones, pero todos comparten la misma filosofía básica de diseño: ser baratos, compactos y versátiles.

Comparación de la serie Raspberry Pi

Raspberry Pi 3 Raspberry Pi 4 Raspberry Pi 5
CPU Broadcom BCM2837, SoC Cortex-A53 de 64 bits SoC Broadcom BCM2711, Cortex-A72 de 64 bits SoC Broadcom BCM2712, Cortex-A76 de 64 bits
CPU Frecuencia máxima 1,4 GHz 1,8 GHz 2,4 GHz
GPU Videocore IV Videocore VI VideoCore VII
GPU Frecuencia máxima 400Mhz 500Mhz 800Mhz
Memoria 1GB LPDDR2 SDRAM 1GB, 2GB, 4GB, 8GB LPDDR4-3200 SDRAM 4GB, 8GB LPDDR4X-4267 SDRAM
PCIe N/A N/A 1xInterfaz PCIe 2.0
Consumo máximo 2,5A@5V 3A@5V 5A@5V (PD activada)

¿Qué es el SO Raspberry Pi?

Raspberry Pi OS (antes conocido como Raspbian) es un sistema operativo de tipo Unix basado en la distribución Debian GNU/Linux para la familia Raspberry Pi de ordenadores compactos de placa única distribuidos por la Fundación Raspberry Pi. Raspberry Pi OS está altamente optimizado para la Raspberry Pi con CPU ARM y utiliza un entorno de escritorio LXDE modificado con el gestor de ventanas apilables Openbox. Raspberry Pi OS está en desarrollo activo, con énfasis en mejorar la estabilidad y el rendimiento de tantos paquetes Debian como sea posible en Raspberry Pi.

Flashear Raspberry Pi OS a Raspberry Pi

Lo primero que tienes que hacer después de hacerte con una Raspberry Pi es flashear una tarjeta micro-SD con el SO Raspberry Pi, insertarla en el dispositivo y arrancar el SO. Sigue la detallada Documentación de inicio de Ras pberry Pi para preparar tu dispositivo para el primer uso.

Configurar Ultralytics

Hay dos formas de configurar el paquete Ultralytics en la Raspberry Pi para construir tu próximo proyecto de Visión por Computador. Puedes utilizar cualquiera de ellas.

Empieza con Docker

La forma más rápida de empezar a utilizar Ultralytics YOLOv8 en Raspberry Pi es ejecutarlo con una imagen docker preconstruida para Raspberry Pi.

Ejecuta el siguiente comando para extraer el contenedor Docker y ejecutarlo en Raspberry Pi. Se basa en la imagen Docker arm64v8/debian, que contiene Debian 12 (Bookworm) en un entorno Python3.

t=ultralytics/ultralytics:latest-arm64 && sudo docker pull $t && sudo docker run -it --ipc=host $t

Una vez hecho esto, pasa a la sección Utilizar NCNN en Raspberry Pi.

Empezar sin Docker

Instala el paquete Ultralytics

Aquí instalaremos Ultralytics en la Raspberry Pi con dependencias opcionales para que podamos exportar el archivo PyTorch modelos a otros formatos diferentes.

  1. Actualizar la lista de paquetes, instalar pip y actualizar a la última versión

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Instala ultralytics paquete pip con dependencias opcionales

    pip install ultralytics[export]
    
  3. Reinicia el dispositivo

    sudo reboot
    

Utiliza NCNN en Raspberry Pi

De todos los formatos de exportación de modelos admitidos por Ultralytics, NCNN ofrece el mejor rendimiento de inferencia cuando se trabaja con dispositivos Raspberry Pi porque NCNN está altamente optimizado para plataformas móviles/integradas (como la arquitectura ARM). Por lo tanto, nuestra recomendación es utilizar NCNN con Raspberry Pi.

Convierte el modelo a NCNN y ejecuta la inferencia

El modelo YOLOv8n en formato PyTorch se convierte a NCNN para ejecutar la inferencia con el modelo exportado.

Ejemplo

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model to NCNN format
model.export(format="ncnn")  # creates 'yolov8n_ncnn_model'

# Load the exported NCNN model
ncnn_model = YOLO("yolov8n_ncnn_model")

# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to NCNN format
yolo export model=yolov8n.pt format=ncnn  # creates 'yolov8n_ncnn_model'

# Run inference with the exported model
yolo predict model='yolov8n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'

Consejo

Para más detalles sobre las opciones de exportación admitidas, visita la página de documentaciónUltralytics sobre opciones de despliegue.

Raspberry Pi 5 vs Raspberry Pi 4 YOLOv8 Benchmarks

YOLOv8 Los puntos de referencia fueron ejecutados por el Ultralytics en nueve formatos de modelos diferentes que miden la velocidad y la precisión: PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN. Las pruebas de rendimiento se ejecutaron tanto en Raspberry Pi 5 como en Raspberry Pi 4 con una precisión FP32 con un tamaño de imagen de entrada predeterminado de 640.

Nota

Sólo hemos incluido pruebas de rendimiento para los modelos YOLOv8n y YOLOv8s , porque los tamaños de otros modelos son demasiado grandes para ejecutarlos en la Raspberry Pis y no ofrecen un rendimiento decente.

Cuadro comparativo

Rendimiento

NVIDIA Ecosistema Jetson

NVIDIA Ecosistema Jetson

Tabla comparativa detallada

La siguiente tabla representa los resultados de referencia para dos modelos diferentes (YOLOv8n, YOLOv8s) en nueve formatos diferentes (PyTorch, TorchScript, ONNX, OpenVINO, TF SavedModel, TF GraphDef, TF Lite PaddlePaddle, NCNN), que se ejecuta tanto en Raspberry Pi 4 como en Raspberry Pi 5, lo que nos proporciona el estado, el tamaño, la métrica mAP50-95(B) y el tiempo de inferencia para cada combinación.

Rendimiento

Formato Estado Tamaño en disco (MB) mAP50-95(B) Tiempo de inferencia (ms/im)
PyTorch 6.2 0.6381 508.61
TorchScript 12.4 0.6092 558.38
ONNX 12.2 0.6092 198.69
OpenVINO 12.3 0.6092 704.70
TF SavedModel 30.6 0.6092 367.64
TF GraphDef 12.3 0.6092 473.22
TF Lite 12.3 0.6092 380.67
PaddlePaddle 24.4 0.6092 703.51
NCNN 12.2 0.6034 94.28
Formato Estado Tamaño en disco (MB) mAP50-95(B) Tiempo de inferencia (ms/im)
PyTorch 21.5 0.6967 969.49
TorchScript 43.0 0.7136 1110.04
ONNX 42.8 0.7136 451.37
OpenVINO 42.9 0.7136 873.51
TF SavedModel 107.0 0.7136 658.15
TF GraphDef 42.8 0.7136 946.01
TF Lite 42.8 0.7136 1013.27
PaddlePaddle 85.5 0.7136 1560.23
NCNN 42.7 0.7204 211.26
Formato Estado Tamaño en disco (MB) mAP50-95(B) Tiempo de inferencia (ms/im)
PyTorch 6.2 0.6381 1068.42
TorchScript 12.4 0.6092 1248.01
ONNX 12.2 0.6092 560.04
OpenVINO 12.3 0.6092 534.93
TF SavedModel 30.6 0.6092 816.50
TF GraphDef 12.3 0.6092 1007.57
TF Lite 12.3 0.6092 950.29
PaddlePaddle 24.4 0.6092 1507.75
NCNN 12.2 0.6092 414.73
Formato Estado Tamaño en disco (MB) mAP50-95(B) Tiempo de inferencia (ms/im)
PyTorch 21.5 0.6967 2589.58
TorchScript 43.0 0.7136 2901.33
ONNX 42.8 0.7136 1436.33
OpenVINO 42.9 0.7136 1225.19
TF SavedModel 107.0 0.7136 1770.95
TF GraphDef 42.8 0.7136 2146.66
TF Lite 42.8 0.7136 2945.03
PaddlePaddle 85.5 0.7136 3962.62
NCNN 42.7 0.7136 1042.39

Reproducir nuestros resultados

Para reproducir las pruebas anteriores de Ultralytics en todos los formatos de exportación, ejecuta este código:

Ejemplo

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
results = model.benchmarks(data="coco8.yaml", imgsz=640)
# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640

Ten en cuenta que los resultados de las pruebas comparativas pueden variar en función de la configuración exacta de hardware y software de un sistema, así como de la carga de trabajo actual del sistema en el momento de ejecutar las pruebas comparativas. Para obtener resultados más fiables, utiliza un conjunto de datos con un gran número de imágenes, es decir data='coco8.yaml' (4 val images), ordata='coco.yaml'` (5000 imágenes val).

Utilizar la cámara Raspberry Pi

Cuando se utiliza la Raspberry Pi para proyectos de Visión por Computador, puede ser esencial tomar imágenes de vídeo en tiempo real para realizar inferencias. El conector MIPI CSI integrado en la Raspberry Pi te permite conectar módulos de cámara oficiales de la Raspberry PI. En esta guía, hemos utilizado un Módulo de Cámara 3 de Raspberry Pi para capturar imágenes de vídeo y realizar inferencias utilizando modelos YOLOv8 .

Nota

La Raspberry Pi 5 utiliza conectores CSI más pequeños que la Raspberry Pi 4 (15 patillas frente a 22 patillas), por lo que necesitarás un cable adaptador de 15 patillas a 22 patillas para conectarla a una cámara Raspberry Pi.

Prueba la cámara

Ejecuta el siguiente comando después de conectar la cámara a la Raspberry Pi. Deberías ver un vídeo en directo de la cámara durante unos 5 segundos.

rpicam-hello

Inferencia con cámara

Hay 2 métodos de utilizar la Cámara de la Raspberry Pi para inferir modelos YOLOv8 .

Utilización

Podemos utilizar picamera2que viene preinstalado con Raspberry Pi OS para acceder a los modelos de cámara e inferencia YOLOv8 .

Ejemplo

import cv2
from picamera2 import Picamera2

from ultralytics import YOLO

# Initialize the Picamera2
picam2 = Picamera2()
picam2.preview_configuration.main.size = (1280, 720)
picam2.preview_configuration.main.format = "RGB888"
picam2.preview_configuration.align()
picam2.configure("preview")
picam2.start()

# Load the YOLOv8 model
model = YOLO("yolov8n.pt")

while True:
    # Capture frame-by-frame
    frame = picam2.capture_array()

    # Run YOLOv8 inference on the frame
    results = model(frame)

    # Visualize the results on the frame
    annotated_frame = results[0].plot()

    # Display the resulting frame
    cv2.imshow("Camera", annotated_frame)

    # Break the loop if 'q' is pressed
    if cv2.waitKey(1) == ord("q"):
        break

# Release resources and close windows
cv2.destroyAllWindows()

Necesitamos iniciar un flujo TCP con rpicam-vid de la cámara conectada para que podamos utilizar esta URL de flujo como entrada cuando hagamos la inferencia más adelante. Ejecuta el siguiente comando para iniciar el flujo TCP.

rpicam-vid -n -t 0 --inline --listen -o tcp://127.0.0.1:8888

Más información rpicam-vid uso en la documentación oficial de Raspberry Pi

Ejemplo

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Run inference
results = model("tcp://127.0.0.1:8888")
yolo predict model=yolov8n.pt source="tcp://127.0.0.1:8888"

Consejo

Consulta nuestro documento sobre Fuentes de inferencia si quieres cambiar el tipo de entrada de imagen/vídeo

Buenas prácticas al utilizar Raspberry Pi

Hay un par de buenas prácticas a seguir para conseguir el máximo rendimiento en las Raspberry Pis que ejecutan YOLOv8.

  1. Utiliza un SSD

    Cuando se utiliza la Raspberry Pi para un uso continuado 24x7, se recomienda utilizar un SSD para el sistema, ya que una tarjeta SD no podrá soportar escrituras continuas y podría romperse. Con el conector PCIe integrado en la Raspberry Pi 5, ahora puedes conectar SSD utilizando un adaptador como la Base NVMe para Raspberry Pi 5.

  2. Flash sin GUI

    Al flashear Raspberry Pi OS, puedes elegir no instalar el entorno de escritorio (Raspberry Pi OS Lite) y esto puede ahorrar un poco de RAM en el dispositivo, dejando más espacio para el procesamiento de la visión por ordenador.

Próximos pasos

¡Enhorabuena por haber configurado con éxito YOLO en tu Raspberry Pi! Para más información y ayuda, visita Ultralytics YOLOv8 Docs y la Fundación Mundial Cachemira.

Agradecimientos y citas

Esta guía fue creada inicialmente por Daan Eeltink para la Fundación Mundial Cachemira, una organización dedicada al uso de YOLO para la conservación de especies en peligro de extinción. Reconocemos su labor pionera y su enfoque educativo en el ámbito de las tecnologías de detección de objetos.

Para más información sobre las actividades de la Fundación Mundial Cachemira, puedes visitar su sitio web.

PREGUNTAS FRECUENTES

¿Cómo configuro Ultralytics YOLOv8 en una Raspberry Pi sin utilizar Docker?

Para configurar Ultralytics YOLOv8 en una Raspberry Pi sin Docker, sigue estos pasos:

  1. Actualiza la lista de paquetes e instala pip:
    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Instala el paquete Ultralytics con las dependencias opcionales:
    pip install ultralytics[export]
    
  3. Reinicia el dispositivo para aplicar los cambios:
    sudo reboot
    

Para obtener instrucciones detalladas, consulta la sección Iniciar sin Docker.

¿Por qué debería utilizar el formato NCNN de Ultralytics YOLOv8 en Raspberry Pi para tareas de IA?

Ultralytics YOLOv8's NCNN está altamente optimizado para plataformas móviles e integradas, lo que lo hace ideal para ejecutar tareas de IA en dispositivos Raspberry Pi. NCNN maximiza el rendimiento de la inferencia aprovechando la arquitectura ARM, proporcionando un procesamiento más rápido y eficiente en comparación con otros formatos. Para más detalles sobre las opciones de exportación admitidas, visita la página de documentaciónUltralytics sobre opciones de despliegue.

¿Cómo puedo convertir un modelo de YOLOv8 al formato NCNN para utilizarlo en Raspberry Pi?

Puedes convertir un modelo PyTorch YOLOv8 al formato NCNN utilizando los comandos Python o CLI :

Ejemplo

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO("yolov8n.pt")

# Export the model to NCNN format
model.export(format="ncnn")  # creates 'yolov8n_ncnn_model'

# Load the exported NCNN model
ncnn_model = YOLO("yolov8n_ncnn_model")

# Run inference
results = ncnn_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to NCNN format
yolo export model=yolov8n.pt format=ncnn  # creates 'yolov8n_ncnn_model'

# Run inference with the exported model
yolo predict model='yolov8n_ncnn_model' source='https://ultralytics.com/images/bus.jpg'

Para más detalles, consulta la sección Utilizar NCNN en Raspberry Pi.

¿Cuáles son las diferencias de hardware entre la Raspberry Pi 4 y la Raspberry Pi 5 relevantes para ejecutar YOLOv8?

Las diferencias clave incluyen:

  • CPU: La Raspberry Pi 4 utiliza el SoC Broadcom BCM2711, Cortex-A72 de 64 bits, mientras que la Raspberry Pi 5 utiliza el SoC Broadcom BCM2712, Cortex-A76 de 64 bits.
  • Frecuencia máxima CPU : La Raspberry Pi 4 tiene una frecuencia máxima de 1,8GHz, mientras que la Raspberry Pi 5 alcanza los 2,4GHz.
  • Memoria: La Raspberry Pi 4 ofrece hasta 8 GB de SDRAM LPDDR4-3200, mientras que la Raspberry Pi 5 cuenta con SDRAM LPDDR4X-4267, disponible en variantes de 4 GB y 8 GB.

Estas mejoras contribuyen a mejorar los puntos de referencia de rendimiento de los modelos YOLOv8 en la Raspberry Pi 5 en comparación con la Raspberry Pi 4. Consulta la tabla comparativa de las series Ras pberry Pi para obtener más detalles.

¿Cómo puedo configurar un módulo de cámara Raspberry Pi para que funcione con Ultralytics YOLOv8 ?

Hay dos métodos para configurar una cámara Raspberry Pi para la inferencia YOLOv8 :

  1. Utilizando picamera2:

    import cv2
    from picamera2 import Picamera2
    
    from ultralytics import YOLO
    
    picam2 = Picamera2()
    picam2.preview_configuration.main.size = (1280, 720)
    picam2.preview_configuration.main.format = "RGB888"
    picam2.preview_configuration.align()
    picam2.configure("preview")
    picam2.start()
    
    model = YOLO("yolov8n.pt")
    
    while True:
        frame = picam2.capture_array()
        results = model(frame)
        annotated_frame = results[0].plot()
        cv2.imshow("Camera", annotated_frame)
    
        if cv2.waitKey(1) == ord("q"):
            break
    
    cv2.destroyAllWindows()
    
  2. Utilizar un flujo TCP:

    rpicam-vid -n -t 0 --inline --listen -o tcp://127.0.0.1:8888
    
    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    results = model("tcp://127.0.0.1:8888")
    

Para obtener instrucciones detalladas de configuración, visita la sección Inferencia con Cámara.



Creado 2023-11-12, Actualizado 2024-07-05
Autores: glenn-jocher (9), IvorZhu331 (1), lakshanthad (2)

Comentarios