Ir al contenido

Exportación a TensorRT para modelos YOLO11

Implementar modelos de visión artificial en entornos de alto rendimiento puede requerir un formato que maximice la velocidad y la eficiencia. Esto es especialmente cierto cuando se implementa el modelo en GPU NVIDIA.

Al utilizar el formato de exportación TensorRT, puedes mejorar tus modelos Ultralytics YOLO11 para una inferencia rápida y eficiente en hardware NVIDIA. Esta guía te proporcionará pasos fáciles de seguir para el proceso de conversión y te ayudará a aprovechar al máximo la tecnología avanzada de NVIDIA en tus proyectos de aprendizaje profundo.

TensorRT

Descripción general de TensorRT

TensorRT, desarrollado por NVIDIA, es un kit de desarrollo de software (SDK) avanzado diseñado para la inferencia de aprendizaje profundo de alta velocidad. Es muy adecuado para aplicaciones en tiempo real como la detección de objetos.

Este conjunto de herramientas optimiza los modelos de aprendizaje profundo para las GPU NVIDIA y da como resultado operaciones más rápidas y eficientes. Los modelos TensorRT se someten a una optimización de TensorRT, que incluye técnicas como la fusión de capas, la calibración de precisión (INT8 y FP16), la gestión dinámica de la memoria de los tensores y el ajuste automático del kernel. La conversión de modelos de aprendizaje profundo al formato TensorRT permite a los desarrolladores aprovechar todo el potencial de las GPU NVIDIA.

TensorRT es conocido por su compatibilidad con varios formatos de modelos, incluidos TensorFlow, PyTorch y ONNX, lo que proporciona a los desarrolladores una solución flexible para integrar y optimizar modelos de diferentes marcos. Esta versatilidad permite una implementación de modelos eficiente en diversos entornos de hardware y software.

Características principales de los modelos TensorRT

Los modelos TensorRT ofrecen una gama de características clave que contribuyen a su eficiencia y eficacia en la inferencia de aprendizaje profundo de alta velocidad:

  • Calibración de Precisión: TensorRT admite la calibración de precisión, lo que permite ajustar los modelos para requisitos de exactitud específicos. Esto incluye la compatibilidad con formatos de precisión reducida como INT8 y FP16, que pueden aumentar aún más la velocidad de inferencia manteniendo niveles de exactitud aceptables.

  • Fusión de Capas: El proceso de optimización de TensorRT incluye la fusión de capas, donde varias capas de una red neuronal se combinan en una sola operación. Esto reduce la sobrecarga computacional y mejora la velocidad de inferencia al minimizar el acceso a la memoria y el cálculo.

Fusión de capas en TensorRT

  • Gestión Dinámica de la Memoria de Tensores: TensorRT gestiona eficientemente el uso de la memoria de los tensores durante la inferencia, reduciendo la sobrecarga de memoria y optimizando la asignación de memoria. Esto resulta en una utilización más eficiente de la memoria de la GPU.

  • Ajuste Automático del Kernel: TensorRT aplica el ajuste automático del kernel para seleccionar el kernel de la GPU más optimizado para cada capa del modelo. Este enfoque adaptativo asegura que el modelo aproveche al máximo la potencia computacional de las GPUs.

Opciones de implementación en TensorRT

Antes de examinar el código para exportar modelos YOLO11 al formato TensorRT, comprendamos dónde se utilizan normalmente los modelos TensorRT.

TensorRT ofrece varias opciones de implementación, y cada opción equilibra la facilidad de integración, la optimización del rendimiento y la flexibilidad de manera diferente:

  • Implementación dentro de TensorFlow: Este método integra TensorRT en TensorFlow, permitiendo que los modelos optimizados se ejecuten en un entorno TensorFlow familiar. Es útil para modelos con una mezcla de capas compatibles e incompatibles, ya que TF-TRT puede manejarlos de manera eficiente.

