Meet YOLO26: next-gen vision AI.

Link to this sectionExportación de modelos con Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Link to this sectionIntroducció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, haciéndolo desplegable a través de varias plataformas y dispositivos. Esta guía completa tiene como objetivo explicarte 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 🚀

Link to this section¿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 hasta 5 veces más velocidad en GPU con TensorRT y 3 veces más velocidad en CPU con ONNX o OpenVINO.
  • Compatibilidad: Haz que tu modelo sea desplegable universalmente a través de 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.

Link to this sectionCaracterísticas clave del modo de exportación#

Aquí tienes algunas de las funcionalidades destacadas:

  • Exportación con un clic: Comandos simples 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.
  • Vídeos tutoriales: Guías detalladas y tutoriales para una experiencia de exportación fluida.
Consejo
  • Exporta a ONNX o OpenVINO para obtener hasta 3 veces más velocidad en CPU.
  • Exporta a TensorRT para obtener hasta 5 veces más velocidad en GPU.

Link to this sectionEjemplos de uso#

Exporta un modelo YOLO26n 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("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

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

Link to this sectionArgumentos#

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

ArgumentoTipoPredeterminadoDescripción
formatstr'torchscript'Target format for the exported model, such as 'onnx', 'torchscript', 'engine' (TensorRT), or others. Each format enables compatibility with different deployment environments.
imgszint o tuple640Desired image size for the model input. Can be an integer for square images (e.g., 640 for 640×640) or a tuple (height, width) for specific dimensions.
kerasboolFalseHabilita la exportación a formato Keras para SavedModel de TensorFlow, proporcionando compatibilidad con las API y el servicio de TensorFlow.
optimizeboolFalseAplica optimización para dispositivos móviles al exportar a TorchScript, lo que potencialmente reduce el tamaño del modelo y mejora el rendimiento de la inferencia. No es compatible con el formato NCNN ni con dispositivos CUDA. Para DEEPX, habilita una mayor optimización del compilador 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 potencialmente acelerando la inferencia en hardware compatible. No es compatible con la cuantización INT8 ni con exportaciones solo para CPU. Solo disponible para ciertos formatos, p. ej., ONNX (ver más 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 usa con TensorRT, realiza cuantización post-entrenamiento (PTQ).
dynamicboolFalsePermite tamaños de entrada dinámicos para exportaciones de TorchScript, ONNX, OpenVINO, TensorRT y CoreML, mejorando la flexibilidad al manejar dimensiones de imagen variables.
simplifyboolTrueSimplifies the model graph for ONNX exports with onnxslim, potentially improving performance and compatibility with inference engines.
opsetintNoneEspecifica la versión del opset de ONNX para compatibilidad con diferentes analizadores y motores de ejecución de ONNX. Si no se establece, utiliza la última versión admitida.
workspacefloat or NoneNoneSets the maximum workspace size in GiB for TensorRT optimizations, balancing memory usage and performance. Use None for auto-allocation by TensorRT up to device maximum.
nmsboolFalseAñade supresión de no máximos (NMS) al modelo exportado cuando es compatible (consulta Formatos de exportación), mejorando la eficiencia del post-procesamiento de detección. No está disponible para modelos de extremo a extremo.
batchint1Specifies export model batch inference size or the maximum number of images the exported model will process concurrently in predict mode. For Edge TPU exports, this is automatically set to 1.
devicestrNoneSpecifies the device for exporting: GPU (device=0), CPU (device=cpu), MPS for Apple silicon (device=mps), Huawei Ascend NPU (device=npu or device=npu:0), or DLA for NVIDIA Jetson (device=dla:0 or device=dla:1). TensorRT exports automatically use GPU.
datastr'coco8.yaml'Path to the dataset configuration file, essential for INT8 quantization calibration. If not specified with INT8 enabled, coco8.yaml will be used as a fallback for calibration.
fractionfloat1.0Especifica la fracción del dataset a utilizar para la calibración de cuantización INT8. Permite calibrar sobre un subconjunto del dataset completo, útil para experimentos o cuando los recursos son limitados. Si no se especifica con INT8 habilitado, se utilizará el dataset completo.
end2endboolNoneOverrides the end-to-end mode in YOLO models that support NMS-free inference (YOLO26, YOLOv10). Setting it to False lets you export these models to be compatible with the traditional NMS-based postprocessing pipeline. See the End-to-End Detection guide for details.

Adjusting these parameters allows for customization of the export process to fit specific requirements, such as deployment environment, hardware constraints, and performance targets. Selecting the appropriate format and settings is essential for achieving the best balance between model size, speed, and accuracy.

Link to this sectionFormatos de exportación#

Available YOLO26 export formats are in the table below. You can export to any format using the format argument, i.e., format='onnx' or format='engine'. You can predict or validate directly on exported models, i.e., yolo predict model=yolo26n.onnx. Usage examples are shown for your model after export completes. Models can also be exported directly from the browser on Ultralytics Platform without any local setup.

FormatoArgumento formatModeloMetadatosArgumentos
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, int8, dynamic, simplify, opset, nms, batch, data, fraction, 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, int8, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, int8, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, int8, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn_model/imgsz, batch, name, int8, data, fraction, device

Link to this sectionFAQ#

Link to this section¿Cómo exporto un modelo YOLO26 a formato ONNX?#

Exportar un modelo YOLO26 a formato ONNX es directo con Ultralytics. Proporciona 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 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.

Link to this section¿Cuáles son los beneficios de usar TensorRT para la exportación de modelos?#

Usar TensorRT para la exportación de modelos ofrece mejoras de rendimiento significativas. Los modelos YOLO26 exportados a TensorRT pueden lograr hasta una aceleración de 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 a través de optimizaciones avanzadas.
  • Compatibilidad: Integra sin problemas con hardware NVIDIA.

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

Link to this section¿Cómo habilito la cuantización INT8 al exportar mi modelo YOLO26?#

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

Ejemplo
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="onnx", int8=True, data="coco8.yaml")

INT8 quantization can be applied to various formats, such as ONNX, TensorRT, OpenVINO, CoreML, and Rockchip RKNN. For optimal quantization results, provide a representative dataset using the data parameter.

Link to this section¿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 asegura que el modelo pueda adaptarse a diferentes formas de entrada sin problemas.

To enable this feature, use the dynamic=True flag during export:

Ejemplo
from ultralytics import YOLO

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

El dimensionamiento de entrada dinámico es particularmente útil para aplicaciones donde las dimensiones de entrada pueden variar, como en el procesamiento de vídeo o cuando se manejan imágenes de diferentes fuentes.

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

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

  • format: The target format for the exported model (e.g., onnx, torchscript, tensorflow).
  • imgsz: Desired image size for the model input (e.g., 640 or (height, width)).
  • half: Enables FP16 quantization, reducing model size and potentially speeding up inference.
  • optimize: Applies specific optimizations for mobile or constrained environments.
  • int8: Enables INT8 quantization, highly beneficial for edge AI deployments.

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

Link to this section¿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. Entender estas salidas es importante para implementaciones de inferencia personalizadas.

For detection models (e.g., yolo26n.pt), the output is typically a single tensor shaped like (batch_size, 4 + num_classes, num_predictions) where the channels represent box coordinates plus per-class scores, and num_predictions depends on the export input resolution (and can be dynamic).

For segmentation models (e.g., yolo26n-seg.pt), you'll typically get two outputs: the first tensor shaped like (batch_size, 4 + num_classes + mask_dim, num_predictions) (boxes, class scores, and mask coefficients), and the second tensor shaped like (batch_size, mask_dim, proto_h, proto_w) containing mask prototypes used with the coefficients to generate instance masks. Sizes depend on the export input resolution (and can be dynamic).

For pose models (e.g., yolo26n-pose.pt), the output tensor is typically shaped like (batch_size, 4 + num_classes + keypoint_dims, num_predictions), where keypoint_dims depends on the pose specification (e.g., number of keypoints and whether confidence is included), and num_predictions depends on the export input resolution (and can be dynamic).

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

Link to this sectionWhy is output0 FP32 when exporting with half=True and end2end=True?#

When exporting with half=True (or int8=True), most tensors are converted to lower precision to reduce model size and improve performance. However, when end2end=True is enabled, post-processing (including class indices) is embedded directly in the exported graph.

The output0 tensor contains class indices, which are internally represented as floating-point values. FP16 cannot reliably represent integer values above 2048 due to its limited mantissa precision. To avoid potential precision loss or incorrect class IDs, output0 is intentionally kept in FP32.

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

If full FP16 outputs are required, export with end2end=False and perform post-processing externally.

Comentarios