Ultralytics YOLO27:

Exportación de modelos con Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introducción#

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

Consulta la vista previa de YOLO27 no publicada para ver el soporte de exportación planeado.



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: Consigue hasta 5 veces más velocidad de GPU con TensorRT y 3 veces más velocidad de CPU con ONNX o OpenVINO.
  • Compatibilidad: Haz que tu modelo sea universalmente desplegable en numerosos entornos de hardware y software.
  • Facilidad de uso: CLI sencilla y API de Python para una exportación de modelos rápida y directa.

Características clave del modo de exportación#

Estas son algunas de las funcionalidades más destacadas:

  • Exportación con un solo 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.
  • Videos tutoriales: Guías y tutoriales detallados para una experiencia de exportación fluida.
Consejo
  • Exporta a ONNX u OpenVINO para conseguir hasta 3 veces más velocidad de CPU.
  • Exporta a TensorRT para conseguir hasta 5 veces más velocidad de 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 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")

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 varias 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 del modelo exportado, como 'onnx', 'torchscript', 'engine' (TensorRT) u otros. Cada formato permite la compatibilidad con distintos entornos de despliegue.
namestrNoneNombre del destino de hardware para los formatos que lo requieren: arquitectura Hailo ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; el valor predeterminado es 'hailo8l'), chip Rockchip RKNN (el valor predeterminado es 'rk3588'), SoC Huawei Ascend (un --soc_version de CANN; el valor predeterminado es 'Ascend310B4') o destino Qualcomm QNN HTP (el valor predeterminado es '73'). Es distinto del par project/name utilizado para nombrar ejecuciones en otros modos.
imgszint o tuple640Tamaño de imagen deseado para la entrada del modelo. Puede ser un entero para imágenes cuadradas (por ejemplo, 640 para 640×640) o una tupla (height, width) para dimensiones específicas. Si no se indica, la exportación reutiliza el tamaño de entrenamiento registrado en el checkpoint cargado: los checkpoints oficiales de YOLO26 registran 768 para profundidad, 224 para clasificación, 1024 para OBB y 640 para las demás tareas, mientras que un ajuste fino registra el imgsz con el que se entrenó. Un modelo creado a partir de un YAML no tiene un tamaño de entrenamiento registrado y usa 640.
kerasboolFalseActiva la exportación al formato Keras para TensorFlow SavedModel, proporcionando compatibilidad con TensorFlow Serving y sus API.
optimizeboolFalseActiva una optimización superior del compilador para DEEPX, reduciendo la latencia de inferencia y aumentando el tiempo de compilación.
quantizeint o strNonePrecisión de cuantización: 16 (FP16, reduce el tamaño del modelo y puede acelerar la inferencia en hardware compatible) o 8 (INT8/PTQ, comprime aún más el modelo con una pérdida mínima de accuracy, principalmente para edge devices; necesita calibración data/fraction); 32/sin configurar es FP32. Un punto de control entrenado con quantize=8 siempre exporta INT8: onnx y engine se exportan desde los rangos que transporta sin calibración, y se rechazan otros formatos o precisiones. Los formatos de exportación que admiten precisión mixta de pesos y activaciones también aceptan la notación 'w8a8'/'w16a16'/'w8a16'/'w8a32'. Sustituye las banderas obsoletas half/int8 (half=True16, int8=True8, que todavía se aceptan con una advertencia de obsolescencia). Solo se permiten las precisiones compatibles con el formato de destino (véase más abajo).
dynamicboolFalsePermite tamaños de entrada dinámicos en las exportaciones a TorchScript, ONNX, OpenVINO, TensorRT y CoreML, lo que mejora la flexibilidad para gestionar distintas dimensiones de imagen.
simplifyboolTrueSimplifica el grafo intermedio de ONNX con onnxslim para las exportaciones que generan uno (consulta Formatos de exportación), lo que puede mejorar el rendimiento y la compatibilidad con los motores de inferencia.
opsetintNoneEspecifica la versión del opset de ONNX para las exportaciones que generan un grafo ONNX (consulta Formatos de exportación), para garantizar la compatibilidad con distintos analizadores y runtimes de ONNX. Si no se establece, usa la última versión compatible.
workspacefloat o NoneNoneEstablece el tamaño máximo del espacio de trabajo en GiB para las optimizaciones de TensorRT, equilibrando el uso de memoria y el rendimiento. Usa None para que TensorRT asigne automáticamente hasta el máximo del dispositivo.
nmsbool, opcionalNoneNone exporta predicciones brutas de uno a muchos para NMS externo; True incrusta NMS donde sea compatible; False selecciona la cabeza sin NMS cuando está disponible. El NMS incrustado de CoreML es compatible con la detección, la segmentación y la estimación de poses con formas estáticas. Consulta la guía de detección de extremo a extremo.
conffloatNoneUmbral de confianza utilizado siempre que se genera NMS durante la exportación: exportaciones nms=True; exportaciones de detección de Hailo que no son de extremo a extremo; y exportaciones de detección, pose y segmentación de IMX, que fuerzan internamente nms=True. Si no se establece, el valor predeterminado es 0.25.
ioufloat0.7Umbral de IoU utilizado siempre que se genera NMS durante la exportación: exportaciones nms=True; exportaciones de detección de Hailo que no son de extremo a extremo; y exportaciones de detección, pose y segmentación de IMX, que fuerzan internamente nms=True.
max_detint300Número máximo de detecciones conservadas en la salida del modelo exportado. Se aplica a las exportaciones de nms=True en todos los formatos excepto a la detección de CoreML, cuya canalización NMS nativa no tiene límite de detecciones, además de las exportaciones de detección de extremo a extremo sin NMS (YOLO26, YOLOv10, limitadas al número de anclajes disponibles) y las exportaciones de detección, pose y segmentación de IMX.
agnostic_nmsboolFalseActiva la NMS independiente de la clase siempre que se genere NMS durante la exportación mediante el flujo estándar nms=True, incluida la propia fase de NMS de CoreML, suprimiendo las cajas superpuestas con menor puntuación entre clases diferentes, en lugar de hacerlo únicamente dentro de la misma clase. Hailo e IMX no respetan esta opción en sus propias configuraciones de NMS generadas, ya que no disponen de una opción independiente de la clase y siguen teniendo en cuenta la clase independientemente de esta marca. También se incorpora a las exportaciones de extremo a extremo sin NMS (YOLO26, YOLOv10), donde solo evita que la misma detección aparezca con varias etiquetas de clase (duplicados con IoU=1.0), pero no suprime cajas distintas según el umbral de IoU.
batchint1Especifica el tamaño del lote de inferencia del modelo exportado o el número máximo de imágenes que procesará simultáneamente el modelo exportado en el modo predict. En las exportaciones para Edge TPU, 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), NPU Huawei Ascend (device=npu o device=npu:0) o DLA para NVIDIA Jetson (device=dla:0 o device=dla:1). Las exportaciones a TensorRT usan automáticamente la GPU, pero TensorRT 11.0 no es compatible con DLA.
verboseboolFalseEleva el registro del compilador de TensorRT al nivel de gravedad VERBOSE durante la exportación format='engine'. Los demás formatos de exportación lo ignoran.
datastrNoneRuta al YAML del dataset, esencial para la calibración de cuantización INT8; la clasificación en su lugar toma un directorio de conjuntos de datos o el nombre de un conjunto de datos integrado. Si no se especifica con INT8 habilitado, Ultralytics selecciona un conjunto de datos de calibración específico para la tarea cuando es necesario, o recurre al conjunto de datos predeterminado para la tarea del modelo. Un punto de control entrenado con quantize=8 transporta sus propios rangos INT8 y no necesita datos de calibración.
splitstr'val'División del conjunto de datos ('train', 'val' o 'test') utilizada para crear el cargador de datos de calibración de cuantización INT8 a partir de data.
fractionfloat, int o list1.0Subconjunto del conjunto de datos utilizado para la calibración INT8: una proporción, un número de imágenes o valores [train, val, test]. 1 indica la división completa; los enteros superiores a 1 indican cantidades de imágenes; y solo la entrada de prueba opcional acepta 0/0.0 para indicar ninguno. Las listas de dos elementos dejan test completo.

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

