Exportación de Sony IMX500 para Ultralytics YOLO11#
Esta guía explica cómo exportar y desplegar modelos de Ultralytics YOLO11 en cámaras Raspberry Pi AI Camera equipadas con el sensor Sony IMX500.
Desplegar modelos de visión artificial en dispositivos con una potencia computacional limitada, como Raspberry Pi AI Camera, puede ser complicado. Utilizar 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 utilizar una potencia mínima y ofrecer un rendimiento rápido para redes neuronales. Permite optimizar tus modelos de Ultralytics YOLO11 para realizar inferencias a alta velocidad y con bajo consumo. En esta guía, te explicaremos cómo exportar y desplegar tus modelos en formato IMX500, facilitando además que funcionen correctamente en la Raspberry Pi AI Camera.
¿Por qué deberías exportar a IMX500?#
El sensor de visión inteligente IMX500 de Sony es un componente de hardware revolucionario para el procesamiento de IA en el perímetro. 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 de la IA en el perímetro, como los cuellos de botella del 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 toda la historia. Procesa los datos directamente en el sensor, lo que permite a los dispositivos generar información útil en tiempo real.
Exportación de Sony IMX500 para modelos YOLO11#
El IMX500 está diseñado para transformar la forma en que los dispositivos gestionan los datos directamente en el sensor, sin necesidad de enviarlos a la nube para procesarlos.
El IMX500 funciona con modelos cuantizados. La cuantización hace que los modelos sean más pequeños y rápidos sin perder demasiada precisión. Es ideal para los recursos limitados de la computación en el perímetro, ya que permite a las aplicaciones responder rápidamente al reducir la latencia y procesar los datos de forma local, sin depender de la nube. El procesamiento local también mantiene los datos de los usuarios privados y seguros, ya que no se envían a un servidor remoto.
Características principales del IMX500:
- Salida de metadatos: En lugar de transmitir únicamente imágenes, el IMX500 puede generar tanto la imagen como los metadatos (resultado de la inferencia), o solo los metadatos para minimizar el tamaño de los datos, reducir el ancho de banda y disminuir los costes.
- Aborda los problemas de privacidad: Al procesar los datos en el dispositivo, el IMX500 aborda los problemas de privacidad, por lo que resulta ideal para aplicaciones centradas en las personas, como el recuento de personas y el seguimiento de la ocupación.
- Procesamiento en tiempo real: El procesamiento rápido en el sensor permite tomar decisiones en tiempo real, lo que resulta perfecto para aplicaciones de IA en el perímetro, como los 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 compatibles#
La exportación a IMX500 admite cuatro de las siete tareas de Ultralytics, y únicamente YOLOv8n y YOLO11n: no se admiten otras familias de modelos, escalas ni arquitecturas, y exportar un modelo de segmentación semántica, OBB o estimación de profundidad genera un error.
| Tarea | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Detección | ✅ | ✅ | ❌ |
| Segmentación | ✅ | ✅ | ❌ |
| Semántica | ❌ | ❌ | ❌ |
| Profundidad | ❌ | ❌ | ❌ |
| Clasificación | ✅ | ✅ | ❌ |
| Pose | ✅ | ✅ | ❌ |
| OBB | ❌ | ❌ | ❌ |
Ejemplos de uso#
Exporta un modelo de Ultralytics YOLO11 al formato IMX500 y ejecuta inferencias con el modelo exportado.
El formato IMX500 admite los modos Exportar, Predecir y Validar. La inferencia y la validación se ejecutan en la Raspberry Pi AI Camera (IMX500).
Aquí realizamos una inferencia únicamente para asegurarnos de que el modelo funciona como esperábamos. Sin embargo, para el despliegue y la inferencia en la Raspberry Pi AI Camera, ve directamente a la sección Uso de la exportación a IMX500 en el despliegue.
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")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")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)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")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")El paquete de Ultralytics instala dependencias adicionales de exportación durante la ejecución. La primera vez que ejecutes el comando de exportación, es posible que tengas que reiniciar la consola para asegurarte de que funciona correctamente.
Argumentos de exportación#
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
format | str | 'imx' | Formato de destino del modelo exportado, que define la compatibilidad con diversos entornos de despliegue. |
imgsz | int o tuple | 640 | Tamaño de imagen deseado para la entrada del modelo. Puede ser un entero para imágenes cuadradas o una tupla (height, width) para dimensiones específicas. |
quantize | int o str | 8/auto | Precisión de cuantización. 8 (INT8/PTQ) se activa automáticamente para IMX500; "w8a16" exporta pesos INT8 con activaciones FP16. No se admite la exportación FP32 ni la exportación únicamente FP16. Sustituye a las marcas obsoletas half/int8. |
data | str | None | Ruta al YAML del conjunto de datos, esencial para la cuantización; en clasificación, en su lugar, se acepta un directorio de conjunto 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. |
fraction | float, int o list | 1.0 | Subconjunto de calibración como proporción, número de imágenes o proporciones/números de [train, val, test]. Las listas de dos elementos dejan test completo, mientras que 0 lo omite. |
nms | bool, opcional | None | Selecciona la salida en bruto (None, predeterminada), NMS integrado (True) o la cabeza sin NMS (False). IMX requiere nms=True para detección, segmentación y pose, y lo selecciona automáticamente. |
device | str | None | Especifica el dispositivo para la exportación: GPU (device=0), CPU (device=cpu). |
Si exportas en una GPU con compatibilidad con CUDA, pasa el argumento device=0 para acelerar la exportación.
Para obtener más información sobre el proceso de exportación, visita la página de la documentación de Ultralytics sobre exportación.
El proceso de exportación creará un modelo ONNX para validar la cuantización, junto con un directorio llamado <model-name>_imx_model. Este directorio incluirá el archivo packerOut.zip, 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 al modelo.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtUso de la exportación a IMX500 en el despliegue#
Después de exportar el modelo Ultralytics YOLO11n al formato IMX500, puedes desplegarlo en una Raspberry Pi AI Camera para realizar inferencias.
Requisitos previos de hardware#
Asegúrate de disponer del siguiente hardware:
- Raspberry Pi 5 o Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
Conecta la cámara Raspberry Pi AI Camera al conector MIPI CSI de 15 pines de la Raspberry Pi y enciende la Raspberry Pi.
Requisitos previos de software#
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-upgradePaso 2: Instala el firmware del IMX500, necesario para utilizar el sensor IMX500.
sudo apt install imx500-allPaso 3: Reinicia la Raspberry Pi para que los cambios surtan efecto.
sudo rebootPaso 4: Instala la biblioteca del módulo de aplicación Aitrios para Raspberry Pi.
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitPaso 5: Ejecuta la detección de objetos, la estimación de poses, la clasificación y la segmentación con YOLO11 utilizando los siguientes scripts, disponibles en los ejemplos de la biblioteca del módulo de aplicación aitrios-rpi.
Asegúrate de sustituir los directorios model_file y labels.txt según tu entorno antes de ejecutar estos scripts.
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()Evaluaciones comparativas#
Las pruebas de referencia de YOLOv8n, YOLO11n, YOLOv8n-pose, YOLO11n-pose, YOLOv8n-cls y YOLO11n-cls que se muestran a continuación fueron ejecutadas por el equipo de Ultralytics en una Raspberry Pi AI Camera con el formato de modelo imx, midiendo la velocidad y la precisión.
| Modelo | Formato | Tamaño (píxeles) | Tamaño de packerOut.zip (MB) | mAP50-95(B) | Tiempo de inferencia (ms/im) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| Modelo | Formato | Tamaño (píxeles) | Tamaño de packerOut.zip (MB) | precisión (top1) | precisión (top5) | Tiempo de inferencia (ms/im) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
La validación de las pruebas de rendimiento anteriores se realizó utilizando el conjunto de datos COCO128 para los modelos de detección, el conjunto de datos COCO8-Pose para los modelos de estimación de posturas y el conjunto de datos ImageNet10 para los modelos de clasificación.
¿Qué ocurre internamente?#
Model Compression Toolkit (MCT) de Sony#
El Model Compression Toolkit (MCT) de Sony es una herramienta potente para optimizar modelos de deep learning mediante cuantización y poda. Admite diversos métodos de cuantización y proporciona algoritmos avanzados para reducir el tamaño y la complejidad computacional del modelo sin sacrificar significativamente la precisión. MCT resulta especialmente útil para desplegar modelos en dispositivos con recursos limitados, garantizando inferencias eficientes y una latencia reducida.
Características compatibles de MCT#
El MCT de Sony ofrece una serie de características diseñadas para optimizar modelos de redes neuronales:
- Optimizaciones del grafo: transforma los modelos en versiones más eficientes fusionando capas como la normalización por lotes con las capas anteriores.
- Búsqueda de parámetros de cuantización: minimiza el ruido de cuantización mediante métricas como el error cuadrático medio, la ausencia de clipping y el error medio absoluto.
- Algoritmos avanzados de cuantización:
- Corrección de desplazamiento negativo: aborda los problemas de rendimiento derivados de la cuantización simétrica de activaciones.
- Filtrado de valores atípicos: utiliza la puntuación z para detectar y eliminar valores atípicos.
- Clustering: utiliza rejillas de cuantización no uniformes para lograr una mejor correspondencia con la distribución.
- Búsqueda de precisión mixta: asigna distintos anchos de bits de cuantización a cada capa según su sensibilidad.
- Visualización: utiliza TensorBoard para observar información sobre el rendimiento del modelo, las fases de cuantización y las configuraciones del 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:
- Cuantización posterior al entrenamiento (PTQ):
- Disponible mediante las API de Keras y PyTorch.
- Complejidad: baja
- Coste computacional: bajo (minutos de CPU)
- Cuantización posterior al entrenamiento basada en gradientes (GPTQ):
- Disponible mediante las API de Keras y PyTorch.
- Complejidad: media
- Coste computacional: moderado (2-3 horas de GPU)
- Entrenamiento consciente de la cuantización (QAT):
- Complejidad: alta
- Coste computacional: alto (12-36 horas de GPU)
MCT también admite diversos esquemas de cuantización para pesos y activaciones:
- Potencia de dos (adaptado al hardware)
- Simétrica
- Uniforme
Poda estructurada#
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 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 al tiempo que optimiza la utilización de los canales, en consonancia con la arquitectura SIMD para utilizar de forma específica los recursos de la memoria ocupada por los pesos. Disponible mediante las API de Keras y PyTorch.
IMX500 Converter Tool (compilador)#
IMX500 Converter Tool es una parte integral del conjunto de herramientas IMX500 y permite compilar modelos para desplegarlos en el sensor IMX500 de Sony (por ejemplo, en cámaras Raspberry Pi AI Camera). Esta herramienta facilita la transición de los modelos Ultralytics YOLO11 procesados mediante el software de Ultralytics, garantizando su compatibilidad y un funcionamiento eficiente en el hardware especificado. El procedimiento de exportación posterior a la cuantización del modelo implica generar archivos binarios que encapsulan datos esenciales y configuraciones específicas del dispositivo, simplificando el proceso de despliegue en la Raspberry Pi AI Camera.
Casos de uso reales#
La exportación al formato IMX500 tiene una amplia aplicabilidad en distintos sectores. Estos son algunos ejemplos:
- IA en el perímetro e IoT: permite habilitar 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 ponibles: despliega modelos optimizados para el procesamiento de IA a pequeña escala en dispositivos ponibles de monitorización de la salud.
- Ciudades inteligentes: utiliza modelos YOLO11 exportados a IMX500 para la monitorización del tráfico y el análisis de la seguridad, con un procesamiento más rápido y una latencia mínima.
- Analítica minorista: mejora la monitorización en tiendas mediante el despliegue de 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 desplegarlos para realizar inferencias eficientes 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.
Preguntas frecuentes#
Para exportar un modelo YOLO11 al formato IMX500, utiliza la API de Python o el comando de CLI:
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="imx") # Exports with PTQ quantization by defaultEl proceso de exportación creará un directorio que contiene los archivos necesarios para el despliegue, incluido
packerOut.zip.El formato IMX500 ofrece varias ventajas importantes para el despliegue en el perímetro:
- El procesamiento de IA en el chip reduce la latencia y el consumo de energía
- Genera tanto la imagen como los metadatos (resultado de la inferencia), en lugar de únicamente 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 desplegar modelos de forma eficiente en dispositivos con recursos limitados
Para implementar modelos en 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)
Según las pruebas de rendimiento de Ultralytics en Raspberry Pi AI Camera:
- YOLO11n logra 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 después de 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.