Exportación de modelos con Ultralytics YOLO

Ultralytics YOLO ecosystem and integrations

Introducción

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



Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀

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

  • Versatilidad: Exporta a múltiples formatos, incluidos ONNX, TensorRT, CoreML y más.
  • Rendimiento: Obtén una aceleración de hasta 5 veces en GPU con TensorRT y de 3 veces en CPU con ONNX o OpenVINO.
  • Compatibilidad: Haz que tu modelo sea universalmente desplegable en numerosos entornos de hardware y software.
  • Facilidad de uso: API de Python y CLI simples para una exportación de modelos rápida y directa.

Características clave del modo de exportación

Aquí tienes algunas de las funcionalidades destacadas:

  • Exportación con un clic: Comandos sencillos para exportar a diferentes formatos.
  • Exportación por lotes: Exporta modelos capaces de realizar inferencias por lotes.
  • Inferencia optimizada: Los modelos exportados están optimizados para tiempos de inferencia más rápidos.
  • Tutoriales en vídeo: Guías detalladas y tutoriales para una experiencia de exportación fluida.
Consejo
  • Exporta a ONNX o OpenVINO para obtener una aceleración de hasta 3 veces en CPU.
  • Exporta a TensorRT para obtener una aceleración de hasta 5 veces en GPU.

Ejemplos de uso

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

Ejemplo
from ultralytics import YOLO

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

# Export the model
model.export(format="onnx")

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 despliegue en la aplicación prevista con una eficiencia óptima.

ArgumentoTipoPredeterminadoDescripción
formatstr'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.
imgszint o tuple640Tamaño de imagen deseado para la entrada del modelo. Puede ser un número entero para imágenes cuadradas (por ejemplo, 640 para 640×640) o una tupla (height, width) para dimensiones específicas.
kerasboolFalseHabilita la exportación a formato Keras para TensorFlow SavedModel, proporcionando compatibilidad con el servicio de TensorFlow y sus APIs.
optimizeboolFalseAplica la optimización para dispositivos móviles al exportar a TorchScript, reduciendo potencialmente el tamaño del modelo y mejorando el rendimiento de la inferencia. No es compatible con el formato NCNN ni con dispositivos CUDA. Para DeepX, habilita una optimización del compilador superior que reduce la latencia de inferencia y aumenta el tiempo de compilación.
halfboolFalseHabilita la cuantización FP16 (precisión media), reduciendo el tamaño del modelo y acelerando potencialmente la inferencia en hardware compatible. No es compatible con la cuantización INT8 ni con exportaciones solo de CPU. Solo disponible para ciertos formatos, por ejemplo, ONNX (ver abajo).
int8boolFalseActiva la cuantización INT8, comprimiendo aún más el modelo y acelerando la inferencia con una pérdida mínima de precisión, principalmente para dispositivos de borde. Cuando se utiliza con TensorRT, realiza la cuantización post-entrenamiento (PTQ).
dynamicboolFalsePermite tamaños de entrada dinámicos para exportaciones de TorchScript, ONNX, OpenVINO, TensorRT y CoreML, mejorando la flexibilidad en el manejo de dimensiones de imagen variables. Se establece automáticamente en True cuando se utiliza TensorRT con INT8.
simplifyboolTrueSimplifica el grafo del modelo para exportaciones ONNX con onnxslim, mejorando potencialmente el rendimiento y la compatibilidad con motores de inferencia.
opsetintNoneEspecifica la versión opset de ONNX para la compatibilidad con diferentes analizadores y tiempos de ejecución de ONNX. Si no se establece, utiliza la última versión compatible.
workspacefloat o NoneNoneEstablece el tamaño máximo del espacio de trabajo en GiB para optimizaciones de TensorRT, equilibrando el uso de memoria y el rendimiento. Usa None para la asignación automática por parte de TensorRT hasta el máximo del dispositivo.
nmsboolFalseAñade la supresión de no máximos (NMS) al modelo exportado cuando es compatible (consulta Formatos de exportación), mejorando la eficiencia del procesamiento posterior a la detección. No está disponible para modelos end2end.
batchint1Especifica el tamaño de inferencia por lotes del modelo de exportación o el número máximo de imágenes que el modelo exportado procesará simultáneamente en el modo predict. Para exportaciones a Edge TPU, esto se establece automáticamente en 1.
devicestrNoneEspecifica el dispositivo para la exportación: GPU (device=0), CPU (device=cpu), MPS para Apple silicon (device=mps), Huawei Ascend NPU (device=npu o device=npu:0), o DLA para NVIDIA Jetson (device=dla:0 o device=dla:1). Las exportaciones de TensorRT usan GPU automáticamente.
datastr'coco8.yaml'Ruta al archivo de configuración del dataset, esencial para la calibración de cuantización INT8. Si no se especifica con INT8 activado, se utilizará coco8.yaml como alternativa para la calibración.
fractionfloat1.0Especifica la fracción del conjunto de datos a usar para la calibración de cuantización INT8. Permite calibrar sobre un subconjunto del conjunto de datos completo, útil para experimentos o cuando los recursos son limitados. Si no se especifica con INT8 activado, se usará el conjunto de datos completo.
end2endboolNoneSobrescribe el modo end-to-end en modelos YOLO que admiten inferencia sin NMS (YOLO26, YOLOv10). Configurarlo en False te permite exportar estos modelos para que sean compatibles con la canalización de posprocesamiento tradicional basada en NMS. Consulta la guía de detección End-to-End para más detalles.

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