Formatos de exportación#

Los formatos de exportación de YOLO26 disponibles se encuentran en la siguiente tabla. Puedes exportar a cualquier formato usando el argumento format, es decir, format='onnx' o format='engine'. Puedes predecir o validar directamente en modelos exportados, es decir, yolo predict model=yolo26n.onnx. Se muestran ejemplos de uso para tu modelo una vez que finalice la exportación. Los modelos también se pueden exportar directamente desde el navegador en Ultralytics Platform sin necesidad de ninguna configuración local.

FormatoArgumento formatModeloMetadatosArgumentos
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n.aimodelimgsz, batch, quantize

nms=None se establece por defecto en salidas sin procesar para la NMS externa. Configura nms=False para seleccionar una cabeza libre de NMS disponible; los formatos no compatibles recurren a su ruta de salida nativa. Las entradas nms anteriores identifican los formatos que pueden incrustar la NMS con nms=True.

Instalación automática de las dependencias de exportación

La mayoría de los formatos necesitan paquetes que no se instalan con ultralytics. Cuando falta uno, la exportación lo instala en tiempo de ejecución con uv o pip, y en Linux con apt para paquetes del sistema como el compilador de Edge TPU o Java para IMX. Para mantener el entorno fijo, por ejemplo en una imagen de contenedor, un trabajo de CI o un servicio de producción, configura YOLO_AUTOINSTALL=False. La exportación sigue comprobando entonces si faltan paquetes y los reporta, pero deja el entorno sin cambios y falla hasta que se instalan.