Descripción general de TensorRT

  • API de Runtime de TensorRT Independiente: Ofrece un control granular, ideal para aplicaciones de rendimiento crítico. Es más complejo, pero permite la implementación personalizada de operadores no compatibles.

  • Servidor de Inferencia NVIDIA Triton: Una opción que admite modelos de varios frameworks. Particularmente adecuado para la inferencia en la nube o en el borde, proporciona características como la ejecución concurrente de modelos y el análisis de modelos.

Exportando modelos YOLO11 a TensorRT

Puede mejorar la eficiencia de la ejecución y optimizar el rendimiento convirtiendo los modelos YOLO11 a formato TensorRT.

Instalación

Para instalar el paquete requerido, ejecute:

Instalación

# Install the required package for YOLO11
pip install ultralytics

Para obtener instrucciones detalladas y las mejores prácticas relacionadas con el proceso de instalación, consulte nuestra guía de instalación de YOLO11. Si tiene alguna dificultad al instalar los paquetes necesarios para YOLO11, consulte nuestra guía de problemas comunes para obtener soluciones y consejos.

Uso

Antes de sumergirse en las instrucciones de uso, asegúrese de consultar la gama de modelos YOLO11 ofrecidos por Ultralytics. Esto le ayudará a elegir el modelo más apropiado para los requisitos de su proyecto.

Uso

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolo11n.engine'

# Load the exported TensorRT model
tensorrt_model = YOLO("yolo11n.engine")

# Run inference
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to TensorRT format
yolo export model=yolo11n.pt format=engine # creates 'yolo11n.engine''

# Run inference with the exported model
yolo predict model=yolo11n.engine source='https://ultralytics.com/images/bus.jpg'

Argumentos de exportación

Argumento Tipo Predeterminado Descripción
format str 'engine' Formato de destino para el modelo exportado, que define la compatibilidad con varios 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 o una tupla (height, width) para dimensiones específicas.
half bool False Activa la cuantización FP16 (media precisión), reduciendo el tamaño del modelo y, potencialmente, acelerando la inferencia en hardware compatible.
int8 bool False Activa 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.
dynamic bool False Permite tamaños de entrada dinámicos, lo que mejora la flexibilidad en el manejo de diferentes dimensiones de imagen.
simplify bool True Simplifica el grafo del modelo con onnxslim, lo que podría mejorar el rendimiento y la compatibilidad.
workspace float o None None Establece el tamaño máximo del espacio de trabajo en GiB para las optimizaciones de TensorRT, equilibrando el uso de la memoria y el rendimiento; use 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), esencial para un post-procesamiento de detección preciso y eficiente.
batch int 1 Especifica el tamaño del lote de inferencia del modelo exportado o el número máximo de imágenes que el modelo exportado procesará simultáneamente en predict modo.
data str 'coco8.yaml' Ruta al conjunto de datos archivo de configuración (por defecto: coco8.yaml), esencial para la cuantificación.
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.
device str None Especifica el dispositivo para la exportación: GPU (device=0), DLA para NVIDIA Jetson (device=dla:0 o device=dla:1).

Consejo

Asegúrese de utilizar una GPU compatible con CUDA al exportar a TensorRT.

Para obtener más detalles sobre el proceso de exportación, visita la página de documentación de Ultralytics sobre la exportación.

Exportación de TensorRT con cuantificación INT8

La exportación de modelos Ultralytics YOLO usando TensorRT con precisión INT8 ejecuta la cuantización post-entrenamiento (PTQ). TensorRT utiliza la calibración para PTQ, que mide la distribución de activaciones dentro de cada tensor de activación a medida que el modelo YOLO procesa la inferencia en datos de entrada representativos, y luego utiliza esa distribución para estimar los valores de escala para cada tensor. Cada tensor de activación que es candidato para la cuantización tiene una escala asociada que se deduce mediante un proceso de calibración.

