Ir al contenido

Exportación de modelos con Ultralytics YOLO

Ecosistema e integraciones de Ultralytics YOLO

Introducción

El objetivo final de entrenar un modelo es implementarlo para aplicaciones del mundo real. El modo de exportación en Ultralytics YOLO11 ofrece una gama versátil de opciones para exportar tu modelo entrenado a diferentes formatos, haciéndolo implementable en varias plataformas y dispositivos. Esta guía completa tiene como objetivo guiarte a través de los matices de la exportación de modelos, mostrando cómo lograr la máxima compatibilidad y rendimiento.



Ver: Cómo exportar un modelo Ultralytics YOLO entrenado a medida y ejecutar la inferencia en vivo en la cámara web.

¿Por qué elegir el modo de exportación de YOLO11?

  • Versatilidad: Exportación a múltiples formatos, incluyendo ONNX, TensorRT, CoreML y más.
  • Rendimiento: Obtenga hasta 5 veces más velocidad en la GPU con TensorRT y 3 veces más velocidad en la CPU con ONNX u OpenVINO.
  • Compatibilidad: Haz que tu modelo sea universalmente desplegable en numerosos entornos de hardware y software.
  • Facilidad de uso: API simple de CLI y python para una exportación de modelos rápida y sencilla.

Características principales del modo de exportación

Estas son algunas de las funcionalidades más destacadas:

  • Exportación con un clic: Comandos sencillos para exportar a diferentes formatos.
  • Exportación por lotes: Exporta modelos con capacidad de inferencia por lotes.
  • Inferencia optimizada: Los modelos exportados están optimizados para tiempos de inferencia más rápidos.
  • Vídeos tutoriales: Guías detalladas y tutoriales para una experiencia de exportación fluida.

Consejo

  • Exporta a ONNX u OpenVINO para obtener hasta 3 veces más velocidad en la CPU.
  • Exporta a TensorRT para obtener hasta 5 veces más velocidad en la GPU.

Ejemplos de uso

Exporta un modelo YOLO11n a un formato diferente como ONNX o TensorRT. Consulta la sección de Argumentos a continuación para obtener una lista completa de los argumentos de exportación.

Ejemplo

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model

Argumentos

Esta tabla detalla las configuraciones y opciones disponibles para exportar modelos YOLO a diferentes formatos. Estos ajustes son fundamentales para optimizar el rendimiento, el tamaño y la compatibilidad del modelo exportado en diversas plataformas y entornos. Una configuración adecuada garantiza que el modelo esté listo para su implementación en la aplicación prevista con una eficiencia óptima.

Argumento Tipo Predeterminado Descripción
format str 'torchscript' Formato de destino para el modelo exportado, como 'onnx', 'torchscript', 'engine' (TensorRT) u otros. Cada formato permite la compatibilidad con diferentes 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 (p. ej., 640 para 640×640) o una tupla (height, width) para dimensiones específicas.
keras bool False Activa la exportación al formato Keras para TensorFlow SavedModel, proporcionando compatibilidad con el servicio y las API de TensorFlow.
optimize bool False Aplica la optimización para dispositivos móviles al exportar a TorchScript, lo que podría reducir el tamaño del modelo y mejorar el rendimiento de la inferencia. No es compatible con el formato NCNN ni con los dispositivos CUDA.
half bool False Habilita la cuantificación FP16 (media precisión), reduciendo el tamaño del modelo y potencialmente acelerando la inferencia en hardware compatible. No es compatible con la cuantificación INT8 o las exportaciones solo para CPU para ONNX.
int8 bool False Activa la cuantificació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. Cuando se utiliza con TensorRT, realiza la cuantificación posterior al entrenamiento (PTQ).
dynamic bool False Permite tamaños de entrada dinámicos para las exportaciones de ONNX, TensorRT y OpenVINO, lo que mejora la flexibilidad en el manejo de diferentes dimensiones de imagen. Se establece automáticamente en True al usar TensorRT con INT8.
simplify bool True Simplifica el gráfico del modelo para las exportaciones ONNX con onnxslim, mejorando potencialmente el rendimiento y la compatibilidad con los motores de inferencia.
opset int None Especifica la versión de ONNX opset para la compatibilidad con diferentes analizadores y tiempos de ejecución ONNX. Si no se establece, utiliza la última versión compatible.
workspace float o None None Establece el tamaño máximo del espacio de trabajo en GiB para TensorRT optimizaciones, equilibrando el uso de la memoria y el rendimiento. Utilice None para la asignación automática por TensorRT hasta el máximo del dispositivo.
nms bool False Añade la supresión no máxima (NMS) al modelo exportado cuando es compatible (ver Formatos de exportación), mejorando la eficiencia del post-procesamiento de la detección. No disponible para modelos end2end.
batch int 1 Especifica el tamaño del lote de inferencia del modelo de exportación o el número máximo de imágenes que el modelo exportado procesará simultáneamente en predict modo. Para las exportaciones de Edge TPU, esto se establece automáticamente en 1.
device str None Especifica el dispositivo para la exportación: GPU (device=0), CPU (device=cpu), MPS para Apple silicon (device=mps) o DLA para NVIDIA Jetson (device=dla:0 o device=dla:1). Las exportaciones de TensorRT utilizan automáticamente la GPU.
data str 'coco8.yaml' Ruta al conjunto de datos archivo de configuración (por defecto: coco8.yaml), esencial para la calibración de la cuantificación INT8. Si no se especifica con INT8 habilitado, se asignará un conjunto de datos predeterminado.
fraction float 1.0 Especifica la fracción del conjunto de datos que se utilizará para la calibración de la cuantificació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.

