YOLO Vision 2026:

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 de cálculo limitada, como 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 energía mínima a la vez que ofrece un rendimiento rápido para redes neuronales. Te permite optimizar tus modelos de Ultralytics YOLO11 para inferencia a 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 funcionen bien en la Raspberry Pi AI Camera.

Raspberry Pi AI Camera with Sony IMX500 sensor

¿Por qué deberías exportar a IMX500?#

IMX500 Intelligent Vision Sensor de Sony es una pieza de hardware revolucionaria en el procesamiento de IA en el borde. 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 la IA en el borde, incluidos los cuellos de botella en el procesamiento de datos, las preocupaciones sobre la privacidad y las limitaciones de rendimiento. Mientras que otros sensores simplemente transmiten imágenes y fotogramas, el IMX500 cuenta toda una historia. Procesa los datos directamente en el sensor, lo que permite a los dispositivos generar información en tiempo real.

Exportación a Sony IMX500 para modelos YOLO11#

El IMX500 está diseñado para transformar cómo 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, permitiendo que las aplicaciones respondan rápidamente al reducir la latencia y facilitando el procesamiento rápido de datos de forma 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 sobre la privacidad: Al procesar datos en el dispositivo, el IMX500 aborda las preocupaciones sobre la privacidad, siendo 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, la Guía de preparación de datos y la Guía de ajuste de hiperparámetros.

Tareas compatibles#

La exportaci3n a IMX500 es compatible con cuatro de las siete tareas de Ultralytics, y solo para YOLOv8n y YOLO11n: otras familias de modelos, escalas y arquitecturas no son compatibles, y exportar un modelo de segmentaci3n sem%antica, OBB o estimaci3n de profundidad genera un error.

TareaYOLOv8YOLO11YOLO26
Detect
Segment
Semantic
Depth
Classify
Pose
OBB

Ejemplos de uso#

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

El formato IMX500 admite los modos Export, Predict y Validate. La inferencia y la validación se ejecutan en la Raspberry Pi AI Camera (IMX500).

Nota

Aquí realizamos la inferencia solo para asegurarnos de que el modelo funcione como se espera. Sin embargo, para el despliegue y la inferencia en la Raspberry Pi AI Camera, pasa a la sección Using IMX500 Export in Deployment.

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 poses
 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")
Validar
 from ultralytics import YOLO

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

 # Validate accuracy on the COCO8 dataset
 metrics = model.val(data="coco8.yaml")
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, puede que necesites reiniciar tu consola para asegurarte de que funcione correctamente.

Argumentos de exportación#

ArgumentoTipoPredeterminadoDescripción
formatstr'imx'Formato de destino para el modelo exportado, definiendo la compatibilidad con diversos entornos de despliegue.
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.
quantizeint o str8/autoPrecisión de cuantización. 8 (INT8/PTQ) se activa automáticamente para IMX500; "w8a16" exporta pesos INT8 con activaciones FP16. No se admiten exportaciones exclusivas de FP32 y FP16. Sustituye los indicadores obsoletos half y int8.
datastrNoneRuta al YAML del conjunto de datos, esencial para la cuantización; la clasificación, en su lugar, toma un directorio de conjuntos de datos o el nombre de un conjunto de datos integrado. Si se omite con quantize=8 o 'w8a16', Ultralytics selecciona el conjunto de datos de calibración predeterminado para la tarea del modelo.
fractionfloat1.0Especifica la fracción del conjunto de datos a utilizar para la calibración de cuantización INT8. Permite calibrar en un subconjunto del conjunto de datos completo, útil para experimentos o cuando los recursos son limitados. Si no se especifica con INT8 habilitado, se utilizará el conjunto de datos completo.
nmsboolFalseAgrega la supresión de no máximos (NMS) al modelo exportado. Cuando True, conf, iou y agnostic_nms también se aceptan.
devicestrNoneEspecifica el dispositivo para la exportación: GPU (device=0), CPU (device=cpu).
Consejo

Si estás exportando en una GPU con compatibilidad con CUDA, 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 la carpeta
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, puede desplegarse en la Raspberry Pi AI Camera para la inferencia.

Requisitos previos de hardware#

Asegúrate de tener el hardware siguiente:

  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 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: Instalar Aitrios Raspberry Pi application module library

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

Paso 5: Ejecuta la detección de objetos, la estimación de postura, la clasificación y la segmentación con YOLO11 utilizando los siguientes scripts disponibles en aitrios-rpi-application-module-library examples.

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 FPS 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#

Las pruebas comparativas de YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls y YOLO11n-cls a continuación fueron ejecutadas 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 dataset COCO128 para los modelos de detección, el dataset COCO8-Pose para los modelos de estimación de pose y ImageNet10 para los modelos de clasificación.

¿Qué hay debajo del capó?#

Sony IMX500 YOLO model deployment workflow

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

Sony's Model Compression Toolkit (MCT) es una herramienta potente para optimizar 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 menor latencia.

Características admitidas del MCT#

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

  1. Optimizaciones de grafos: Transforma modelos en versiones más eficientes mediante la consolidación de capas, como la normalización por lotes (batch normalization), en las capas precedentes.
  2. Búsqueda de parámetros de cuantización: Minimiza el ruido de cuantización usando métricas como el error cuadrático medio (MSE), No-Clipping y el error medio absoluto (MAE).
  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 (outliers): Usa 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 coincidencia de la distribución.
    • Búsqueda de precisión mixta: Asigna diferentes anchos de bits de cuantización por capa según la 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#

El 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 gradientes (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)

El 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 adaptada al hardware, diseñada para arquitecturas de hardware específicas. Esta técnica aprovecha las capacidades de Instrucción Única, Múltiples Datos (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 el uso de los canales, alineándose con la arquitectura SIMD para un aprovechamiento específico de los recursos de memoria de los pesos. Disponible a través de las APIs 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, Raspberry Pi AI Camera). Esta herramienta facilita la transición de los modelos Ultralytics YOLO11 procesados mediante el software de Ultralytics, asegurando que sean compatibles y funcionen de forma eficiente en el hardware especificado. El procedimiento de exportación tras 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 fundamental.
  • Dispositivos vestibles: Despliega modelos optimizados para el procesamiento de IA a pequeña escala en dispositivos vestibles de monitoreo de salud.
  • Ciudades inteligentes: Usa modelos YOLO11 exportados a IMX500 para el monitoreo del tráfico y análisis de seguridad con un procesamiento más rápido y una latencia mínima.
  • Analítica minorista: Mejora la vigilancia 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 avanzadas de cuantización, 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.

FAQ#

  • Para exportar un modelo YOLO11 al formato IMX500, usa la API de Python o el comando 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 contendrá los archivos necesarios para el despliegue, incluido packerOut.zip.

  • El formato IMX500 ofrece varias ventajas importantes para el despliegue en el borde (edge):

    • El procesamiento de IA en el chip reduce la latencia y el consumo de energía
    • Produce 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
  • 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)
  • Basado en las evaluaciones comparativas de Ultralytics en Raspberry Pi AI Camera:

    • YOLO11n alcanza un tiempo de inferencia de 58,82ms por imagen
    • mAP50-95 de 0,517 en el conjunto de datos COCO128
    • Tamaño del modelo de solo 2,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 Edge AI.

Comentarios