Formatos de exportación

Los formatos de exportación de YOLO26 disponibles se encuentran en la tabla a continuación. Puedes exportar a cualquier formato usando el argumento format, por ejemplo: format='onnx' o format='engine'. Puedes realizar predicciones o validaciones directamente en los modelos exportados, por ejemplo: yolo predict model=yolo26n.onnx. Se muestran ejemplos de uso para tu modelo una vez finalizada la exportación. Los modelos también se pueden exportar directamente desde el navegador en Ultralytics Platform sin necesidad de configuración local.

FormatoArgumento formatModeloMetadatosArgumentos
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n_deepx_model/imgsz, int8, data, optimize, device

Preguntas frecuentes

¿Cómo exporto un modelo YOLO26 al formato ONNX?

Exportar un modelo YOLO26 al formato ONNX es sencillo con Ultralytics. Ofrece métodos tanto de Python como de CLI para exportar modelos.

Ejemplo
from ultralytics import YOLO

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

# Export the model
model.export(format="onnx")

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

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

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

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

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

¿Cómo habilito la cuantización INT8 al exportar mi modelo YOLO26?

La cuantización INT8 es una excelente forma de comprimir el modelo y acelerar la inferencia, especialmente en dispositivos de borde (edge devices). Así es como puedes habilitar la cuantización INT8:

Ejemplo
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="engine", int8=True)

La cuantización INT8 se puede aplicar a varios formatos, como TensorRT, OpenVINO y CoreML. Para obtener resultados de cuantización óptimos, proporciona un dataset representativo utilizando el parámetro data.

¿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 maneje 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 garantiza que el modelo pueda adaptarse a diferentes formas de entrada sin problemas.

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

Ejemplo
from ultralytics import YOLO

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

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

¿Cuáles son los argumentos de exportación clave 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 (ej., onnx, torchscript, tensorflow).
  • imgsz: Desired image size for the model input (e.g., 640 or (height, width)).
  • half: Habilita la cuantización FP16, reduciendo el tamaño del modelo y acelerando potencialmente la inferencia.
  • optimize: Aplica optimizaciones específicas para entornos móviles o restringidos.
  • int8: Habilita la cuantización INT8, muy beneficiosa para despliegues de Edge AI.

Para el despliegue en plataformas de hardware específicas, considera el uso de formatos de exportación especializados como TensorRT para GPUs de NVIDIA, CoreML para dispositivos Apple, o Edge TPU para dispositivos Google Coral.

¿Qué representan los tensores de salida en los modelos YOLO exportados?

Cuando exportas un modelo YOLO a formatos como ONNX o TensorRT, la estructura del tensor de salida depende de la tarea del modelo. Comprender estas salidas es importante para implementaciones de inferencia personalizadas.

Para modelos de detección (ej., yolo26n.pt), la salida suele ser un único tensor con forma (batch_size, 4 + num_classes, num_predictions) donde los canales representan las coordenadas de la caja (BBox) más las puntuaciones por clase, y num_predictions depende de la resolución de entrada de exportación (y puede ser dinámico).

Para modelos de segmentación (ej., yolo26n-seg.pt), normalmente obtendrás dos salidas: el primer tensor con forma (batch_size, 4 + num_classes + mask_dim, num_predictions) (cajas, puntuaciones de clase y coeficientes de máscara), y el segundo tensor con forma (batch_size, mask_dim, proto_h, proto_w) que contiene prototipos de máscara usados con los coeficientes para generar máscaras de instancia. Los tamaños dependen de la resolución de entrada de exportación (y pueden ser dinámicos).

Para modelos de pose (ej., yolo26n-pose.pt), el tensor de salida suele tener forma (batch_size, 4 + num_classes + keypoint_dims, num_predictions), donde keypoint_dims depende de la especificación de la pose (ej., número de puntos clave y si se incluye la confianza), y num_predictions depende de la resolución de entrada de exportación (y puede ser dinámico).

Los ejemplos en los ejemplos de inferencia de ONNX demuestran cómo procesar estas salidas para cada tipo de modelo.

¿Por qué output0 es FP32 cuando se exporta con half=True y end2end=True?

Al exportar con half=True (o int8=True), la mayoría de los tensores se convierten a una precisión menor para reducir el tamaño del modelo y mejorar el rendimiento. Sin embargo, cuando se habilita end2end=True, el post-procesamiento (incluidos los índices de clase) se integra directamente en el grafo exportado.

El tensor output0 contiene índices de clase, que se representan internamente como valores de punto flotante. FP16 no puede representar de manera fiable valores enteros superiores a 2048 debido a su limitada precisión de mantisa. Para evitar posibles pérdidas de precisión o IDs de clase incorrectos, output0 se mantiene intencionadamente en FP32.

Este comportamiento es esperado y también se aplica a exportaciones de menor precisión o cuantizadas donde se debe preservar la fidelidad de los índices de clase.

Si se requieren salidas completas en FP16, exporta con end2end=False y realiza el post-procesamiento externamente.

Comentarios