Ir al contenido

Sony IMX500 Exportación para Ultralytics YOLOv8

Esta guía cubre la exportación e implementación de modelos Ultralytics YOLOv8 a las cámaras Raspberry Pi AI que cuentan con el sensor Sony IMX500.

La implementación de modelos de visión por ordenador en dispositivos con potencia de cálculo limitada, como la cámara Raspberry Pi AI, puede resultar complicada. Utilizar un formato de modelo optimizado para un rendimiento más rápido marca una gran diferencia.

El formato del modelo IMX500 está diseñado para consumir la mínima energía a la vez que ofrece un rendimiento rápido para redes neuronales. Le permite optimizar sus modelos Ultralytics YOLOv8 modelos para inferencias de alta velocidad y bajo consumo. En esta guía, te guiaremos a través de la exportación y el despliegue de tus modelos al formato IMX500, facilitando al mismo tiempo que tus modelos tengan un buen rendimiento en la Raspberry Pi AI Camera.

Cámara Raspberry Pi AI

¿Por qué exportar a IMX500?

El sensor de visión inteligente IMX500 de Sony es una pieza de hardware revolucionaria en el procesamiento de inteligencia artificial. Es el primer sensor de visión inteligente del mundo con funciones de IA integradas en el chip. Este sensor ayuda a superar muchos retos de la IA periférica, como los cuellos de botella en el procesamiento de datos, los problemas de privacidad y las limitaciones de rendimiento.
Mientras que otros sensores se limitan a transmitir imágenes y fotogramas, el IMX500 cuenta una historia completa. Procesa los datos directamente en el sensor, lo que permite a los dispositivos generar información en tiempo real.

Exportación de IMX500 de Sony para los modelos YOLOv8

El IMX500 está diseñado para transformar la forma en que los dispositivos manejan los datos directamente en el sensor, sin necesidad de enviarlos a la nube para su procesamiento.

La IMX500 trabaja con modelos cuantizados. La cuantización hace que los modelos sean más pequeños y rápidos sin perder mucha precisión. Es ideal para los recursos limitados de edge computing, ya que permite que las aplicaciones respondan con rapidez al reducir la latencia y permitir un procesamiento rápido de los datos a nivel local, sin depender de la nube. El procesamiento local también mantiene la privacidad y seguridad de los datos del usuario, ya que no se envían a un servidor remoto.

IMX500 Características principales:

  • Salida de metadatos: En lugar de transmitir sólo imágenes, la IMX500 puede emitir tanto imágenes como metadatos (resultado de la inferencia), y puede emitir sólo metadatos para minimizar el tamaño de los datos, reducir el ancho de banda y disminuir los costes.
  • Resuelve los problemas de privacidad: Al procesar los datos en el dispositivo, la IMX500 aborda los problemas de privacidad, ideal para aplicaciones centradas en el ser humano como el recuento de personas y el seguimiento de la ocupación.
  • Procesamiento en tiempo real: El procesamiento rápido y en el sensor permite tomar decisiones en tiempo real, lo que resulta perfecto para aplicaciones de IA avanzadas, como los sistemas autónomos.

Antes de empezar: Para obtener los mejores resultados, asegúrese de que su modelo YOLOv8 está bien preparado para la exportación siguiendo nuestra Guía de formación de modelos, la Guía de preparación de datos y la Guía de ajuste de hiperparámetros.

Ejemplos de uso

Exporte un modelo Ultralytics YOLOv8 al formato IMX500 y ejecute la inferencia con el modelo exportado.

Nota

Aquí realizamos la inferencia sólo para asegurarnos de que el modelo funciona como se espera. Sin embargo, para el despliegue y la inferencia en la cámara Raspberry Pi AI, por favor vaya a Usando IMX500 Export en la sección de Despliegue.

Ejemplo

from ultralytics import YOLO

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

# Export the model
model.export(format="imx")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolov8n_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLOv8n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolov8n.pt format=imx

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

