Exportación de modelos con 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
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.onnx
Despué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.