Link to this sectionExportació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 funcionen bien en la Raspberry Pi AI Camera.
Link to this section¿Por qué deberías exportar a IMX500?#
El IMX500 Intelligent Vision Sensor 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 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 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.
Link to this sectionExportació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 perimetral (edge computing), permitiendo que las aplicaciones respondan rápidamente al reducir la latencia y permitiendo un procesamiento de datos rápido localmente, 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 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.
Link to this sectionTareas compatibles#
Actualmente, solo puedes exportar modelos que incluyan las siguientes tareas al formato IMX500.
La exportación IMX está diseñada y comparada para YOLOv8n y YOLO11n (nano). Otras arquitecturas y escalas de modelo no son compatibles.
Link to this sectionEjemplos de uso#
Exporta un modelo Ultralytics YOLO11 al formato IMX500 y ejecuta la inferencia 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 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.
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 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.
Link to this sectionArgumentos de exportación#
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
format | str | 'imx' | Formato de destino para el modelo exportado, definiendo 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 número entero para imágenes cuadradas o una tupla (height, width) para dimensiones específicas. |
int8 | bool | True | Activa la cuantización INT8, comprimiendo aún más el modelo y acelerando la inferencia con una mínima pérdida de precisión, principalmente para dispositivos de borde. |
data | str | 'coco8.yaml' | Ruta al archivo de configuración del dataset (predeterminado: coco8.yaml), esencial para la cuantización. |
fraction | float | 1.0 | Especifica 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. |
nms | bool | False | Añade la supresión de no máximos (NMS) al modelo exportado. Cuando es True, también se aceptan conf, iou y agnostic_nms. |
device | str | None | Especifica el dispositivo para la exportación: GPU (device=0), CPU (device=cpu). |
Si estás exportando en una GPU con soporte CUDA, por favor pasa el argumento device=0 para una exportación más rápida.
Para obtener más detalles sobre el proceso de exportación, visita la página de documentación de Ultralytics sobre la 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, el cual 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.
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxtLink to this sectionUsar 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.
Link to this sectionRequisitos previos de hardware#
Asegúrate de tener el hardware siguiente:
- Raspberry Pi 5 o Raspberry Pi 4 Model B
- 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.
Link to this sectionRequisitos previos de software#
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-upgradePaso 2: Instala el firmware IMX500 que es necesario para operar 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 pose, la clasificación y la segmentación de YOLO11 usando los siguientes scripts que están disponibles en los ejemplos de aitrios-rpi-application-module-library.
Asegúrate de reemplazar los directorios model_file y labels.txt de acuerdo con 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()Link to this sectionBenchmarks#
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.
| 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) | acc (top1) | acc (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 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.
Link to this section¿Qué hay debajo del capó?#
Link to this sectionKit de herramientas de compresión de modelos de Sony (MCT)#
El Kit de herramientas de compresión de modelos de Sony (MCT) 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. El MCT es particularmente útil para desplegar modelos en dispositivos con recursos limitados, asegurando una inferencia eficiente y una latencia reducida.
Link to this sectionCaracterísticas admitidas del MCT#
El MCT de Sony ofrece una gama de características diseñadas para optimizar los modelos de redes neuronales:
- 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.
- 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).
- 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.
- Visualización: Usa TensorBoard para observar información sobre el rendimiento del modelo, fases de cuantización y configuraciones de ancho de bits.
Link to this sectionCuantización#
El MCT admite varios métodos de cuantización para reducir el tamaño del modelo y mejorar la velocidad de inferencia:
- Cuantización post-entrenamiento (PTQ):
- Disponible a través de las API de Keras y PyTorch.
- Complejidad: Baja
- Coste computacional: Bajo (minutos de CPU)
- 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)
- 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:
- Potencia de dos (compatible con hardware)
- Simétrico
- Uniforme
Link to this sectionPoda 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.
Link to this sectionHerramienta 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.
Link to this sectionCasos 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.
Link to this sectionConclusió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 más información y directrices detalladas, consulta el sitio web de IMX500 de Sony.
Link to this sectionFAQ#
Link to this section¿Cómo exporto un modelo YOLO11 al formato IMX500 para Raspberry Pi AI Camera?#
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 defaultEl proceso de exportación creará un directorio que contiene los archivos necesarios para el despliegue, incluyendo packerOut.zip.
Link to this section¿Cuáles son los beneficios clave de usar el formato IMX500 para el despliegue de Edge AI?#
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
Link to this section¿Qué requisitos previos de hardware y software se necesitan para el despliegue en 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)
Link to this section¿Qué rendimiento puedo esperar de los modelos YOLO11 en el IMX500?#
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.