Exportación ONNX para modelos YOLO11
A menudo, al implementar modelos de visión artificial, necesitará un formato de modelo que sea flexible y compatible con múltiples plataformas.
Exportar modelos Ultralytics YOLO11 al formato ONNX agiliza la implementación y garantiza un rendimiento óptimo en diversos entornos. Esta guía le mostrará cómo convertir fácilmente sus modelos YOLO11 a ONNX y mejorar su escalabilidad y eficacia en aplicaciones del mundo real.
ONNX y ONNX Runtime
ONNX, que significa Open Neural Network Exchange (Intercambio Abierto de Redes Neuronales), es un proyecto comunitario que Facebook y Microsoft desarrollaron inicialmente. El desarrollo continuo de ONNX es un esfuerzo colaborativo apoyado por varias organizaciones como IBM, Amazon (a través de AWS) y Google. El proyecto tiene como objetivo crear un formato de archivo abierto diseñado para representar modelos de aprendizaje automático de forma que puedan utilizarse en diferentes marcos de IA y hardware.
Los modelos ONNX se pueden utilizar para realizar transiciones entre diferentes marcos sin problemas. Por ejemplo, un modelo de aprendizaje profundo entrenado en PyTorch se puede exportar a formato ONNX y luego importarse fácilmente a TensorFlow.
Alternativamente, los modelos ONNX se pueden utilizar con ONNX Runtime. ONNX Runtime es un acelerador multiplataforma versátil para modelos de aprendizaje automático que es compatible con marcos como PyTorch, TensorFlow, TFLite, scikit-learn, etc.
ONNX Runtime optimiza la ejecución de modelos ONNX aprovechando las capacidades específicas del hardware. Esta optimización permite que los modelos se ejecuten de manera eficiente y con alto rendimiento en varias plataformas de hardware, incluyendo CPUs, GPUs y aceleradores especializados.
Ya sea que se utilice de forma independiente o en conjunto con ONNX Runtime, ONNX proporciona una solución flexible para la implementación de modelos de aprendizaje automático y la compatibilidad.
Características principales de los modelos ONNX
La capacidad de ONNX para manejar varios formatos se puede atribuir a las siguientes características clave:
-
Representación común del modelo: ONNX define un conjunto común de operadores (como convoluciones, capas, etc.) y un formato de datos estándar. Cuando un modelo se convierte al formato ONNX, su arquitectura y pesos se traducen a esta representación común. Esta uniformidad garantiza que el modelo pueda ser entendido por cualquier marco que soporte ONNX.
-
Control de versiones y compatibilidad con versiones anteriores: ONNX mantiene un sistema de control de versiones para sus operadores. Esto asegura que, incluso a medida que el estándar evoluciona, los modelos creados en versiones anteriores sigan siendo utilizables. La compatibilidad con versiones anteriores es una característica crucial que evita que los modelos queden obsoletos rápidamente.
-
Representación del modelo basada en grafos: ONNX representa los modelos como grafos computacionales. Esta estructura basada en grafos es una forma universal de representar modelos de aprendizaje automático, donde los nodos representan operaciones o cálculos, y los bordes representan los tensores que fluyen entre ellos. Este formato es fácilmente adaptable a varios marcos que también representan los modelos como grafos.
-
Herramientas y ecosistema: Existe un rico ecosistema de herramientas alrededor de ONNX que ayudan en la conversión, visualización y optimización de modelos. Estas herramientas facilitan a los desarrolladores el trabajo con modelos ONNX y la conversión de modelos entre diferentes marcos sin problemas.
Uso común de ONNX
Antes de entrar en cómo exportar modelos YOLO11 al formato ONNX, echemos un vistazo a dónde se utilizan normalmente los modelos ONNX.
Implementación en CPU
Los modelos ONNX a menudo se implementan en CPUs debido a su compatibilidad con ONNX Runtime. Este runtime está optimizado para la ejecución en CPU. Mejora significativamente la velocidad de inferencia y hace que las implementaciones en CPU en tiempo real sean factibles.
Opciones de implementación admitidas
Aunque los modelos ONNX se utilizan comúnmente en las CPU, también se pueden implementar en las siguientes plataformas:
-
Aceleración por GPU: ONNX es totalmente compatible con la aceleración por GPU, especialmente NVIDIA CUDA. Esto permite una ejecución eficiente en las GPU de NVIDIA para tareas que exigen una gran potencia computacional.
-
Dispositivos Edge y móviles: ONNX se extiende a dispositivos edge y móviles, perfecto para escenarios de inferencia en el dispositivo y en tiempo real. Es ligero y compatible con hardware edge.
-
Navegadores web: ONNX puede ejecutarse directamente en navegadores web, impulsando aplicaciones de IA interactivas y dinámicas basadas en la web.
Exportación de modelos YOLO11 a ONNX
Puede ampliar la compatibilidad del modelo y la flexibilidad de implementación convirtiendo los modelos YOLO11 al formato ONNX. Ultralytics YOLO11 proporciona un proceso de exportación sencillo que puede mejorar significativamente el rendimiento de su modelo en diferentes plataformas.
Instalación
Para instalar el paquete requerido, ejecute:
Instalación
# Install the required package for YOLO11
pip install ultralytics
Para obtener instrucciones detalladas y las mejores prácticas relacionadas con el proceso de instalación, consulte nuestra guía de instalación de YOLO11. Si tiene alguna dificultad al instalar los paquetes necesarios para YOLO11, consulte nuestra guía de problemas comunes para obtener soluciones y consejos.
Uso
Antes de sumergirse en las instrucciones de uso, asegúrese de consultar la gama de modelos YOLO11 ofrecidos por Ultralytics. Esto le ayudará a elegir el modelo más apropiado para los requisitos de su proyecto.
Uso
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to ONNX format
model.export(format="onnx") # creates 'yolo11n.onnx'
# Load the exported ONNX model
onnx_model = YOLO("yolo11n.onnx")
# Run inference
results = onnx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to ONNX format
yolo export model=yolo11n.pt format=onnx # creates 'yolo11n.onnx'
# Run inference with the exported model
yolo predict model=yolo11n.onnx source='https://ultralytics.com/images/bus.jpg'
Argumentos de exportación
Al exportar su modelo YOLO11 al formato ONNX, puede personalizar el proceso utilizando varios argumentos para optimizarlo para sus necesidades de implementación específicas:
Argumento | Tipo | Predeterminado | Descripción |
---|---|---|---|
format |
str |
'onnx' |
Formato de destino para el modelo exportado, que define la compatibilidad con varios entornos de implementación. |
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. |
half |
bool |
False |
Activa la cuantización FP16 (media precisión), reduciendo el tamaño del modelo y, potencialmente, acelerando la inferencia en hardware compatible. |
dynamic |
bool |
False |
Permite tamaños de entrada dinámicos, lo que mejora la flexibilidad en el manejo de diferentes dimensiones de imagen. |
simplify |
bool |
True |
Simplifica el grafo del modelo con onnxslim , lo que podría mejorar el rendimiento y la compatibilidad. |
opset |
int |
None |
Especifica la versión de ONNX opset para la compatibilidad con diferentes analizadores y tiempos de ejecución de ONNX. Si no se establece, utiliza la última versión compatible. |
nms |
bool |
False |
Añade la supresión no máxima (NMS), esencial para un post-procesamiento de detección preciso y eficiente. |
batch |
int |
1 |
Especifica el tamaño del lote de inferencia del modelo exportado o el número máximo de imágenes que el modelo exportado procesará simultáneamente en predict modo. |
device |
str |
None |
Especifica el dispositivo para la exportación: GPU (device=0 ), CPU (device=cpu ), MPS para Apple silicon (device=mps ). |
Para obtener más detalles sobre el proceso de exportación, visita la página de documentación de Ultralytics sobre la exportación.
Implementación de modelos ONNX YOLO11 exportados
Una vez que haya exportado correctamente sus modelos Ultralytics YOLO11 al formato ONNX, el siguiente paso es implementar estos modelos en varios entornos. Para obtener instrucciones detalladas sobre la implementación de sus modelos ONNX, consulte los siguientes recursos:
-
Documentación de la API de ONNX Runtime Python: Esta guía proporciona información esencial para cargar y ejecutar modelos ONNX utilizando ONNX Runtime.
-
Implementación en dispositivos Edge: Consulte esta página de documentación para ver diferentes ejemplos de implementación de modelos ONNX en el edge.
-
Tutoriales de ONNX en GitHub: Una colección de tutoriales completos que cubren varios aspectos del uso e implementación de modelos ONNX en diferentes escenarios.
-
Servidor de inferencia Triton: Aprende a implementar tus modelos ONNX con el servidor de inferencia Triton de NVIDIA para implementaciones escalables de alto rendimiento.
Resumen
En esta guía, ha aprendido a exportar modelos Ultralytics YOLO11 al formato ONNX para aumentar su interoperabilidad y rendimiento en varias plataformas. También se le presentaron ONNX Runtime y las opciones de implementación de ONNX.
La exportación ONNX es solo uno de los muchos formatos de exportación compatibles con Ultralytics YOLO11, lo que te permite implementar tus modelos en prácticamente cualquier entorno. Dependiendo de tus necesidades específicas, es posible que también desees explorar otras opciones de exportación como TensorRT para obtener el máximo rendimiento de la GPU o CoreML para dispositivos Apple.
Para obtener más detalles sobre el uso, visite la documentación oficial de ONNX.
Además, si deseas obtener más información sobre otras integraciones de Ultralytics YOLO11, visita nuestra página de la guía de integración. Allí encontrarás muchos recursos e información útiles.
Preguntas frecuentes
¿Cómo exporto modelos YOLO11 al formato ONNX usando Ultralytics?
Para exportar sus modelos YOLO11 al formato ONNX utilizando Ultralytics, siga estos pasos:
Uso
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to ONNX format
model.export(format="onnx") # creates 'yolo11n.onnx'
# Load the exported ONNX model
onnx_model = YOLO("yolo11n.onnx")
# Run inference
results = onnx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to ONNX format
yolo export model=yolo11n.pt format=onnx # creates 'yolo11n.onnx'
# Run inference with the exported model
yolo predict model=yolo11n.onnx source='https://ultralytics.com/images/bus.jpg'
Para obtener más detalles, visite la documentación de exportación.
¿Cuáles son las ventajas de usar ONNX Runtime para implementar modelos YOLO11?
El uso de ONNX Runtime para implementar modelos YOLO11 ofrece varias ventajas:
- Compatibilidad multiplataforma: ONNX Runtime es compatible con varias plataformas, como Windows, macOS y Linux, lo que garantiza que sus modelos se ejecuten sin problemas en diferentes entornos.
- Aceleración de hardware: ONNX Runtime puede aprovechar las optimizaciones específicas del hardware para CPU, GPU y aceleradores dedicados, lo que proporciona una inferencia de alto rendimiento.
- Interoperabilidad del framework: Los modelos entrenados en frameworks populares como PyTorch o TensorFlow se pueden convertir fácilmente al formato ONNX y ejecutarse utilizando ONNX Runtime.
- Optimización del rendimiento: ONNX Runtime puede proporcionar hasta 3 veces más velocidad en la CPU en comparación con los modelos nativos de PyTorch, lo que lo hace ideal para escenarios de implementación donde los recursos de la GPU son limitados.
Obtenga más información consultando la documentación de ONNX Runtime.
¿Qué opciones de implementación están disponibles para los modelos YOLO11 exportados a ONNX?
Los modelos YOLO11 exportados a ONNX se pueden implementar en varias plataformas, incluyendo:
- CPUs: Utilización de ONNX Runtime para la inferencia de CPU optimizada.
- GPUs: Aprovechamiento de NVIDIA CUDA para la aceleración de GPU de alto rendimiento.
- Dispositivos Edge: Ejecución de modelos ligeros en dispositivos edge y móviles para la inferencia en tiempo real y en el dispositivo.
- Navegadores web: Ejecución de modelos directamente dentro de los navegadores web para aplicaciones interactivas basadas en la web.
- Servicios en la nube: Implementación en plataformas en la nube que admiten el formato ONNX para la inferencia escalable.
Para obtener más información, explore nuestra guía sobre opciones de implementación de modelos.
¿Por qué debería usar el formato ONNX para los modelos YOLO11 de Ultralytics?
El uso del formato ONNX para los modelos Ultralytics YOLO11 ofrece numerosas ventajas:
- Interoperabilidad: ONNX permite que los modelos se transfieran entre diferentes frameworks de aprendizaje automático sin problemas.
- Optimización del rendimiento: ONNX Runtime puede mejorar el rendimiento del modelo utilizando optimizaciones específicas del hardware.
- Flexibilidad: ONNX admite varios entornos de implementación, lo que le permite utilizar el mismo modelo en diferentes plataformas sin modificaciones.
- Estandarización: ONNX proporciona un formato estandarizado que es ampliamente compatible en toda la industria, lo que garantiza la compatibilidad a largo plazo.
Consulte la guía completa sobre cómo exportar modelos YOLO11 a ONNX.
¿Cómo puedo solucionar problemas al exportar modelos YOLO11 a ONNX?
Al exportar modelos YOLO11 a ONNX, es posible que encuentre problemas comunes, como dependencias no coincidentes u operaciones no admitidas. Para solucionar estos problemas:
- Verifique que tenga instalada la versión correcta de las dependencias necesarias.
- Consulte la documentación oficial de ONNX para conocer los operadores y las características admitidas.
- Revise los mensajes de error para obtener pistas y consulte la guía de problemas comunes de Ultralytics.
- Pruebe a utilizar diferentes argumentos de exportación como
simplify=True
o ajustando elopset
versión. - Para problemas de tamaño de entrada dinámico, configure
dynamic=True
durante la exportación.
Si los problemas persisten, póngase en contacto con el soporte técnico de Ultralytics para obtener más ayuda.