Cuando se procesan redes cuantificadas implícitamente, TensorRT utiliza INT8 oportunistamente para optimizar el tiempo de ejecución de la capa. Si una capa se ejecuta más rápido en INT8 y tiene escalas de cuantificación asignadas en sus entradas y salidas de datos, entonces se asigna un kernel con precisión INT8 a esa capa; de lo contrario, TensorRT selecciona una precisión de FP32 o FP16 para el kernel en función de cuál resulte en un tiempo de ejecución más rápido para esa capa.

Consejo

Es fundamental asegurarse de que el mismo dispositivo que utilizará los pesos del modelo TensorRT para la implementación se utilice para la exportación con precisión INT8, ya que los resultados de la calibración pueden variar entre dispositivos.

Configuración de la exportación INT8

Los argumentos proporcionados al usar export para un modelo Ultralytics YOLO influirán enormemente en el rendimiento del modelo exportado. También deberán seleccionarse en función de los recursos del dispositivo disponibles, sin embargo, los argumentos predeterminados deberían funcionar para la mayoría de las GPU discretas NVIDIA Ampere (o más recientes). El algoritmo de calibración utilizado es "MINMAX_CALIBRATION" y puede leer más detalles sobre las opciones disponibles en la Guía para desarrolladores de TensorRT. Las pruebas de Ultralytics encontraron que "MINMAX_CALIBRATION" fue la mejor opción y las exportaciones se fijan para usar este algoritmo.

  • workspace : Controla el tamaño (en GiB) de la asignación de memoria del dispositivo al convertir los pesos del modelo.

    • Ajuste el workspace valor según sus necesidades de calibración y la disponibilidad de recursos. Si bien un valor más grande workspace puede aumentar el tiempo de calibración, permite que TensorRT explore una gama más amplia de tácticas de optimización, lo que podría mejorar el rendimiento del modelo y precisión. Por el contrario, un valor más pequeño workspace puede reducir el tiempo de calibración, pero puede limitar las estrategias de optimización, afectando la calidad del modelo cuantificado.

    • El valor predeterminado es workspace=None, lo que permitirá que TensorRT asigne memoria automáticamente. Al configurar manualmente, es posible que sea necesario aumentar este valor si la calibración falla (se cierra sin previo aviso).

    • TensorRT informará UNSUPPORTED_STATE durante la exportación si el valor de workspace es mayor que la memoria disponible para el dispositivo, lo que significa que el valor de workspace debería reducirse o establecerse en None.

    • Si workspace está configurado con el valor máximo y la calibración falla/se bloquea, considere usar None para la asignación automática o reduciendo los valores de imgsz y batch para reducir los requisitos de memoria.

    • Recuerde que la calibración para INT8 es específica para cada dispositivo, tomar prestada una GPU de "gama alta" para la calibración, podría resultar en un rendimiento deficiente cuando la inferencia se ejecuta en otro dispositivo.

  • batch : El tamaño máximo de lote que se utilizará para la inferencia. Durante la inferencia se pueden utilizar lotes más pequeños, pero la inferencia no aceptará lotes mayores de lo que se especifica.

Nota

Durante la calibración, se utilizará el doble del tamaño de batch proporcionado. El uso de lotes pequeños puede conducir a un escalado inexacto durante la calibración. Esto se debe a que el proceso se ajusta en función de los datos que ve. Los lotes pequeños podrían no capturar el rango completo de valores, lo que provocaría problemas con la calibración final, por lo que el tamaño de batch se duplica automáticamente. Si no se especifica ningún tamaño de lote , batch=1la calibración se ejecutará en batch=1 * 2 para reducir los errores de escalado de la calibración.