export YOLO_AUTOINSTALL=False

Opciones de cuantización#

Usa el argumento quantize para solicitar la precisión de exportación. Los valores de cadena no distinguen mayúsculas de minúsculas, y Ultralytics unifica los alias aceptados antes de la exportación:

Valores solicitadosValor canónicoSignificado
8, "8", "int8", "w8a8"8Pesos y activaciones INT8
16, "16", "fp16", "w16a16"16Pesos y activaciones FP16
32, "32", "fp32", "w32a32"32Exportación FP32; igual que si no se establece, excepto para los programas NMS ML de CoreML, que por defecto usan FP16
"w8a16""w8a16"Pesos INT8 con activaciones de 16 bits (FP16; INT16 en LiteRT)
"w8a32""w8a32"Pesos INT8 con activaciones FP32 (INT8 dinámico de LiteRT, no requiere calibración)

Los indicadores heredados half=True y int8=True todavía se aceptan con advertencias de desaprobación y se reenvían a quantize=16 y quantize=8.

No todos los formatos de exportación admiten todas las precisiones. Las solicitudes explícitas de quantize producen esa precisión o fallan antes de la exportación:

FormatoFP32 (32/sin definir)FP16 (16)INT8 (8)W8A16 ("w8a16")Notas
PyTorchN/AN/AN/AFormato nativo de entrenamiento y puntos de control.
TorchScript✅ Solo GPULa exportación FP16 de TorchScript requiere device=0; la exportación de CPU es FP32.
ONNXINT8 utiliza la cuantización estática y los datos de calibración de ONNX Runtime.
OpenVINOINT8 utiliza la cuantización posterior al entrenamiento de NNCF.
TensorRTINT8 necesita datos de calibración representativos.
CoreML✅¹CoreML INT8 es cuantización de pesos; W8A16 utiliza pesos INT8 con activaciones FP16. ¹Los programas NMS ML sin definir usan por defecto FP16.
TF SavedModelLa exportación INT8 utiliza la calibración de TensorFlow.
TF GraphDefSin conversión de precisión en el momento de la exportación.
Edge TPU✅ automáticoEdge TPU requiere INT8; se activa automáticamente cuando no se define.
PaddlePaddleSin conversión de precisión en el momento de la exportación.
MNNINT8 es cuantización de pesos mediante la conversión de MNN.
NCNNFormato de tiempo de ejecución para dispositivos móviles y empotrados.
IMX500✅ automáticoIMX500 requiere cuantización; INT8 se activa automáticamente cuando no se define.
RKNN✅ dependiente del chipRK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B admiten FP16 o INT8; las variantes RV1103/RV1106 son exclusivamente INT8.
ExecuTorchSin conversión de precisión en el momento de la exportación.
Axelera✅ automáticoLa exportación de Axelera requiere INT8; se activa automáticamente cuando no se define.
DEEPX✅ automáticoLa exportación de DEEPX requiere INT8; se activa automáticamente cuando no se define.
Qualcomm QNN✅ automáticoLa exportación QNN HTP se fija en pesos INT8 con activaciones de 16 bits.
LiteRTINT8 estático (8) y "w8a16" (pesos int8 + activaciones int16) utilizan datos de calibración; también admite INT8 dinámico "w8a32" (sin calibración). quantize=16 no es una exportación separada; un modelo FP32 se ejecuta en FP16 en tiempo de ejecución a través del delegado de GPU.
Hailo✅ automáticoLa exportación de Hailo requiere INT8; se activa automáticamente cuando no está configurado.
Huawei Ascend✅ automáticoLas convoluciones de Ascend AI Core solo aceptan entradas FP16/INT8, por lo que ATC compila FP16; se activa automáticamente cuando no se define.
Core AIFP32 de forma predeterminada o un recurso FP16 .aimodel con quantize=16; sin ruta INT8.

