Saltar al contenido

Sony IMX500 Exportar para Ultralytics YOLOv8

Esta guía cubre la exportación y despliegue de los modelos Ultralytics YOLOv8 a las Cámaras Raspberry Pi AI que incorporan el sensor Sony IMX500.

Deploying computer vision models on devices with limited computational power, such as Raspberry Pi AI Camera, can be tricky. Using a model format optimized for faster performance makes a huge difference.

The IMX500 model format is designed to use minimal power while delivering fast performance for neural networks. It allows you to optimize your Ultralytics YOLOv8 models for high-speed and low-power inferencing. In this guide, we'll walk you through exporting and deploying your models to the IMX500 format while making it easier for your models to perform well on the Raspberry Pi AI Camera.

Cámara Raspberry Pi AI

¿Por qué deberías exportar a IMX500?

Sony's IMX500 Intelligent Vision Sensor is a game-changing piece of hardware in edge AI processing. It's the world's first intelligent vision sensor with on-chip AI capabilities. This sensor helps overcome many challenges in edge AI, including data processing bottlenecks, privacy concerns, and performance limitations.
While other sensors merely pass along images and frames, the IMX500 tells a whole story. It processes data directly on the sensor, allowing devices to generate insights in real-time.

Exportación del 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.

The IMX500 works with quantized models. Quantization makes models smaller and faster without losing much accuracy. It is ideal for the limited resources of edge computing, allowing applications to respond quickly by reducing latency and allowing for quick data processing locally, without cloud dependency. Local processing also keeps user data private and secure since it's not sent to a remote server.

IMX500 Características principales:

  • Metadata Output: Instead of transmitting images only, the IMX500 can output both image and metadata (inference result), and can output metadata only for minimizing data size, reducing bandwidth, and lowering costs.
  • Addresses Privacy Concerns: By processing data on the device, the IMX500 addresses privacy concerns, ideal for human-centric applications like person counting and occupancy tracking.
  • Real-time Processing: Fast, on-sensor processing supports real-time decisions, perfect for edge AI applications such as autonomous systems.

Before You Begin: For best results, ensure your YOLOv8 model is well-prepared for export by following our Model Training Guide, Data Preparation Guide, and Hyperparameter Tuning Guide.

Ejemplos de uso

Exporta un modelo Ultralytics YOLOv8 al formato IMX500 y ejecuta la inferencia con el modelo exportado.

Nota

Here we perform inference just to make sure the model works as expected. However, for deployment and inference on the Raspberry Pi AI Camera, please jump to Using IMX500 Export in Deployment section.

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 cuantización, junto con un directorio llamado <model-name>_imx_model. Este directorio incluirá 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) con 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:

ClaveValorDescripción
formatimxFormato al que exportar (imx)
int8TrueActiva la cuantización INT8 para el modelo (por defecto: True)
imgsz640Tamaño de la imagen para la entrada del modelo (por defecto: 640)

Utilizar la exportación IMX500 en la implantación

Después de exportar el modelo Ultralytics YOLOv8n al formato IMX500, se puede desplegar en la cámara IA Raspberry Pi para su inferencia.

Requisitos previos de hardware

Asegúrate de que tienes el hardware que se indica a continuación:

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

Conecta la cámara Raspberry Pi AI al conector MIPI CSI de 15 patillas de la Raspberry Pi y enciende la Raspberry Pi

Requisitos previos del software

Nota

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

Paso 1: Abre una ventana de terminal y ejecuta 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: Instala el firmware IMX500 necesario para hacer funcionar el 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: Reinicia 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 IMX500, puedes pasar este archivo a la herramienta de empaquetado para obtener un archivo RPK. Este archivo puede desplegarse directamente en la cámara AI utilizando picamera2.

Paso 1: Empaqueta 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álalo y navega hasta 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: Ejecuta 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>

Entonces podrás ver la salida de la inferencia en directo de la siguiente manera

Inference on Raspberry Pi AI Camera

Puntos de referencia

YOLOv8 El equipo de Ultralytics ejecutó las siguientes pruebas en la cámara Raspberry Pi AI con imx modelo de formato de medición de velocidad y precisión.

ModeloFormatoEstadoTamaño (MB)mAP50-95(B)Tiempo de inferencia (ms/im)
YOLOv8nimx2.90.52266.66

Nota

La validación del punto de referencia anterior se realizó utilizando el conjunto de datos coco8

¿Qué hay bajo el capó?

IMX500 deployment

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

Sony's Model Compression Toolkit (MCT) is a powerful tool for optimizing deep learning models through quantization and pruning. It supports various quantization methods and provides advanced algorithms to reduce model size and computational complexity without significantly sacrificing accuracy. MCT is particularly useful for deploying models on resource-constrained devices, ensuring efficient inference and reduced latency.