El proceso de exportación creará un modelo ONNX para la validación de la cuantificación, junto con un directorio denominado <model-name>_imx_model. Este directorio incluirá los archivos packerOut.zip que es esencial para empaquetar el modelo para su despliegue en el hardware IMX500. Además, el archivo <model-name>_imx_model contendrá un archivo de texto (labels.txt) que enumera todas las etiquetas asociadas al modelo.

yolov8n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolov8n_imx.onnx
├── yolov8n_imx500_model_MemoryReport.json
└── yolov8n_imx500_model.pbtxt

Argumentos

Al exportar un modelo al formato IMX500, puedes especificar varios argumentos:

Clave Valor Descripción
format imx Formato de exportación (imx)
int8 True Activar la cuantización INT8 para el modelo (por defecto: True)
imgsz 640 Tamaño de la imagen para la entrada del modelo (por defecto: 640)

Utilización de la exportación IMX500 en la implantación

Tras exportar el modelo Ultralytics YOLOv8n al formato IMX500, puede desplegarse en la cámara Raspberry Pi AI para su inferencia.

Requisitos previos de hardware

Asegúrese de que dispone del hardware que se indica a continuación:

  1. Raspberry Pi 5 o Raspberry Pi 4 Modelo B
  2. Cámara Raspberry Pi AI

Conectar la cámara Raspberry Pi AI al conector MIPI CSI de 15 pines de la Raspberry Pi y encender la Raspberry Pi.

Requisitos previos de software

Nota

Esta guía ha sido probada con Raspberry Pi OS Bookworm ejecutándose en una Raspberry Pi 5

Paso 1: Abra una ventana de terminal y ejecute los siguientes comandos para actualizar el software de la Raspberry Pi a la última versión.

sudo apt update && sudo apt full-upgrade

Paso 2: Instale el firmware IMX500 necesario para el funcionamiento del sensor IMX500 junto con una herramienta de empaquetado.

sudo apt install imx500-all imx500-tools

Paso 3: Instalar los requisitos previos para ejecutar picamera2 aplicación. Utilizaremos esta aplicación más adelante para el proceso de despliegue.

sudo apt install python3-opencv python3-munkres

Paso 4: Reinicie la Raspberry Pi para que los cambios surtan efecto

sudo reboot

Empaquetar el modelo y desplegarlo en la cámara AI

Tras obtener packerOut.zip del proceso de conversión de IMX500, puede pasar este archivo a la herramienta de empaquetado para obtener un archivo RPK. A continuación, este archivo puede desplegarse directamente en la cámara AI utilizando picamera2.

Paso 1: empaquetar el modelo en un archivo RPK

imx500-package -i <path to packerOut.zip> -o <output folder>

Lo anterior generará un network.rpk dentro de la carpeta de salida especificada.

Paso 2: Clonar picamera2 instálelo y vaya a los ejemplos imx500

git clone -b next https://github.com/raspberrypi/picamera2
cd picamera2
pip install -e .  --break-system-packages
cd examples/imx500

Paso 3: Ejecute la detección de objetos de YOLOv8 , utilizando el archivo labels.txt que se ha generado durante la exportación de IMX500.

python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --ignore-dash-labels --bbox-order xy --labels <path to labels.txt>

A continuación, podrá ver el resultado de la inferencia en directo de la siguiente manera

Inferencia en la cámara Raspberry Pi AI

Puntos de referencia

YOLOv8 El equipo de Ultralytics ejecutó las siguientes pruebas en la Raspberry Pi AI Camera con imx formato de modelo que mide la velocidad y la precisión.

Modelo Formato Estado Tamaño (MB) mAP50-95(B) Tiempo de inferencia (ms/im)
YOLOv8n imx 2.9 0.522 66.66

Nota

La validación de la referencia anterior se realizó con el conjunto de datos coco8

¿Qué hay bajo el capó?

Implantación de IMX500

Kit de herramientas de compresión de modelos (MCT) de Sony