Para las exportaciones INT8 y W8A16, proporciona datos de calibración representativos con data, como data="coco8.yaml", a menos que la integración de destino documente un comportamiento predeterminado o activado automáticamente. El esquema "w8a32" (INT8 dinámico) de LiteRT no necesita datos de calibración.

Entrenamiento consciente de la cuantización#

Las exportaciones INT8 anteriores son de cuantización posterior al entrenamiento (PTQ): los rangos se observan en una sola pasada de calibración sobre data. La entrenamiento consciente de la cuantización (QAT) en su lugar aprende pesos que toleran INT8 mediante un ajuste fino con cuasicuantización en el bucle, lo que recupera la precisión que la calibración sola pierde. Pasa quantize=8 a train para afinar un punto de control preentrenado, y luego expórtalo como de costumbre:

Ejemplo
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco.yaml",
    quantize=8,
    epochs=5,
    batch=64,
    optimizer="AdamW",
    lr0=0.00001,
    lrf=0.1,
    warmup_epochs=0.5,
    cos_lr=True,
    mosaic=0.0,
)
model.export(format="engine", quantize=8)  # ranges travel with the checkpoint, no calibration data needed

Usa una tasa de aprendizaje pequeña al afinar un punto de control preentrenado. El entrenamiento consciente de la cuantización puede reducir inicialmente la precisión, y su beneficio frente a la cuantización posterior al entrenamiento depende del modelo, el conjunto de datos y el presupuesto de entrenamiento. Valida el modelo exportado tanto con el punto de control original como con una exportación cuantizada posterior al entrenamiento; las puntuaciones de cuantización simulada durante el entrenamiento no establecen la precisión de implementación.

Cuánto vale la pena QAT depende de qué tan bien maneje el modelo la propia calibración del motor de exportación. Los valores a continuación son mAP50-95 en COCO val2017, medidos con motores TensorRT 10.16 en imgsz=640 y lote 1, donde cada punto de control QAT se entrenó con epochs=20 patience=3:

ModeloMotor FP32Motor INT8 PTQMotor INT8 QAT
yolo26n0.40320.39340.3935
yolo26s0.47940.44120.4711
yolo26m0.52690.46960.5137
yolo26l0.54400.48890.5307
yolo26x0.57010.51380.5527

QAT cuesta de 0,008 a 0,017 mAP50-95 frente a FP32 en todo el rango, mientras que la cuantización posterior al entrenamiento cuesta 0,010 en yolo26n y de 0,038 a 0,057 en los modelos más grandes. Por lo tanto, QAT aporta casi nada en el modelo más pequeño, donde la calibración ya funciona bien, y de 0,030 a 0,044 en el resto. Espera cifras diferentes en otro conjunto de datos, formato de exportación o versión de TensorRT, y mide las tuyas propias.

Los modelos de entrenamiento consciente de la cuantización requieren compile=False; los módulos cuantizados de ModelOpt no admiten torch.compile.

Las convoluciones de salida final de la cabeza se dejan deliberadamente en punto flotante para limitar la pérdida de precisión en INT8; TensorRT habilita la precisión mixta en FP16 para sus capas no cuantizadas. QAT se ejecuta a través de NVIDIA TensorRT Model Optimizer, instalado automáticamente en el primer uso, y el punto de control resultante requiere que esté instalado para cargarse. Esos rangos viajan con el punto de control y las exportaciones de onnx y engine los emiten como nodos Q/DQ; otros formatos leen la calibración en su lugar y rechazan un punto de control de QAT.

¿Y ahora qué?#

Encuentra la guía de integración de tu destino de despliegue — ONNX, TensorRT, CoreML y más están en la lista completa de integraciones — para saber cómo ejecutar el modelo exportado.