La experimentación de NVIDIA los llevó a recomendar el uso de al menos 500 imágenes de calibración que sean representativas de los datos de su modelo, con la calibración de cuantificación INT8. Esta es una guía y no un requisito estricto , y tendrá que experimentar con lo que se requiere para que funcione bien para su conjunto de datos. Dado que los datos de calibración son necesarios para la calibración INT8 con TensorRT, asegúrese de utilizar el argumento data cuando int8=True para TensorRT y usar data="my_dataset.yaml", que utilizará las imágenes de validación para calibrar. Cuando no se pasa ningún valor para data con la exportación a TensorRT con cuantización INT8, el valor predeterminado será utilizar uno de los conjuntos de datos de ejemplo "pequeños" basados en la tarea del modelo en lugar de generar un error.

Ejemplo

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(
    format="engine",
    dynamic=True,  # (1)!
    batch=8,  # (2)!
    workspace=4,  # (3)!
    int8=True,
    data="coco.yaml",  # (4)!
)

# Load the exported TensorRT INT8 model
model = YOLO("yolov8n.engine", task="detect")

# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
  1. Exporta con ejes dinámicos; esto se habilitará de forma predeterminada al exportar con int8=True incluso cuando no se establezca explícitamente. Consulte argumentos de exportación para obtener información adicional.
  2. Establece un tamaño máximo de lote de 8 para el modelo exportado, que se calibra con batch = 2 * 8 para evitar errores de escalado durante la calibración.
  3. Asigna 4 GiB de memoria en lugar de asignar todo el dispositivo para el proceso de conversión.
  4. Utiliza el conjunto de datos COCO para la calibración, específicamente las imágenes utilizadas para la validación (5000 en total).
# Export a YOLO11n PyTorch model to TensorRT format with INT8 quantization
yolo export model=yolo11n.pt format=engine batch=8 workspace=4 int8=True data=coco.yaml # creates 'yolov8n.engine''

# Run inference with the exported TensorRT quantized model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'
Caché de Calibración

TensorRT generará una calibración .cache que puede reutilizarse para acelerar la exportación de futuros pesos del modelo utilizando los mismos datos, pero esto puede resultar en una calibración deficiente cuando los datos son muy diferentes o si el batch el valor cambia drásticamente. En estas circunstancias, el .cache debería renombrarse y moverse a un directorio diferente o eliminarse por completo.

Ventajas de usar YOLO con TensorRT INT8

  • Tamaño de modelo reducido: La cuantización de FP32 a INT8 puede reducir el tamaño del modelo en 4 veces (en disco o en memoria), lo que conlleva tiempos de descarga más rápidos, menores requisitos de almacenamiento y una menor huella de memoria al implementar un modelo.

  • Menor consumo de energía: Las operaciones de precisión reducida para los modelos YOLO exportados a INT8 pueden consumir menos energía en comparación con los modelos FP32, especialmente para los dispositivos alimentados por batería.

  • Velocidades de inferencia mejoradas: TensorRT optimiza el modelo para el hardware de destino, lo que puede conducir a velocidades de inferencia más rápidas en las GPU, los dispositivos integrados y los aceleradores.

Nota sobre las velocidades de inferencia

Se puede esperar que las primeras llamadas de inferencia con un modelo exportado a TensorRT INT8 tengan tiempos de preprocesamiento, inferencia y/o postprocesamiento más largos de lo habitual. Esto también puede ocurrir al cambiar imgsz durante la inferencia, especialmente cuando imgsz no es lo mismo que lo especificado durante la exportación (exportación imgsz se establece como perfil "óptimo" de TensorRT).

Desventajas de usar YOLO con TensorRT INT8

  • Disminución en las métricas de evaluación: Usar una precisión más baja significará que mAP, Precision, Recall o cualquier otra métrica utilizada para evaluar el rendimiento del modelo probablemente será algo peor. Consulte la sección de Resultados de rendimiento para comparar las diferencias en mAP50 y mAP50-95 al exportar con INT8 en una pequeña muestra de varios dispositivos.

  • Tiempos de desarrollo aumentados: Encontrar la configuración "óptima" para la calibración INT8 para el conjunto de datos y el dispositivo puede llevar una cantidad significativa de pruebas.

  • Dependencia del hardware: La calibración y las ganancias de rendimiento podrían depender en gran medida del hardware y los pesos del modelo son menos transferibles.

