Exportación a Sony IMX500 para Ultralytics YOLO11

Esta guía cubre la exportación y el despliegue de modelos de Ultralytics YOLO11 en Raspberry Pi AI Cameras que cuentan con el sensor Sony IMX500.

Desplegar modelos de visión artificial en dispositivos con potencia computacional limitada, como la Raspberry Pi AI Camera, puede ser complicado. Usar un formato de modelo optimizado para un rendimiento más rápido marca una gran diferencia.

El formato de modelo IMX500 está diseñado para consumir la mínima energía mientras ofrece un rendimiento rápido para redes neuronales. Te permite optimizar tus modelos de Ultralytics YOLO11 para una inferencia 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 que tus modelos tengan un buen rendimiento en la Raspberry Pi AI Camera.

Raspberry Pi AI Camera with Sony IMX500 sensor

¿Por qué deberías exportar a IMX500?

El Sensor de Visión Inteligente IMX500 de Sony es una pieza de hardware revolucionaria en el procesamiento de Edge AI. Es el primer sensor de visión inteligente del mundo con capacidades de IA integradas en el chip. Este sensor ayuda a superar muchos desafíos en Edge AI, incluidos los cuellos de botella en el procesamiento de datos, las preocupaciones de privacidad y las limitaciones de rendimiento. Mientras que otros sensores simplemente transmiten imágenes y fotogramas, el IMX500 cuenta una historia completa. Procesa los datos directamente en el sensor, permitiendo que los dispositivos generen información en tiempo real.

Exportación a Sony IMX500 para modelos YOLO11

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.

El IMX500 funciona 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 la computación en el borde (edge computing), permitiendo que las aplicaciones respondan rápidamente al reducir la latencia y permitir un procesamiento de datos ágil a nivel local, sin dependencia de la nube. El procesamiento local también mantiene los datos del usuario privados y seguros, ya que no se envían a un servidor remoto.

Características clave del IMX500:

  • Salida de metadatos: En lugar de transmitir solo imágenes, el IMX500 puede emitir tanto la imagen como los metadatos (resultado de la inferencia), y puede emitir solo metadatos para minimizar el tamaño de los datos, reducir el ancho de banda y bajar los costes.
  • Aborda las preocupaciones de privacidad: Al procesar datos en el propio dispositivo, el IMX500 aborda las preocupaciones de privacidad, lo que lo hace ideal para aplicaciones centradas en humanos, como el conteo de personas y el seguimiento de ocupación.
  • Procesamiento en tiempo real: El procesamiento rápido en el sensor admite decisiones en tiempo real, perfecto para aplicaciones de Edge AI como sistemas autónomos.

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

Tareas admitidas

Actualmente, solo puedes exportar modelos que incluyan las siguientes tareas al formato IMX500.

Variantes de modelos soportadas

La exportación IMX está diseñada y probada para YOLOv8n y YOLO11n (nano). No se admiten otras arquitecturas ni escalas de modelo.

Ejemplos de uso

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

Nota

Aquí realizamos la inferencia solo para asegurarnos de que el modelo funciona como se espera. Sin embargo, para el despliegue y la inferencia en la Raspberry Pi AI Camera, por favor salta a la sección Usar la exportación IMX500 en el despliegue.