Model Compression Toolkit (MCT) de Sony es una potente herramienta para optimizar los modelos de aprendizaje profundo mediante la cuantización y la poda. Es compatible con varios métodos de cuantización y proporciona algoritmos avanzados para reducir el tamaño del modelo y la complejidad computacional sin sacrificar significativamente la precisión. MCT es especialmente útil para desplegar modelos en dispositivos con recursos limitados, garantizando una inferencia eficiente y una latencia reducida.

Funciones compatibles con MCT

El MCT de Sony ofrece una serie de funciones diseñadas para optimizar los modelos de redes neuronales:

  1. Optimizaciones gráficas: Transforma los modelos en versiones más eficientes plegando capas como la normalización de lotes en capas precedentes.
  2. Búsqueda de parámetros de cuantificación: Minimiza el ruido de cuantización utilizando métricas como Error Cuadrático Medio, No-Clipping y Error Medio-Promedio.
  3. Algoritmos de cuantización avanzados:
    • Corrección del desplazamiento negativo: Soluciona los problemas de rendimiento derivados de la cuantificación simétrica de la activación.
    • Filtrado de valores atípicos: Utiliza z-score para detectar y eliminar valores atípicos.
    • Agrupación: Utiliza rejillas de cuantificación no uniformes para un mejor ajuste de la distribución.
    • Búsqueda de precisión mixta: Asigna diferentes anchos de bits de cuantificación por capa en función de la sensibilidad.
  4. Visualización: Utilice TensorBoard para observar el rendimiento del modelo, las fases de cuantificación y las configuraciones de ancho de bits.

Cuantización

MCT admite varios métodos de cuantificación para reducir el tamaño del modelo y mejorar la velocidad de inferencia:

  1. Cuantificación posterior al entrenamiento (PTQ):
    • Disponible a través de las API de Keras y PyTorch .
    • Complejidad: Baja
    • Coste computacional: Bajo (CPU minutos)
  2. Cuantificación posterior al entrenamiento basada en gradientes (GPTQ):
    • Disponible a través de las API de Keras y PyTorch .
    • Complejidad: Media
    • Coste computacional: Moderado (2-3 GPU horas)
  3. Formación consciente de la cuantización (QAT):
    • Complejidad: Alta
    • Coste computacional: Alto (12-36 GPU horas)

MCT también admite varios esquemas de cuantificación para pesos y activaciones:

  1. Potencia de dos (compatible con hardware)
  2. Simétrico
  3. Uniforme

Poda estructurada

MCT introduce una poda de modelos estructurada y adaptada al hardware, diseñada para arquitecturas de hardware específicas. Esta técnica aprovecha las capacidades de instrucción única y datos múltiples (SIMD) de la plataforma de destino mediante la poda de grupos SIMD. Esto reduce el tamaño y la complejidad del modelo a la vez que optimiza la utilización de los canales, en consonancia con la arquitectura SIMD para una utilización específica de los recursos de la huella de memoria de pesos. Disponible a través de las API de Keras y PyTorch .

Herramienta de conversión IMX500 (compilador)

La herramienta IMX500 Converter Tool forma parte del conjunto de herramientas IMX500 y permite compilar modelos para su implementación en el sensor IMX500 de Sony (por ejemplo, cámaras Raspberry Pi AI). Esta herramienta facilita la transición de los modelos Ultralytics YOLOv8 procesados a través del software Ultralytics , garantizando que sean compatibles y funcionen eficazmente en el hardware especificado. El procedimiento de exportación tras la cuantización del modelo implica la generación de archivos binarios que encapsulan los datos esenciales y las configuraciones específicas del dispositivo, agilizando el proceso de despliegue en la Raspberry Pi AI Camera.

Casos prácticos reales