Rendimiento de la exportación de Ultralytics YOLO TensorRT

NVIDIA A100

Rendimiento

Probado con Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1

Consulte la Documentación de detección para ver ejemplos de uso con estos modelos entrenados en COCO, que incluyen 80 clases pre-entrenadas.

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch tamaño
(píxeles)
FP32 Predecir 0.52 0.51 | 0.56 8 640
FP32 COCOval 0.52 0.52 0.37 1 640
FP16 Predecir 0.34 0.34 | 0.41 8 640
FP16 COCOval 0.33 0.52 0.37 1 640
INT8 Predecir 0.28 0.27 | 0.31 8 640
INT8 COCOval 0.29 0.47 0.33 1 640

Consulte la Documentación de segmentación para ver ejemplos de uso con estos modelos entrenados en COCO, que incluyen 80 clases pre-entrenadas.

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n-seg.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
mAPval
50(B)
mAPval
50-95(B)
mAPval
50(M)
mAPval
50-95(M)
batch tamaño
(píxeles)
FP32 Predecir 0.62 0.61 | 0.68 8 640
FP32 COCOval 0.63 0.52 0.36 0.49 0.31 1 640
FP16 Predecir 0.40 0.39 | 0.44 8 640
FP16 COCOval 0.43 0.52 0.36 0.49 0.30 1 640
INT8 Predecir 0.34 0.33 | 0.37 8 640
INT8 COCOval 0.36 0.46 0.32 0.43 0.27 1 640

Consulte la Documentación de clasificación para ver ejemplos de uso con estos modelos entrenados en ImageNet, que incluyen 1000 clases pre-entrenadas.

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n-cls.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
top-1 top-5 batch tamaño
(píxeles)
FP32 Predecir 0.26 0.25 | 0.28 8 640
FP32 ImageNetval 0.26 0.35 0.61 1 640
FP16 Predecir 0.18 0.17 | 0.19 8 640
FP16 ImageNetval 0.18 0.35 0.61 1 640
INT8 Predecir 0.16 0.15 | 0.57 8 640
INT8 ImageNetval 0.15 0.32 0.59 1 640

Consulte la Documentación de estimación de pose para ver ejemplos de uso con estos modelos entrenados en COCO, que incluyen 1 clase pre-entrenada, "persona".

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n-pose.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
mAPval
50(B)
mAPval
50-95(B)
mAPval
50(P)
mAPval
50-95(P)
batch tamaño
(píxeles)
FP32 Predecir 0.54 0.53 | 0.58 8 640
FP32 COCOval 0.55 0.91 0.69 0.80 0.51 1 640
FP16 Predecir 0.37 0.35 | 0.41 8 640
FP16 COCOval 0.36 0.91 0.69 0.80 0.51 1 640
INT8 Predecir 0.29 0.28 | 0.33 8 640
INT8 COCOval 0.30 0.90 0.68 0.78 0.47 1 640

Consulte la documentación sobre detección orientada para ver ejemplos de uso con estos modelos entrenados en DOTAv1, que incluye 15 clases preentrenadas.

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n-obb.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch tamaño
(píxeles)
FP32 Predecir 0.52 0.51 | 0.59 8 640
FP32 DOTAv1val 0.76 0.50 0.36 1 640
FP16 Predecir 0.34 0.33 | 0.42 8 640
FP16 DOTAv1val 0.59 0.50 0.36 1 640
INT8 Predecir 0.29 0.28 | 0.33 8 640
INT8 DOTAv1val 0.32 0.45 0.32 1 640

GPU para consumidores

Rendimiento de detección (COCO)