Funciones compatibles de la MCT

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

  1. Graph Optimizations: Transforms models into more efficient versions by folding layers like batch normalization into preceding layers.
  2. Quantization Parameter Search: Minimizes quantization noise using metrics like Mean-Square-Error, No-Clipping, and Mean-Average-Error.
  3. Advanced Quantization Algorithms:
    • Shift Negative Correction: Addresses performance issues from symmetric activation quantization.
    • Outliers Filtering: Uses z-score to detect and remove outliers.
    • Clustering: Utilizes non-uniform quantization grids for better distribution matching.
    • Mixed-Precision Search: Assigns different quantization bit-widths per layer based on sensitivity.
  4. Visualization: Use TensorBoard to observe model performance insights, quantization phases, and bit-width configurations.

Cuantización

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

  1. Post-Training Quantization (PTQ):
    • Disponible a través de las API Keras y PyTorch .
    • Complejidad: Baja
    • Coste computacional: Bajo (CPU minutos)
  2. Gradient-based Post-Training Quantization (GPTQ):
    • Disponible a través de las API Keras y PyTorch .
    • Complejidad: Media
    • Coste computacional: Moderado (2-3 GPU horas)
  3. Quantization-Aware Training (QAT):
    • Complejidad: Alta
    • Coste computacional: Alto (12-36 GPU horas)

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

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

Poda estructurada

La MCT introduce una poda de modelos estructurada y consciente del hardware, diseñada para arquitecturas de hardware específicas. Esta técnica aprovecha las capacidades de Instrucción Única, 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 línea con la arquitectura SIMD para una utilización específica de los recursos de la huella de memoria de los pesos. Disponible a través de las API Keras y PyTorch .

Herramienta de conversión IMX500 (Compilador)

La Herramienta de Conversión IMX500 forma parte integral del conjunto de herramientas IMX500, permitiendo la compilación de modelos para su despliegue en el sensor IMX500 de Sony (por ejemplo, Cámaras AI Raspberry Pi). Esta herramienta facilita la transición de los modelos Ultralytics YOLOv8 procesados mediante el software Ultralytics , garantizando que sean compatibles y funcionen eficazmente en el hardware especificado. El procedimiento de exportación que sigue a 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 Cámara IA Raspberry Pi.

Casos prácticos reales

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

  • Edge AI and IoT: Enable object detection on drones or security cameras, where real-time processing on low-power devices is essential.
  • Wearable Devices: Deploy models optimized for small-scale AI processing on health-monitoring wearables.
  • Smart Cities: Use IMX500-exported YOLOv8 models for traffic monitoring and safety analysis with faster processing and minimal latency.
  • Retail Analytics: Enhance in-store monitoring by deploying optimized models in point-of-sale systems or smart shelves.

Conclusión

Exportar los modelos de Ultralytics YOLOv8 al formato IMX500 de Sony te permite desplegar tus modelos para una inferencia eficiente en cámaras basadas en IMX500. Aprovechando las técnicas avanzadas de cuantización, puedes reducir el tamaño del modelo y mejorar la velocidad de inferencia sin comprometer significativamente la precisión.

For more information and detailed guidelines, refer to Sony's IMX500 website.

PREGUNTAS FRECUENTES

¿Cómo exporto un modelo de YOLOv8 al formato IMX500 para la cámara IA de Raspberry Pi?

Para exportar un modelo YOLOv8 al formato IMX500, utiliza 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 el despliegue, incluyendo packerOut.zip que se puede utilizar con la herramienta de empaquetado IMX500 en Raspberry Pi.

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

El formato IMX500 ofrece varias ventajas importantes para el despliegue en el borde:

  • El procesamiento de IA en chip reduce la latencia y el consumo de energía
  • Da salida tanto a la imagen como a los metadatos (resultado de la inferencia) en lugar de sólo a las imágenes
  • Mayor privacidad al procesar los datos localmente sin depender de la nube
  • Capacidad de procesamiento en tiempo real, ideal para aplicaciones sensibles al tiempo
  • Cuantización optimizada para un despliegue eficiente del modelo 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

Programa informático:

  • Raspberry Pi OS Bookworm
  • Firmware y herramientas del 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 pruebas comparativas de Ultralytics sobre la Cámara IA de Raspberry Pi:

  • YOLOv8n consigue 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 eficaz en tiempo real, manteniendo 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. Utiliza la herramienta empaquetadora 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. Ejecuta 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>
    
📅 Created 8 days ago ✏️ Updated 6 days ago

Comentarios