Preguntas frecuentes#

  • Exportar un modelo YOLO26 al formato ONNX es muy sencillo con Ultralytics. Proporciona métodos tanto en 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.

  • Usar TensorRT para la exportación de modelos ofrece mejoras de rendimiento significativas. Los modelos YOLO26 exportados a TensorRT pueden lograr hasta 5 veces más velocidad de GPU, 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: Consigue 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 cómo integrar TensorRT, consulta la guía de integración de TensorRT.

  • La cuantización INT8 es una excelente manera de comprimir el modelo y acelerar la inferencia, especialmente en dispositivos perimetrales. Así es como puedes habilitar la cuantización INT8:

    Ejemplo
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Load a model
    model.export(format="onnx", quantize=8, data="coco8.yaml")

    La cuantización INT8 se puede aplicar a formatos como ONNX, TensorRT, OpenVINO, CoreML y Rockchip RKNN. Para obtener resultados óptimos de cuantización, proporciona un conjunto de datos representativo utilizando el parámetro data. Consulta las opciones de cuantización para ver los valores de quantize aceptados y los formatos compatibles.

  • El tamaño de entrada dinámico permite que el modelo exportado maneje dimensiones de imagen variables, proporcionando flexibilidad y optimizando la eficiencia de 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 característica, usa el indicador dynamic=True durante la exportación:

    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 el procesamiento de video o al manejar imágenes de diferentes fuentes.

  • 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 (por ejemplo, onnx, torchscript, saved_model).
    • imgsz: Tamaño de imagen deseado para la entrada del modelo (por ejemplo, 640 o (height, width)).
    • quantize: Precisión de cuantización, como 8/"int8", 16/"fp16", 32/"fp32", o los esquemas mixtos de pesos y activaciones "w8a16" y "w8a32" (INT8 dinámico de LiteRT) en formatos compatibles. Consulta las opciones de cuantización.
    • optimize: Habilita una mayor optimización del compilador para exportaciones de DEEPX.

    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.

  • 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 los modelos de detección YOLO26 (por ejemplo, yolo26n.pt) exportados con nms=False, los formatos compatibles producen una salida sin NMS con la forma (batch_size, max_detections, 6) con valores de [x1, y1, x2, y2, confidence, class_id]. Con el valor predeterminado max_det=300, esto suele ser (batch_size, 300, 6). Algunos formatos con restricciones vuelven automáticamente al diseño de salida tradicional cuando los operadores de extremo a extremo no son compatibles.

    De forma predeterminada (nms=None), los modelos de detección, incluido YOLO26, exportan predicciones brutas de uno a muchos: la salida suele ser un único tensor con la forma (batch_size, 4 + num_classes, num_predictions) donde los canales representan las coordenadas de las cajas más las puntuaciones por clase, y num_predictions depende de la resolución de entrada de exportación (y puede ser dinámica). La Guía de Detección de Extremo a Extremo abarca qué formatos conservan la salida de extremo a extremo.

    Para los modelos de segmentación (por ejemplo, yolo26n-seg.pt), normalmente obtendrás dos salidas: el primer tensor con una forma similar a (batch_size, 4 + num_classes + mask_dim, num_predictions) (cajas, puntuaciones de clase y coeficientes de máscara) y el segundo tensor con una forma similar a (batch_size, mask_dim, proto_h, proto_w) que contiene prototipos de máscara utilizados 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 los modelos de pose (por ejemplo, yolo26n-pose.pt), el tensor de salida suele tener una forma similar a (batch_size, 4 + num_classes + keypoint_dims, num_predictions), donde keypoint_dims depende de la especificación de la pose (por ejemplo, el 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ámica).

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

  • Ultralytics no proporciona actualmente una API de inferencia de C++ dedicada para modelos YOLO. Para despliegues en C++, exporta el modelo a un formato de tiempo de ejecución como ONNX, TensorRT, TorchScript o MNN, y luego carga el artefacto exportado con la API de C++ nativa de ese tiempo de ejecución.

    Por ejemplo, exporta un modelo de detección con yolo export model=yolo26n.pt format=onnx y ejecuta el archivo .onnx con ONNX Runtime C++, o exporta con format=engine y ejecuta el motor de TensorRT desde una aplicación de TensorRT en C++. Cuando utilices un postprocesamiento personalizado en C++, haz coincidir el diseño del tensor de salida para tu tarea y los ajustes de exportación; las exportaciones de detección YOLO26 predeterminadas devuelven tensores de predicción en bruto que requieren NMS externo. Exporta con nms=False para detecciones sin NMS con la forma (batch, max_det, 6), o nms=True para integrar NMS en los formatos compatibles.

  • Al exportar con quantize=16 (FP16) o quantize=8 (INT8), 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 nms=False está habilitado, el posprocesamiento (incluidos los índices de clase) se incrusta directamente en el gráfico 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 una posible pérdida de precisión o ID de clase incorrectos, output0 se mantiene intencionalmente en FP32.

    Este comportamiento es el 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 necesitas salidas FP16 completas, exporta con nms=None y realiza el postprocesamiento externamente.

Comentarios