Probado con Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch tamaño
(píxeles)
FP32 Predecir 1.06 0.75 | 1.88 8 640
FP32 COCOval 1.37 0.52 0.37 1 640
FP16 Predecir 0.62 0.75 | 1.13 8 640
FP16 COCOval 0.85 0.52 0.37 1 640
INT8 Predecir 0.52 0.38 | 1.00 8 640
INT8 COCOval 0.74 0.47 0.33 1 640

Probado con Windows 10.0.22631, python 3.11.9, ultralytics==8.2.4, tensorrt==10.0.1

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch tamaño
(píxeles)
FP32 Predecir 1.76 1.69 | 1.87 8 640
FP32 COCOval 1.94 0.52 0.37 1 640
FP16 Predecir 0.86 0.75 | 1.00 8 640
FP16 COCOval 1.43 0.52 0.37 1 640
INT8 Predecir 0.80 0.75 | 1.00 8 640
INT8 COCOval 1.35 0.47 0.33 1 640

Probado con Pop!_OS 22.04 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch tamaño
(píxeles)
FP32 Predecir 2.84 2.84 | 2.85 8 640
FP32 COCOval 2.94 0.52 0.37 1 640
FP16 Predecir 1.09 1.09 | 1.10 8 640
FP16 COCOval 1.20 0.52 0.37 1 640
INT8 Predecir 0.75 0.74 | 0.75 8 640
INT8 COCOval 0.76 0.47 0.33 1 640

Dispositivos integrados

Rendimiento de detección (COCO)

Probado con JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1

Nota

Tiempos de inferencia mostrados para mean, min (más rápido) y max (más lento) para cada prueba utilizando pesos pre-entrenados yolov8n.engine

Precisión Prueba de evaluación media
(ms)
mín | máx
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch tamaño
(píxeles)
FP32 Predecir 6.11 6.10 | 6.29 8 640
FP32 COCOval 6.17 0.52 0.37 1 640
FP16 Predecir 3.18 3.18 | 3.20 8 640
FP16 COCOval 3.19 0.52 0.37 1 640
INT8 Predecir 2.30 2.29 | 2.35 8 640
INT8 COCOval 2.32 0.46 0.32 1 640

Información

Consulte nuestra guía de inicio rápido en NVIDIA Jetson con Ultralytics YOLO para obtener más información sobre la configuración.

Métodos de evaluación

Expanda las siguientes secciones para obtener información sobre cómo se exportaron y probaron estos modelos.

Configuraciones de exportación

Consulte el modo de exportación para obtener detalles sobre los argumentos de configuración de exportación.

from ultralytics import YOLO

model = YOLO("yolov8n.pt")

# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)

# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, half=True)

# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
    format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, int8=True, data="coco8.yaml"
)
Bucle de predicción

Consulte el modo de predicción para obtener información adicional.

import cv2

from ultralytics import YOLO

model = YOLO("yolov8n.engine")
img = cv2.imread("path/to/image.jpg")

for _ in range(100):
    result = model.predict(
        [img] * 8,  # batch=8 of the same image
        verbose=False,
        device="cuda",
    )
Configuración de validación

Consulte el val modo para obtener más información sobre los argumentos de configuración de validación.

from ultralytics import YOLO

model = YOLO("yolov8n.engine")
results = model.val(
    data="data.yaml",  # COCO, ImageNet, or DOTAv1 for appropriate model task
    batch=1,
    imgsz=640,
    verbose=False,
    device="cuda",
)

Implementación de modelos TensorRT YOLO11 exportados

Una vez que haya exportado con éxito sus modelos Ultralytics YOLO11 al formato TensorRT, estará listo para implementarlos. Para obtener instrucciones detalladas sobre cómo implementar sus modelos TensorRT en diversas configuraciones, consulte los siguientes recursos:

Resumen

En esta guía, nos centramos en la conversión de modelos Ultralytics YOLO11 al formato de modelo TensorRT de NVIDIA. Este paso de conversión es crucial para mejorar la eficiencia y la velocidad de los modelos YOLO11, haciéndolos más efectivos y adecuados para diversos entornos de implementación.