La exportación al formato IMX500 tiene una amplia aplicabilidad en todos los sectores. He aquí algunos ejemplos:

  • Edge AI e IoT: Permite la detección de objetos en drones o cámaras de seguridad, donde es esencial el procesamiento en tiempo real en dispositivos de bajo consumo.
  • Dispositivos portátiles: Despliegue de modelos optimizados para el procesamiento de IA a pequeña escala en wearables de control sanitario.
  • Ciudades inteligentes: Utilice los modelos YOLOv8 exportados por IMX500 para la supervisión del tráfico y el análisis de la seguridad con un procesamiento más rápido y una latencia mínima.
  • Análisis del comercio minorista: Mejore la supervisión en tienda desplegando modelos optimizados en sistemas de punto de venta o estanterías inteligentes.

Conclusión

La exportación de los modelos de Ultralytics YOLOv8 al formato IMX500 de Sony le permite desplegar sus modelos para una inferencia eficaz en cámaras basadas en IMX500. Gracias a las técnicas avanzadas de cuantización, puede reducir el tamaño del modelo y mejorar la velocidad de inferencia sin comprometer significativamente la precisión.

Para obtener más información y directrices detalladas, consulte el sitio web IMX500 de Sony.

PREGUNTAS FRECUENTES

¿Cómo puedo exportar un modelo YOLOv8 al formato IMX500 para la cámara Raspberry Pi AI?

Para exportar un modelo YOLOv8 al formato IMX500, utilice la API Python o el comando CLI :

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="imx")  # Exports with PTQ quantization by default

El proceso de exportación creará un directorio que contendrá los archivos necesarios para la implantación, entre ellos packerOut.zip que puede utilizarse con la herramienta de empaquetado IMX500 en Raspberry Pi.

¿Cuáles son las principales ventajas de utilizar el formato IMX500 para la implantación de la IA en los bordes?

El formato IMX500 ofrece varias ventajas importantes para la implantación en los bordes:

  • El procesamiento de IA en chip reduce la latencia y el consumo de energía
  • Muestra tanto la imagen como los metadatos (resultado de la inferencia) en lugar de sólo las imágenes.
  • Mayor privacidad al procesar los datos localmente sin depender de la nube
  • Capacidades de procesamiento en tiempo real ideales para aplicaciones sensibles al tiempo.
  • Cuantización optimizada para un despliegue eficaz de modelos en dispositivos con recursos limitados

¿Qué requisitos previos de hardware y software se necesitan para implantar IMX500?

Para desplegar los modelos IMX500, necesitarás:

Hardware:

  • Raspberry Pi 5 o Raspberry Pi 4 Modelo B
  • Cámara Raspberry Pi AI con sensor IMX500

Software:

  • Raspberry Pi OS Bookworm
  • Firmware y herramientas IMX500 (sudo apt install imx500-all imx500-tools)
  • Python paquetes para picamera2 (sudo apt install python3-opencv python3-munkres)

¿Qué rendimiento puedo esperar de los modelos YOLOv8 en la IMX500?

Basado en Ultralytics benchmarks on Raspberry Pi AI Camera:

  • YOLOv8n logra un tiempo de inferencia de 66,66 ms por imagen
  • mAP50-95 de 0,522 en el conjunto de datos COCO8
  • Tamaño del modelo de sólo 2,9 MB tras la cuantización

Esto demuestra que el formato IMX500 proporciona una inferencia eficiente en tiempo real al tiempo que mantiene una buena precisión para las aplicaciones de IA de borde.

¿Cómo empaqueto y despliego mi modelo exportado a la cámara Raspberry Pi AI?

Después de exportar al formato IMX500:

  1. Utilice la herramienta de empaquetado para crear un archivo RPK:

    imx500-package -i <path to packerOut.zip> -o <output folder>
    
  2. Clona e instala picamera2:

    git clone -b next https://github.com/raspberrypi/picamera2
    cd picamera2 && pip install -e . --break-system-packages
    
  3. Ejecute la inferencia utilizando el archivo RPK generado:

    python imx500_object_detection_demo.py --model <path to network.rpk> --fps 25 --bbox-normalization --labels <path to labels.txt>
    
Creado hace 1 mes ✏️ Actualizado hace 20 días

Comentarios