Ajustar estos parámetros permite personalizar el proceso de exportación para que se ajuste a requisitos específicos, como el entorno de implementación, las limitaciones de hardware y los objetivos de rendimiento. Seleccionar el formato y la configuración adecuados es esencial para lograr el mejor equilibrio entre el tamaño del modelo, la velocidad y la precisión.

Formatos de exportación

Los formatos de exportación YOLO11 disponibles se encuentran en la tabla a continuación. Puedes exportar a cualquier formato utilizando format argumento, por ejemplo: format='onnx' o format='engine'. Puedes predecir o validar directamente en modelos exportados, es decir, yolo predict model=yolo11n.onnxDespués de que finalice la exportación, se mostrarán ejemplos de uso para su modelo.

Formato format Argumento Modelo Metadatos Argumentos
PyTorch - yolo11n.pt -
TorchScript torchscript yolo11n.torchscript imgsz, half, dynamic, optimize, nms, batch, device
ONNX onnx yolo11n.onnx imgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINO openvino yolo11n_openvino_model/ imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRT engine yolo11n.engine imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreML coreml yolo11n.mlpackage imgsz, half, int8, nms, batch, device
TF SavedModel saved_model yolo11n_saved_model/ imgsz, keras, int8, nms, batch, device
TF GraphDef pb yolo11n.pb imgsz, batch, device
TF Lite tflite yolo11n.tflite imgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPU edgetpu yolo11n_edgetpu.tflite imgsz, device
TF.js tfjs yolo11n_web_model/ imgsz, half, int8, nms, batch, device
PaddlePaddle paddle yolo11n_paddle_model/ imgsz, batch, device
MNN mnn yolo11n.mnn imgsz, batch, int8, half, device
NCNN ncnn yolo11n_ncnn_model/ imgsz, half, batch, device
IMX500 imx yolo11n_imx_model/ imgsz, int8, data, fraction, device
RKNN rknn yolo11n_rknn_model/ imgsz, batch, name, device

Preguntas frecuentes

¿Cómo exporto un modelo YOLO11 a formato ONNX?

Exportar un modelo YOLO11 al formato ONNX es sencillo con Ultralytics. Proporciona métodos tanto en python como en la CLI para exportar modelos.

Ejemplo

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model

Para obtener más detalles sobre el proceso, incluidas las opciones avanzadas como el manejo de diferentes tamaños de entrada, consulte la guía de integración de ONNX.

¿Cuáles son los beneficios de usar TensorRT para la exportación de modelos?

Usar TensorRT para la exportación de modelos ofrece mejoras significativas en el rendimiento. Los modelos YOLO11 exportados a TensorRT pueden alcanzar una aceleración de la GPU de hasta 5 veces, lo que lo hace ideal para aplicaciones de inferencia en tiempo real.

  • Versatilidad: Optimiza los modelos para una configuración de hardware específica.
  • Velocidad: Logra una inferencia más rápida mediante optimizaciones avanzadas.
  • Compatibilidad: Intégrate sin problemas con el hardware de NVIDIA.

Para obtener más información sobre la integración de TensorRT, consulta la guía de integración de TensorRT.

¿Cómo habilito la cuantificación INT8 al exportar mi modelo YOLO11?

La cuantización INT8 es una forma excelente de comprimir el modelo y acelerar la inferencia, especialmente en dispositivos edge. Aquí te mostramos cómo puedes habilitar la cuantización INT8:

Ejemplo

from ultralytics import YOLO

model = YOLO("yolo11n.pt")  # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo11n.pt format=engine int8=True # export TensorRT model with INT8 quantization

La cuantización INT8 se puede aplicar a varios formatos, como TensorRT, OpenVINO, y CoreML. Para obtener resultados óptimos de cuantización, proporcione un conjunto de datos usando el data parámetro.

¿Por qué es importante el tamaño de entrada dinámico al exportar modelos?

El tamaño de entrada dinámico permite que el modelo exportado gestione dimensiones de imagen variables, proporcionando flexibilidad y optimizando la eficiencia del procesamiento para diferentes casos de uso. Al exportar a formatos como ONNX o TensorRT, habilitar el tamaño de entrada dinámico asegura que el modelo pueda adaptarse a diferentes formas de entrada sin problemas.

Para habilitar esta función, utiliza el flag dynamic=True durante la exportación:

Ejemplo

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo11n.pt format=onnx dynamic=True

El ajuste dinámico del tamaño de entrada es particularmente útil para aplicaciones donde las dimensiones de entrada pueden variar, como el procesamiento de video o al manejar imágenes de diferentes fuentes.

¿Cuáles son los argumentos clave de exportación a considerar para optimizar el rendimiento del modelo?

Comprender y configurar los argumentos de exportación es crucial para optimizar el rendimiento del modelo:

  • format: El formato de destino para el modelo exportado (p. ej., onnx, torchscript, tensorflow).
  • imgsz: Tamaño de imagen deseado para la entrada del modelo (p. ej., 640 o (height, width)).
  • half: Habilita la cuantización FP16, lo que reduce el tamaño del modelo y, potencialmente, acelera la inferencia.
  • optimize: Aplica optimizaciones específicas para entornos móviles o con restricciones.
  • int8: Habilita la cuantificación INT8, muy beneficiosa para IA en el borde implementaciones.

Para la implementación en plataformas de hardware específicas, considera la posibilidad de utilizar formatos de exportación especializados como TensorRT para las GPU de NVIDIA, CoreML para los dispositivos de Apple o Edge TPU para los dispositivos Google Coral.



📅 Creado hace 1 año ✏️ Actualizado hace 5 meses

Comentarios