Para obtener más información sobre los detalles de uso, consulte la documentación oficial de TensorRT.

Si tienes curiosidad por conocer integraciones adicionales de Ultralytics YOLO11, nuestra página de guía de integración ofrece una amplia selección de recursos e información.

Preguntas frecuentes

¿Cómo convierto los modelos YOLO11 al formato TensorRT?

Para convertir tus modelos Ultralytics YOLO11 al formato TensorRT para una inferencia optimizada en NVIDIA GPU, sigue estos pasos:

  1. Instale el paquete requerido:

    pip install ultralytics
    
  2. Exporte su modelo YOLO11:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="engine")  # creates 'yolo11n.engine'
    
    # Run inference
    model = YOLO("yolo11n.engine")
    results = model("https://ultralytics.com/images/bus.jpg")
    

Para obtener más detalles, visita la guía de instalación de YOLO11 y la documentación de exportación.

¿Cuáles son los beneficios de usar TensorRT para modelos YOLO11?

El uso de TensorRT para optimizar los modelos YOLO11 ofrece varias ventajas:

  • Mayor velocidad de inferencia: TensorRT optimiza las capas del modelo y utiliza la calibración de precisión (INT8 y FP16) para acelerar la inferencia sin sacrificar significativamente la precisión.
  • Eficiencia de memoria: TensorRT gestiona la memoria del tensor de forma dinámica, lo que reduce la sobrecarga y mejora la utilización de la memoria de la GPU.
  • Fusión de capas: Combina varias capas en operaciones individuales, lo que reduce la complejidad computacional.
  • Ajuste automático del kernel: Selecciona automáticamente los kernels de GPU optimizados para cada capa del modelo, lo que garantiza el máximo rendimiento.

Para obtener más información, explora la documentación oficial de TensorRT de NVIDIA y nuestra descripción detallada de TensorRT.

¿Puedo usar la cuantización INT8 con TensorRT para modelos YOLO11?

Sí, puedes exportar modelos YOLO11 utilizando TensorRT con cuantificación INT8. Este proceso implica la cuantificación posterior al entrenamiento (PTQ) y la calibración:

  1. Exportar con INT8:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
    
  2. Ejecutar inferencia:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.engine", task="detect")
    result = model.predict("https://ultralytics.com/images/bus.jpg")
    

Para obtener más detalles, consulte la sección de exportación de TensorRT con cuantificación INT8.

¿Cómo puedo implementar modelos YOLO11 TensorRT en un servidor de inferencia NVIDIA Triton?

La implementación de modelos TensorRT YOLO11 en un servidor de inferencia NVIDIA Triton se puede realizar utilizando los siguientes recursos:

Estas guías te ayudarán a integrar modelos YOLOv8 de manera eficiente en diversos entornos de implementación.

¿Cuáles son las mejoras de rendimiento observadas con los modelos YOLOv8 exportados a TensorRT?

Las mejoras de rendimiento con TensorRT pueden variar según el hardware utilizado. Aquí tienes algunos puntos de referencia típicos:

  • NVIDIA A100:

    • Inferencia FP32: ~0.52 ms / imagen
    • Inferencia FP16: ~0.34 ms / imagen
    • Inferencia INT8: ~0.28 ms / imagen
    • Ligera reducción en mAP con precisión INT8, pero mejora significativa en la velocidad.
  • GPUs de consumo (p. ej., RTX 3080):

    • Inferencia FP32: ~1.06 ms / imagen
    • Inferencia FP16: ~0.62 ms / imagen
    • Inferencia INT8: ~0.52 ms / imagen

Puedes encontrar puntos de referencia de rendimiento detallados para diferentes configuraciones de hardware en la sección de rendimiento.

Para obtener información más completa sobre el rendimiento de TensorRT, consulta la documentación de Ultralytics y nuestros informes de análisis de rendimiento.



📅 Creado hace 1 año ✏️ Actualizado hace 1 mes

Comentarios