Detección de objetos
 from ultralytics import YOLO

 # Load a YOLO11n PyTorch model
 model = YOLO("yolo11n.pt")

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

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

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
Estimación de pose
 from ultralytics import YOLO

 # Load a YOLO11n-pose PyTorch model
 model = YOLO("yolo11n-pose.pt")

 # Export the model
 model.export(format="imx", data="coco8-pose.yaml")  # exports with PTQ quantization by default

 # Load the exported model
 imx_model = YOLO("yolo11n-pose_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
Clasificación
 from ultralytics import YOLO

 # Load a YOLO11n-cls PyTorch model
 model = YOLO("yolo11n-cls.pt")

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

 # Load the exported model
 imx_model = YOLO("yolo11n-cls_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
Segmentación de instancias
 from ultralytics import YOLO

 # Load a YOLO11n-seg PyTorch model
 model = YOLO("yolo11n-seg.pt")

 # Export the model
 model.export(format="imx", data="coco8-seg.yaml")  # exports with PTQ quantization by default

 # Load the exported model
 imx_model = YOLO("yolo11n-seg_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
Advertencia

El paquete Ultralytics instala dependencias de exportación adicionales en tiempo de ejecución. La primera vez que ejecutes el comando de exportación, es posible que debas reiniciar tu consola para asegurarte de que funcione correctamente.

Argumentos de exportación

ArgumentoTipoPredeterminadoDescripción
formatstr'imx'Formato de destino para el modelo exportado, que define la compatibilidad con varios entornos de implementación.
imgszint o tuple640Tamaño de imagen deseado para la entrada del modelo. Puede ser un número entero para imágenes cuadradas o una tupla (height, width) para dimensiones específicas.
int8boolTrueActiva la cuantización INT8, comprimiendo aún más el modelo y acelerando la inferencia con una pérdida de precisión mínima, principalmente para dispositivos de borde (edge).
datastr'coco8.yaml'Ruta al archivo de configuración del dataset (por defecto: coco8.yaml), esencial para la cuantización.
fractionfloat1.0Especifica la fracción del conjunto de datos a usar para la calibración de cuantización INT8. Permite calibrar sobre un subconjunto del conjunto de datos completo, útil para experimentos o cuando los recursos son limitados. Si no se especifica con INT8 activado, se usará el conjunto de datos completo.
nmsboolFalseAñade la supresión de no máximos (NMS) al modelo exportado. Cuando es True, también se aceptan conf, iou y agnostic_nms.
devicestrNoneEspecifica el dispositivo para la exportación: GPU (device=0), CPU (device=cpu).
Consejo

Si estás exportando en una GPU con soporte para CUDA, por favor pasa el argumento device=0 para una exportación más rápida.

Para más detalles sobre el proceso de exportación, visita la página de documentación de Ultralytics sobre exportación.

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á el archivo packerOut.zip, que es esencial para empaquetar el modelo para su despliegue en el hardware IMX500. Además, la carpeta <model-name>_imx_model contendrá un archivo de texto (labels.txt) que enumera todas las etiquetas asociadas con el modelo.

Estructura de carpetas
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

Usar la exportación IMX500 en el despliegue

Después de exportar el modelo Ultralytics YOLO11n al formato IMX500, se puede desplegar en la Raspberry Pi AI Camera para la inferencia.

Requisitos previos de hardware

Asegúrate de tener el siguiente hardware:

  1. Raspberry Pi 5 o Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

Conecta la Raspberry Pi AI Camera al conector MIPI CSI de 15 pines en la Raspberry Pi y enciende 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: 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 del IMX500, que es necesario para operar el sensor IMX500.

sudo apt install imx500-all

Paso 3: Reinicia la Raspberry Pi para que los cambios surtan efecto.

sudo reboot

Paso 4: Instala la biblioteca del módulo de aplicación Aitrios Raspberry Pi.

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

Paso 5: Ejecuta la detección de objetos, estimación de poses, clasificación y segmentación de YOLO11 usando los siguientes scripts que están disponibles en los ejemplos de aitrios-rpi-application-module-library.

Nota

Asegúrate de reemplazar los directorios model_file y labels.txt según tu entorno antes de ejecutar estos scripts.

Scripts de Python
import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics

class YOLO(Model):
    """YOLO model for IMX500 deployment."""

    def __init__(self):
        """Initialize the YOLO model for IMX500 deployment."""
        super().__init__(
            model_file="yolo11n_imx_model/packerOut.zip",  # replace with proper directory
            model_type=MODEL_TYPE.CONVERTED,
            color_format=COLOR_FORMAT.RGB,
            preserve_aspect_ratio=False,
        )

        self.labels = np.genfromtxt(
            "yolo11n_imx_model/labels.txt",  # replace with proper directory
            dtype=str,
            delimiter="\n",
        )

    def post_process(self, output_tensors):
        """Post-process the output tensors for object detection."""
        return pp_od_yolo_ultralytics(output_tensors)

device = AiCamera(frame_rate=16)  # Optimal frame rate for maximum DPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.55]
        labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]

        annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
        frame.display()

Benchmarks

Los benchmarks de YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls y YOLO11n-cls a continuación fueron ejecutados por el equipo de Ultralytics en la Raspberry Pi AI Camera con el formato de modelo imx, midiendo la velocidad y la precisión.

ModeloFormatoTamaño (píxeles)Tamaño de packerOut.zip (MB)mAP50-95(B)Tiempo de inferencia (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
ModeloFormatoTamaño (píxeles)Tamaño de packerOut.zip (MB)acc (top1)acc (top5)Tiempo de inferencia (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
Nota

La validación para los benchmarks anteriores se realizó utilizando el conjunto de datos COCO128 para modelos de detección, el conjunto de datos COCO8-Pose para modelos de estimación de poses y ImageNet10 para modelos de clasificación.

¿Qué hay debajo del capó?

Sony IMX500 YOLO model deployment workflow

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

El Kit de herramientas de compresión de modelos (MCT) de Sony es una herramienta potente para optimizar modelos de aprendizaje profundo mediante cuantización y poda (pruning). Admite 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 particularmente útil para desplegar modelos en dispositivos con recursos limitados, asegurando una inferencia eficiente y una menor latencia.

Características soportadas de MCT

El MCT de Sony ofrece una gama de características diseñadas para optimizar modelos de redes neuronales:

  1. Optimizaciones de grafos: Transforma modelos en versiones más eficientes plegando capas como la normalización por lotes en las capas anteriores.
  2. Búsqueda de parámetros de cuantización: Minimiza el ruido de cuantización utilizando métricas como el error cuadrático medio (Mean-Square-Error), el recorte (No-Clipping) y el error promedio absoluto (Mean-Average-Error).
  3. Algoritmos de cuantización avanzados:
    • Corrección de desplazamiento negativo: Aborda los problemas de rendimiento derivados de la cuantización de activación simétrica.
    • Filtrado de valores atípicos: Utiliza la puntuación z (z-score) para detectar y eliminar valores atípicos.
    • Agrupamiento (Clustering): Utiliza rejillas de cuantización no uniformes para una mejor correspondencia de distribución.
    • Búsqueda de precisión mixta: Asigna diferentes anchos de bits de cuantización por capa según su sensibilidad.
  4. Visualización: Usa TensorBoard para observar información sobre el rendimiento del modelo, fases de cuantización y configuraciones de ancho de bits.

Cuantización

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

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

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

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

Poda estructurada

MCT introduce la poda de modelos estructurada y consciente del hardware, diseñada para arquitecturas de hardware específicas. Esta técnica aprovecha las capacidades SIMD (Single Instruction, Multiple Data) de la plataforma objetivo mediante la poda de grupos SIMD. Esto reduce el tamaño y la complejidad del modelo mientras optimiza la utilización de los canales, alineado con la arquitectura SIMD para una utilización dirigida de la memoria de pesos. Disponible a través de las API de Keras y PyTorch.

Herramienta de conversión IMX500 (Compilador)

La herramienta de conversión IMX500 es parte integral del conjunto de herramientas IMX500, permitiendo la compilación de modelos para su despliegue en el sensor IMX500 de Sony (por ejemplo, en Raspberry Pi AI Cameras). Esta herramienta facilita la transición de modelos de Ultralytics YOLO11 procesados a través del software de Ultralytics, asegurando que sean compatibles y funcionen eficientemente en el hardware especificado. El procedimiento de exportación después de la cuantización del modelo implica la generación de archivos binarios que encapsulan datos esenciales y configuraciones específicas del dispositivo, agilizando el proceso de despliegue en la Raspberry Pi AI Camera.

Casos de uso en el mundo real

La exportación al formato IMX500 tiene una amplia aplicabilidad en diversas industrias. Aquí tienes algunos ejemplos:

  • Edge AI e IoT: Permite la detección de objetos en drones o cámaras de seguridad, donde el procesamiento en tiempo real en dispositivos de bajo consumo es esencial.
  • Dispositivos portátiles: Despliega modelos optimizados para el procesamiento de IA a pequeña escala en dispositivos portátiles de monitoreo de salud.
  • Smart Cities: utiliza modelos YOLO11 exportados a IMX500 para monitorización de tráfico y análisis de seguridad con un procesamiento más rápido y una latencia mínima.
  • Retail Analytics: mejora la monitorización en tienda desplegando modelos optimizados en sistemas de punto de venta o estanterías inteligentes.

Conclusión

Exportar modelos Ultralytics YOLO11 al formato IMX500 de Sony te permite desplegar tus modelos para una inferencia eficiente en cámaras basadas en IMX500. Al aprovechar técnicas de cuantización avanzadas, puedes 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, consulta el sitio web de IMX500 de Sony.

Preguntas frecuentes

¿Cómo exporto un modelo YOLO11 al formato IMX500 para la Raspberry Pi AI Camera?

Para exportar un modelo YOLO11 al formato IMX500, utiliza la API de Python o el comando de la CLI:

from ultralytics import YOLO

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

El proceso de exportación creará un directorio que contiene los archivos necesarios para el despliegue, incluido packerOut.zip.

¿Cuáles son los beneficios clave de utilizar el formato IMX500 para el despliegue de IA en el borde (edge AI)?

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

  • El procesamiento de IA en el chip reduce la latencia y el consumo de energía
  • Genera tanto imágenes como metadatos (resultado de inferencia) en lugar de solo imágenes
  • Privacidad mejorada al procesar los datos localmente sin dependencia de la nube
  • Capacidades de procesamiento en tiempo real ideales 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 el despliegue de IMX500?

Para desplegar modelos IMX500, necesitarás:

Hardware:

  • Raspberry Pi 5 o Raspberry Pi 4 Model B
  • Raspberry Pi AI Camera con sensor IMX500

Software:

  • Raspberry Pi OS Bookworm
  • Firmware y herramientas de IMX500 (sudo apt install imx500-all)

¿Qué rendimiento puedo esperar de los modelos YOLO11 en el IMX500?

Basado en los benchmarks de Ultralytics en la Raspberry Pi AI Camera:

  • YOLO11n alcanza un tiempo de inferencia de 62,50ms por imagen
  • mAP50-95 de 0,492 en el conjunto de datos COCO128
  • Tamaño del modelo de solo 3,2MB tras la cuantización

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

Comentarios