Exporta modelos YOLO a LiteRT para el despliegue en dispositivos edge y la web#
LiteRT (abreviatura de Lite Runtime) es el runtime de alto rendimiento de Google para la IA en el dispositivo. Es la siguiente generación y el nuevo nombre de TensorFlow Lite (TFLite), y ejecuta el mismo formato de modelo .tflite. Con LiteRT, un único modelo Ultralytics YOLO exportado se despliega en móviles, dispositivos integrados, dispositivos edge y el navegador, cubriendo todo lo que los antiguos formatos de exportación tflite y tfjs gestionaban por separado, ahora bajo un mismo paraguas.
Watch: How to Export Ultralytics YOLO26 to Google LiteRT | Deploy Vision AI on Android & iOS | Mobile AI 📱🚀
El formato de exportación de LiteRT optimiza tus modelos para tareas como la detección de objetos, la segmentación, la estimación de pose y la clasificación, para que se ejecuten rápidamente y sin conexión en una amplia variedad de dispositivos.
El plugin oficial de Ultralytics YOLO para Flutter ejecuta exportaciones de LiteRT .tflite en Android directamente, sin configuración adicional: inferencia de cámara en tiempo real, predicción de imágenes individuales, aceleración mediante GPU y descarga automática del modelo para las siete tareas de YOLO26, incluida la profundidad. Para dispositivos Apple, usa la exportación CoreML; para las NPU Qualcomm Snapdragon, consulta la integración de Qualcomm QNN.
Exporta modelos de clasificación en imgsz=224. Exporta modelos de detección, segmentación, semántica, profundidad, pose y OBB en
imgsz=640. Este estándar 224/640 se comparte entre los recursos móviles oficiales de LiteRT, CoreML y QNN.
El paquete NPM oficial de Ultralytics YOLO ejecuta exportaciones de LiteRT .tflite directamente en el navegador mediante LiteRT.js, sin necesidad de servidor ni Python, con inferencia de cámara web en tiempo real, predicción de imágenes individuales y aceleración mediante WebGPU (con fallback automático a CPU/WASM) para las seis tareas de YOLO26 (detección, segmentación, pose, OBB, clasificación y semántica). En WebGPU, suele ser aproximadamente ~2× más rápido que ONNX Runtime Web.
npm i @ultralytics/yolo @litertjs/core¿Por qué deberías exportar a LiteRT?#
LiteRT es un framework de código abierto diseñado para la inferencia en el dispositivo, también conocida como computación edge. Proporciona a los desarrolladores las herramientas necesarias para ejecutar modelos entrenados en dispositivos móviles, integrados y de IoT, ordenadores tradicionales y, mediante LiteRT.js, directamente en navegadores web y Node.js.
Un formato de modelo, todos los destinos:
- Móviles y dispositivos integrados: Android, iOS, Linux integrado y microcontroladores (MCU).
- Aceleradores edge: Compatible con Coral Edge TPU para una aceleración adicional.
- Navegador y Node.js: LiteRT.js ejecuta el mismo modelo
.tfliteen la web con aceleración WebGPU/WASM, lo que elimina la necesidad de una exportación independiente a TensorFlow.js.
Características principales de los modelos LiteRT#
- Optimización en el dispositivo: Reduce la latencia al procesar los datos localmente, mejora la privacidad al no transmitir datos personales y minimiza el tamaño del modelo para ahorrar espacio.
- Compatibilidad con varias plataformas: Se ejecuta en Android, iOS, Linux integrado, microcontroladores y navegadores web modernos.
- Aceleración de hardware: Aprovecha XNNPACK en la CPU y la aceleración de GPU mediante OpenCL, Metal y WebGPU. El delegado de GPU se ejecuta en FP16 de forma predeterminada para obtener más velocidad.
- Cuantización: Admite FP32, INT8 estático (
quantize=8, pesos int8 + activaciones int8), activación INT16 estática (quantize="w8a16", pesos int8 + activaciones int16 para una mayor precisión) e INT8 dinámico (quantize="w8a32", pesos int8 + activaciones FP32, sin necesidad de datos de calibración) para comprimir los modelos y acelerar la inferencia con una pérdida mínima de precisión. - Compatibilidad con diversos lenguajes: Compatible con Java/Kotlin, Swift, Objective-C, C++, Python y JavaScript.
Rendimiento medido#
Hardware: Xiaomi 17 con 12 GB de memoria LPDDR5X y Android 16 / API 36. Su Snapdragon 8 Elite Gen 5 de 3 nm (SM8850) tiene una CPU Qualcomm Oryon de 8 núcleos (2 núcleos Prime de hasta 4,6 GHz y 6 núcleos Performance de hasta 3,62 GHz), GPU Adreno y NPU Hexagon.
| Modelo | Tarea | tamaño (píxeles) | CPU LiteRT w8a32 (ms) | GPU LiteRT w8a32 (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 52.2 1.8 / 48.1 / 2.4 | 15.8 2.3 / 8.9 / 4.6 |
| YOLO26n-seg | Segment | 640 | 73.4 1.8 / 65.6 / 6.0 | 33.2 1.8 / 23.8 / 7.6 |
| YOLO26n-sem | Semántica | 640 | 61.2 1.8 / 51.1 / 8.3 | 34.2 1.8 / 24.0 / 8.3 |
| YOLO26n-depth | Profundidad | 640 | 124.4 1.9 / 115.1 / 7.4 | 23.0 1.8 / 13.5 / 7.7 |
| YOLO26n-cls | Clasificación | 224 | 4.4 0.4 / 4.0 / 0.0 | 3.1 0.8 / 2.1 / 0.2 |
| YOLO26n-pose | Pose | 640 | 57.4 1.8 / 53.8 / 1.8 | 16.6 2.7 / 10.1 / 3.9 |
| YOLO26n-obb | OBB | 640 | 50.3 1.8 / 47.2 / 1.4 | 11.7 1.8 / 7.8 / 2.0 |
- Los valores de velocidad son latencias de ráfaga para una sola imagen: la media de 15 ejecuciones después de 3 ejecuciones de calentamiento en
bus.jpg, medidas con el0.6.10del plugin de Ultralytics para Flutter y los recursos estandarizadosv0.6.6. El orden CPU/GPU se alternó entre tareas en un único recorrido secuencial. Los registros nativos confirmaron que todas las filas de CPU usaron LiteRT CPU/XNNPACK y que todas las filas de GPU delegaron el grafo completo en LiteRT OpenCL (LITERT_CL). - La exportación de LiteRT traza directamente el modelo de PyTorch y produce un
.tfliteNCHW con una entrada float; el delegado de GPU compila el grafo completo (aquí, las siete tareas se ejecutan en la GPU Adreno), yw8a32no necesita datos de calibración. Los consumidores deben leer las formas de los tensores y los nombres de las firmas en lugar de asumir la disposición NHWC heredada de onnx2tf o los nombres de salidaIdentity; empaqueta los datos RGB directamente como CHW planar o transpónlos antes de la inferencia. Las exportaciones semánticas devuelven logits NCHW y requieren un argmax de clase en el lado del host. Los recursos oficiales para Android están alojados en la versiónv0.6.6de yolo-flutter-app, con el registro detallado del benchmark en la documentación de rendimiento de Flutter. - Los resultados de la NPU Hexagon de Snapdragon correspondiente y las cifras de CPU/GPU de LiteRT se encuentran en la integración de Qualcomm QNN.
- Compara los resultados de CPU/acelerador de Apple en la integración de CoreML.
Los siguientes barridos de dispositivos utilizan los mismos recursos estandarizados v0.6.6.
Google Pixel 10#
Hardware: Google Pixel 10 con 12 GB de memoria y Android 16 / API 36. Su Google Tensor G5 de 3 nm tiene una CPU de 8 núcleos (1 núcleo Prime de hasta 3,78 GHz, 5 núcleos Performance de hasta 3,05 GHz y 2 núcleos Efficiency de hasta 2,25 GHz), GPU PowerVR D-Series y TPU de Google. Las frecuencias de los núcleos y el nombre del controlador de la GPU se obtuvieron del dispositivo del benchmark porque Google no los publica en las especificaciones enlazadas.
| Modelo | Tarea | tamaño (píxeles) | CPU LiteRT w8a32 (ms) | GPU LiteRT w8a32 (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 53.3 1.5 / 50.2 / 1.6 | 45.5 3.8 / 37.7 / 4.0 |
| YOLO26n-seg | Segment | 640 | 87.7 1.8 / 78.5 / 7.5 | 50.9 3.0 / 36.9 / 10.9 |
| YOLO26n-sem | Semántica | 640 | 68.6 1.5 / 59.0 / 8.0 | 71.6 1.5 / 59.5 / 10.6 |
| YOLO26n-depth | Profundidad | 640 | 120.3 1.5 / 112.5 / 6.3 | 52.5 2.0 / 37.5 / 13.0 |
| YOLO26n-cls | Clasificación | 224 | 4.0 0.3 / 3.4 / 0.2 | 17.6 0.9 / 16.7 / 0.1 |
| YOLO26n-pose | Pose | 640 | 59.7 1.5 / 57.0 / 1.2 | 46.6 3.8 / 39.2 / 3.5 |
| YOLO26n-obb | OBB | 640 | 52.0 1.5 / 48.9 / 1.7 | 45.5 4.0 / 38.5 / 2.9 |
Benchmark: Media de 15 llamadas predict() después de 3 calentamientos en bus.jpg, usando ultralytics_yolo, 0.6.10 y los recursos oficiales v0.6.6. El orden CPU/GPU se alterna entre tareas en un único recorrido secuencial. Los registros nativos confirmaron que todas las filas de CPU usaron LiteRT CPU/XNNPACK y que todas las filas de GPU delegaron el grafo completo en LiteRT OpenCL (LITERT_CL).
Samsung Galaxy S26#
Hardware: Samsung Galaxy S26 (SM-S942B) con 12 GB de memoria y Android 16 / API 36. Su Exynos 2600 de 2 nm tiene una CPU Armv9.3 de 10 núcleos (1 núcleo C1-Ultra de hasta 3,8 GHz, 3 núcleos C1-Pro de rendimiento de hasta 3,26 GHz y 6 núcleos C1-Pro de eficiencia de hasta 2,76 GHz), GPU Xclipse 960 y NPU de Samsung.
| Modelo | Tarea | tamaño (píxeles) | CPU LiteRT w8a32 (ms) | GPU LiteRT w8a32 (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 36.7 1.3 / 33.8 / 1.7 | 16.4 1.4 / 12.3 / 2.6 |
| YOLO26n-seg | Segment | 640 | 54.6 1.2 / 48.0 / 5.3 | 32.8 1.3 / 24.5 / 7.0 |
| YOLO26n-sem | Semántica | 640 | 47.8 1.2 / 38.4 / 8.1 | 34.2 1.3 / 24.9 / 8.0 |
| YOLO26n-depth | Profundidad | 640 | 92.9 1.2 / 84.8 / 6.9 | 33.5 1.3 / 22.4 / 9.8 |
| YOLO26n-cls | Clasificación | 224 | 2.7 0.2 / 2.3 / 0.2 | 2.6 0.2 / 2.4 / 0.0 |
| YOLO26n-pose | Pose | 640 | 42.8 1.3 / 40.5 / 1.0 | 18.4 1.4 / 14.1 / 2.9 |
| YOLO26n-obb | OBB | 640 | 37.5 1.3 / 35.1 / 1.2 | 18.8 2.5 / 14.6 / 1.8 |
Benchmark: Media de 15 llamadas predict() después de 3 calentamientos en bus.jpg, usando ultralytics_yolo, 0.6.10 y los recursos oficiales v0.6.6. El orden CPU/GPU se alterna entre tareas en un único recorrido secuencial. Los registros nativos confirmaron que todas las filas de CPU usaron LiteRT CPU/XNNPACK y que todas las filas de GPU delegaron el grafo completo en LiteRT OpenCL (LITERT_CL).
Xiaomi 17T Pro#
Hardware: Xiaomi 17T Pro (2602EPTC0G) con 12 GB de memoria LPDDR5X y Android 16 / API 36. Su MediaTek Dimensity 9500 de 3 nm (MT6993) tiene una CPU Armv9.3 de 8 núcleos (1 núcleo C1-Ultra de hasta 4,21 GHz, 3 núcleos C1-Premium de hasta 3,5 GHz y 4 núcleos C1-Pro de hasta 2,7 GHz), GPU Mali-G1 Ultra MC12 y NPU MediaTek 990.
| Modelo | Tarea | tamaño (píxeles) | CPU LiteRT w8a32 (ms) | GPU LiteRT w8a32 (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 45.4 1.3 / 42.1 / 2.0 | 26.6 1.9 / 22.0 / 2.7 |
| YOLO26n-seg | Segment | 640 | 126.2 2.6 / 113.9 / 9.7 | 46.7 2.6 / 33.3 / 10.8 |
| YOLO26n-sem | Semántica | 640 | 117.9 2.6 / 98.8 / 16.5 | 74.3 2.6 / 54.7 / 17.0 |
| YOLO26n-depth | Profundidad | 640 | 182.4 2.5 / 167.6 / 12.3 | 47.8 2.5 / 32.3 / 12.9 |
| YOLO26n-cls | Clasificación | 224 | 6.2 0.4 / 5.3 / 0.4 | 7.4 0.4 / 6.9 / 0.1 |
| YOLO26n-pose | Pose | 640 | 97.6 2.5 / 93.3 / 1.8 | 28.6 2.5 / 23.3 / 2.8 |
| YOLO26n-obb | OBB | 640 | 91.5 2.6 / 85.8 / 3.2 | 27.5 2.7 / 21.8 / 2.9 |
Benchmark: Media de 15 llamadas predict() después de 3 calentamientos en bus.jpg, usando ultralytics_yolo, 0.6.10 y los recursos oficiales v0.6.6. El orden CPU/GPU se alterna entre tareas en un único recorrido secuencial. Los registros nativos confirmaron que todas las filas de CPU usaron LiteRT CPU/XNNPACK y que todas las filas de GPU delegaron el grafo completo en LiteRT OpenCL (LITERT_CL).
Tareas compatibles#
La exportación de LiteRT admite las siete tareas de Ultralytics. La segmentación semántica y la estimación de profundidad solo están disponibles con YOLO26, la única familia que incluye esas cabezas.
| Tarea | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Detección | ✅ | ✅ | ✅ |
| Segmentación | ✅ | ✅ | ✅ |
| Semántica | ❌ | ❌ | ✅ |
| Profundidad | ❌ | ❌ | ✅ |
| Clasificación | ✅ | ✅ | ✅ |
| Pose | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Exporta a LiteRT: convierte tu modelo YOLO#
Puedes mejorar la eficiencia de ejecución en el dispositivo y ampliar las opciones de despliegue convirtiendo tus modelos al formato LiteRT.
Instalación#
Para instalar el paquete necesario, ejecuta:
# Install the required package for YOLO
pip install ultralyticsPara consultar instrucciones detalladas y prácticas recomendadas, visita nuestra guía de instalación de Ultralytics. Si encuentras alguna dificultad, consulta nuestra guía de problemas habituales.
La exportación de LiteRT es compatible actualmente con Linux x86_64 y macOS. El propio modelo .tflite exportado se ejecuta en todas las plataformas compatibles con LiteRT (móviles, dispositivos integrados, dispositivos edge y el navegador).
Uso#
Todos los modelos Ultralytics YOLO admiten la exportación directamente. El formato LiteRT admite los modos Export, Predict y Validate, por lo que puedes exportar un modelo y cargarlo después para ejecutar inferencias o validar su precisión localmente.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to LiteRT format
model.export(format="litert", imgsz=640) # use imgsz=224 for classificationfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Dynamic INT8: int8 weights, FP32 activations - no calibration data needed
model.export(format="litert", quantize="w8a32", imgsz=640) # use imgsz=224 for classification
# Static INT8: int8 weights + int8 activations - needs calibration data
model.export(format="litert", quantize=8, data="coco8.yaml", imgsz=640) # use 224 for classification
# Static w8a16: int8 weights + int16 activations (higher accuracy) - needs calibration data
model.export(format="litert", quantize="w8a16", data="coco8.yaml", imgsz=640) # use 224 for classificationfrom ultralytics import YOLO
# Load the exported LiteRT model
model = YOLO("yolo26n.tflite")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported LiteRT model
model = YOLO("yolo26n.tflite")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Argumentos de exportación#
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
format | str | 'litert' | Formato de destino del modelo exportado, que define la compatibilidad con diversos entornos de despliegue. |
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. |
quantize | int o str | None | Precisión de cuantización: 8 (INT8 estático, pesos int8 + activaciones int8; necesita la calibración data/fraction), 'w8a16' (estático, pesos int8 + activaciones int16; necesita la calibración data/fraction), 'w8a32' (INT8 dinámico, pesos int8 + activaciones FP32; no necesita calibración) o 32/sin establecer (FP32). FP16 no se exporta por separado (consulta la nota siguiente). Sustituye a los indicadores obsoletos half/int8. |
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 el modo predict. |
data | str | None | YAML del conjunto de datos utilizado para la calibración INT8; para la clasificación, en cambio, se necesita un directorio del conjunto de datos o el nombre de un conjunto de datos integrado. Si se omite con quantize=8 o 'w8a16', Ultralytics selecciona el conjunto de datos de calibración predeterminado para la tarea del modelo. |
device | str | None | Especifica el dispositivo para la exportación. La exportación a LiteRT se ejecuta en la CPU (device=cpu). |
A diferencia de la exportación heredada tflite, LiteRT no requiere una exportación FP16 independiente. Un modelo FP32 .tflite se ejecuta con precisión media en tiempo de ejecución al utilizar un delegado de GPU (WebGPU, OpenCL, Metal); este es el enfoque oficial de LiteRT para la inferencia FP16.
Para obtener más información sobre el proceso de exportación, visita la página de la documentación de Ultralytics sobre exportación.
Implementación de modelos YOLO LiteRT exportados#
Después de exportar tu modelo Ultralytics YOLO a LiteRT, puedes implementarlo en distintas plataformas. La forma más rápida de verificarlo localmente es el método YOLO("yolo26n.tflite") mostrado arriba. Para implementarlo en otros entornos, consulta los siguientes recursos:
Móviles y dispositivos integrados#
- Android: Guía de inicio rápido para integrar LiteRT en aplicaciones Android.
- iOS: Guía para integrar e implementar modelos LiteRT en aplicaciones iOS.
- Linux integrado y Raspberry Pi: Ejecuta modelos LiteRT en ordenadores de placa única, con aceleración opcional mediante un Coral Edge TPU.
- Microcontroladores: Implementa en MCU con solo unos pocos kilobytes de memoria; el entorno de ejecución principal ocupa aproximadamente 16 KB en un Arm Cortex-M3.
Navegador y Node.js (LiteRT.js)#
- Descripción general de LiteRT.js: Ejecuta el mismo modelo
.tflitedirectamente en el navegador con aceleración WebGPU/WASM, eliminando el procesamiento en el servidor y manteniendo los datos en el dispositivo del usuario. - Ejemplos de principio a fin: Ejemplos prácticos y tutoriales para implementar LiteRT en dispositivos móviles, edge y la web.
Resumen#
En esta guía, hemos explicado cómo exportar modelos Ultralytics YOLO al formato LiteRT. Al consolidar la implementación en dispositivos móviles/edge (antes TFLite) y en el navegador (antes TF.js) en un único modelo .tflite, LiteRT hace que tus modelos YOLO sean más rápidos, pequeños y portátiles en prácticamente cualquier dispositivo.
Para obtener más información, visita la documentación oficial de LiteRT.
Además, si te interesan otras integraciones de Ultralytics YOLO, consulta nuestra página de la guía de integraciones, donde encontrarás muchos recursos útiles.
Preguntas frecuentes#
Utiliza la biblioteca Ultralytics para exportar un modelo YOLO a LiteRT (
.tflite). Primero, instala el paquete:pip install ultralyticsA continuación, exporta tu modelo:
from ultralytics import YOLO # Load a YOLO26 model model = YOLO("yolo26n.pt") # Export the model to LiteRT format model.export(format="litert", imgsz=640) # use imgsz=224 for classificationPara usuarios de la CLI:
yolo export model=yolo26n.pt format=litert imgsz=640 # use imgsz=224 for classificationPara obtener más información, visita la guía de exportación de Ultralytics.
LiteRT es el nuevo nombre de TensorFlow Lite: el mismo formato de modelo
.tflitey la misma línea de entorno de ejecución, con un cambio de marca realizado por Google. En Ultralytics, el formato de exportación únicolitertcubre ahora los dos casos de uso que antes requerían dos formatos independientes:- El formato antiguo
tflite→ implementación en dispositivos móviles, integrados y edge. - El formato antiguo
tfjs→ implementación en el navegador y Node.js, ahora gestionada por LiteRT.js, que ejecuta el mismo archivo.tflite.
Si tienes un archivo
.tfliteexistente, puedes cargarlo directamente conYOLO("model.tflite")y se ejecutará mediante el backend de LiteRT.- El formato antiguo
Sí. Exporta tu modelo al formato LiteRT y, a continuación, ejecútalo en una Raspberry Pi para mejorar la velocidad de inferencia. Para una optimización adicional, considera un Coral Edge TPU. Para consultar los pasos detallados, revisa nuestra guía de implementación en Raspberry Pi.
Sí, en tiempo de ejecución. Un modelo LiteRT FP32 se ejecuta automáticamente en FP16 cuando se ejecuta en un delegado de GPU (WebGPU, OpenCL o Metal), que es el enfoque oficial de LiteRT. Por tanto, no necesitas una exportación FP16 específica; para una compresión adicional, utiliza la cuantización INT8 con
quantize=8.Si encuentras errores al exportar modelos YOLO a LiteRT, algunas soluciones habituales son:
- Comprueba la plataforma: La exportación a LiteRT es compatible con Linux x86_64 y macOS. Verifica que tu entorno coincida.
- Comprueba la compatibilidad del paquete: Asegúrate de utilizar una versión compatible de Ultralytics. Consulta nuestra guía de instalación.
- Problemas de cuantización: Al utilizar la cuantización INT8, asegúrate de especificar correctamente la ruta del conjunto de datos en el parámetro
data.
Para obtener más consejos sobre la resolución de problemas, visita nuestra guía de problemas habituales.