Exporta modelos YOLO para LiteRT para implementação em Edge e Web#
LiteRT (abreviação de Lite Runtime) é o runtime de alto desempenho da Google para IA em dispositivos (on-device). É a próxima geração e o novo nome do TensorFlow Lite (TFLite), e executa o mesmo formato de modelo .tflite. Com o LiteRT, um único modelo Ultralytics YOLO exportado é implantado em dispositivos móveis, embarcados, edge e no navegador — cobrindo tudo o que os formatos de exportação mais antigos tflite e tfjs tratavam separadamente, agora sob um único guarda-chuva.
O formato de exportação LiteRT otimiza os teus modelos para tarefas como detecção de objetos, segmentação, estimação de pose e classificação para que sejam executados rapidamente e offline em uma ampla gama de dispositivos.
O plugin Flutter oficial do Ultralytics YOLO executa exportações LiteRT .tflite no Android nativamente — inferência de câmera em tempo real, predição de imagem única, aceleração por GPU e download automático de modelo para todas as sete tarefas do YOLO26, incluindo Profundidade (Depth). Para dispositivos Apple, usa a exportação CoreML; para NPUs Qualcomm Snapdragon, consulta a integração Qualcomm QNN.
Exporta modelos de classificação em imgsz=224. Exporta modelos de detecção, segmentação, semântica, profundidade, pose e OBB em
imgsz=640. Este padrão 224/640 é compartilhado pelos assets móveis oficiais do LiteRT, CoreML e QNN.
O pacote NPM oficial do Ultralytics YOLO executa exportações LiteRT .tflite diretamente no navegador via LiteRT.js, sem necessidade de servidor ou Python — com inferência de webcam em tempo real, predição de imagem única e aceleração por WebGPU (fallback automático para CPU/WASM) em todas as seis tarefas do YOLO26 (detect, segment, pose, OBB, classify, semantic). No WebGPU, costuma ser cerca de 2× mais rápido que o ONNX Runtime Web.
npm i @ultralytics/yolo @litertjs/corePor que deverias exportar para LiteRT?#
LiteRT é um framework de código aberto projetado para inferência em dispositivos, também conhecido como edge computing. Ele fornece aos desenvolvedores as ferramentas para executar modelos treinados em dispositivos móveis, embarcados e de IoT, computadores tradicionais e — por meio do LiteRT.js — diretamente em navegadores web e Node.js.
Um formato de modelo, todos os alvos:
- Móvel e Integrado: Android, iOS, Linux integrado e microcontroladores (MCUs).
- Aceleradores Edge: Compatível com o Coral Edge TPU para aceleração adicional.
- Navegador e Node.js: O LiteRT.js executa o mesmo modelo
.tflitena web com aceleração WebGPU/WASM — eliminando a necessidade de uma exportação separada para o TensorFlow.js.
Principais recursos dos modelos LiteRT#
- Otimização no dispositivo: Reduz a latência ao processar dados localmente, aumenta a privacidade ao não transmitir dados pessoais e minimiza o tamanho do modelo para economizar espaço.
- Suporte a múltiplas plataformas: Executa em Android, iOS, Linux integrado, microcontroladores e navegadores web modernos.
- Aceleração de hardware: Aproveita o XNNPACK na CPU e aceleração de GPU via OpenCL, Metal e WebGPU. O delegado de GPU executa em FP16 por padrão para maior velocidade.
- Quantização: Suporta FP32, INT8 estático (
quantize=8, pesos int8 + ativações int8), INT16 estático para ativação (quantize="w8a16", pesos int8 + ativações int16 para maior precisão) e INT8 dinâmico (quantize="w8a32", pesos int8 + ativações FP32, sem necessidade de dados de calibração) para comprimir modelos e acelerar a inferência com perda mínima de precisão. - Suporte a diversos idiomas: Compatível com Java/Kotlin, Swift, Objective-C, C++, Python e JavaScript.
Desempenho Medido#
Hardware: Xiaomi 17 com 12 GB de memória LPDDR5X e Android 16 / API 36. O seu Snapdragon 8 Elite Gen 5 (SM8850) de 3 nm possui uma CPU Qualcomm Oryon de 8 núcleos (2 núcleos Prime até 4,6 GHz e 6 núcleos Performance até 3,62 GHz), GPU Adreno e NPU Hexagon.
| Modelo | Tarefa | tamanho (pixels) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Detectar | 640 | 52,2 1,8 / 48,1 / 2,4 | 15,8 2,3 / 8,9 / 4,6 |
| YOLO26n-seg | Segmentar | 640 | 73,4 1,8 / 65,6 / 6,0 | 33,2 1,8 / 23,8 / 7,6 |
| YOLO26n-sem | Semântico | 640 | 61,2 1,8 / 51,1 / 8,3 | 34,2 1,8 / 24,0 / 8,3 |
| YOLO26n-depth | Depth | 640 | 124,4 1,9 / 115,1 / 7,4 | 23,0 1,8 / 13,5 / 7,7 |
| YOLO26n-cls | Classificar | 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 |
- Os valores de Velocidade são latências de rajada de imagem única — a média de 15 execuções após 3 execuções de aquecimento em
bus.jpg, medida com o plugin Flutter da Ultralytics0.6.10e os assets padronizadosv0.6.6. A ordem de CPU/GPU alternou entre as tarefas em uma varredura sequencial. Logs nativos confirmaram que cada linha de CPU usou LiteRT CPU/XNNPACK e cada linha de GPU delegou o grafo completo para LiteRT OpenCL (LITERT_CL). - A exportação LiteRT rastreia o modelo PyTorch diretamente, produzindo um
.tfliteNCHW com uma entrada de ponto flutuante — o delegado de GPU compila o grafo inteiro (todas as sete tarefas são executadas na GPU Adreno aqui), ew8a32não precisa de dados de calibração. Os consumidores devem ler os formatos de tensor e os nomes de assinatura em vez de assumir o layout NHWC legado do onnx2tf ou os nomes de saída deIdentity; empacote os dados RGB diretamente como CHW planar ou transponha-os antes da inferência. As exportações semânticas retornam logits NCHW e exigem um argmax de classe no lado do host. Os assets oficiais para Android estão hospedados na releasev0.6.6do yolo-flutter-app, com o registro detalhado de benchmarks em the Flutter performance doc. - Os números correspondentes à NPU Hexagon do Snapdragon e à CPU/GPU do LiteRT estão na integração Qualcomm QNN.
- Compara os resultados de CPU/acelerador da Apple na integração CoreML.
As seguintes varreduras de dispositivos utilizam os mesmos assets padronizados v0.6.6.
Google Pixel 10#
Hardware: Google Pixel 10 com 12 GB de memória e Android 16 / API 36. O seu Google Tensor G5 de 3 nm tem uma CPU de 8 núcleos (1 núcleo Prime até 3,78 GHz, 5 núcleos Performance até 3,05 GHz e 2 núcleos de Eficiência até 2,25 GHz), GPU PowerVR D-Series e TPU da Google. Os clocks principais e o nome do driver da GPU foram lidos a partir do dispositivo de benchmark, pois a Google não os publica nas especificações vinculadas.
| Modelo | Tarefa | tamanho (pixels) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Detectar | 640 | 53,3 1,5 / 50,2 / 1,6 | 45,5 3,8 / 37,7 / 4,0 |
| YOLO26n-seg | Segmentar | 640 | 87,7 1,8 / 78,5 / 7,5 | 50,9 3,0 / 36,9 / 10,9 |
| YOLO26n-sem | Semântico | 640 | 68,6 1,5 / 59,0 / 8,0 | 71,6 1,5 / 59,5 / 10,6 |
| YOLO26n-depth | Depth | 640 | 120,3 1,5 / 112,5 / 6,3 | 52,5 2,0 / 37,5 / 13,0 |
| YOLO26n-cls | Classificar | 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: Média de 15 chamadas em predict() após 3 aquecimentos em bus.jpg, usando ultralytics_yolo 0.6.10 e os
assets oficiais v0.6.6. A ordem de CPU/GPU alterna entre as tarefas em uma varredura sequencial. Logs nativos confirmaram que
cada linha de CPU usou LiteRT CPU/XNNPACK e cada linha de GPU delegou o grafo completo para LiteRT OpenCL (LITERT_CL).
Samsung Galaxy S26#
Hardware: Samsung Galaxy S26 (SM-S942B) com 12 GB de memória e Android 16 / API 36. O seu Exynos 2600 de 2 nm tem uma CPU Armv9.3 de 10 núcleos (1 núcleo C1-Ultra até 3,8 GHz, 3 núcleos de desempenho C1-Pro até 3,26 GHz e 6 núcleos de eficiência C1-Pro até 2,76 GHz), GPU Xclipse 960 e NPU da Samsung.
| Modelo | Tarefa | tamanho (pixels) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Detectar | 640 | 36,7 1,3 / 33,8 / 1,7 | 16,4 1,4 / 12,3 / 2,6 |
| YOLO26n-seg | Segmentar | 640 | 54,6 1,2 / 48,0 / 5,3 | 32,8 1,3 / 24,5 / 7,0 |
| YOLO26n-sem | Semântico | 640 | 47,8 1,2 / 38,4 / 8,1 | 34,2 1,3 / 24,9 / 8,0 |
| YOLO26n-depth | Depth | 640 | 92,9 1,2 / 84,8 / 6,9 | 33,5 1,3 / 22,4 / 9,8 |
| YOLO26n-cls | Classificar | 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: Média de 15 chamadas em predict() após 3 aquecimentos em bus.jpg, usando ultralytics_yolo 0.6.10 e os
assets oficiais v0.6.6. A ordem de CPU/GPU alterna entre as tarefas em uma varredura sequencial. Logs nativos confirmaram que
cada linha de CPU usou LiteRT CPU/XNNPACK e cada linha de GPU delegou o grafo completo para LiteRT OpenCL (LITERT_CL).
Xiaomi 17T Pro#
Hardware: Xiaomi 17T Pro (2602EPTC0G) com 12 GB de memória LPDDR5X e Android 16 / API 36. O seu MediaTek Dimensity 9500 (MT6993) de 3 nm tem uma CPU Armv9.3 de 8 núcleos (1 núcleo C1-Ultra até 4,21 GHz, 3 núcleos C1-Premium até 3,5 GHz e 4 núcleos C1-Pro até 2,7 GHz), GPU Mali-G1 Ultra MC12 e MediaTek NPU 990.
| Modelo | Tarefa | tamanho (pixels) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Detectar | 640 | 45,4 1,3 / 42,1 / 2,0 | 26,6 1,9 / 22,0 / 2,7 |
| YOLO26n-seg | Segmentar | 640 | 126,2 2,6 / 113,9 / 9,7 | 46,7 2,6 / 33,3 / 10,8 |
| YOLO26n-sem | Semântico | 640 | 117,9 2,6 / 98,8 / 16,5 | 74,3 2,6 / 54,7 / 17,0 |
| YOLO26n-depth | Depth | 640 | 182,4 2,5 / 167,6 / 12,3 | 47,8 2,5 / 32,3 / 12,9 |
| YOLO26n-cls | Classificar | 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: Média de 15 chamadas em predict() após 3 aquecimentos em bus.jpg, usando ultralytics_yolo 0.6.10 e os
assets oficiais v0.6.6. A ordem de CPU/GPU alterna entre as tarefas em uma varredura sequencial. Logs nativos confirmaram que
cada linha de CPU usou LiteRT CPU/XNNPACK e cada linha de GPU delegou o grafo completo para LiteRT OpenCL (LITERT_CL).
Tarefas Suportadas#
A exportação para LiteRT suporta todas as sete tarefas do Ultralytics. Segmentação semântica e estimativa de profundidade estão disponíveis apenas com o YOLO26, a única família que inclui essas cabeças.
| Tarefa | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Detectar | ✅ | ✅ | ✅ |
| Segmentar | ✅ | ✅ | ✅ |
| Semântica | ❌ | ❌ | ✅ |
| Profundidade | ❌ | ❌ | ✅ |
| Classificar | ✅ | ✅ | ✅ |
| Pose | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Exportar para LiteRT: Convertendo o teu modelo YOLO#
Podes melhorar a eficiência da execução no dispositivo e ampliar as opções de implementação convertendo os teus modelos para o formato LiteRT.
Instalação#
Para instalar o pacote necessário, execute:
# Install the required package for YOLO
pip install ultralyticsPara instruções detalhadas e melhores práticas, consulta o nosso guia de Instalação do Ultralytics. Se encontrares alguma dificuldade, consulta o nosso guia de Problemas Comuns.
A exportação para LiteRT é atualmente suportada em Linux x86_64 e macOS. O próprio modelo exportado .tflite é executado em todas as plataformas suportadas pelo LiteRT (dispositivos móveis, embarcados, edge e no navegador).
Uso#
Todos os modelos Ultralytics YOLO suportam exportação nativamente. O formato LiteRT suporta os modos Export, Predict e Validate, para que possas exportar um modelo e, em seguida, carregá-lo para executar a inferência ou validar a sua precisão 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 Exportação#
| Argumento | Tipo | Predefinição | Descrição |
|---|---|---|---|
format | str | 'litert' | Formato de destino para o modelo exportado, definindo a compatibilidade com vários ambientes de implementação. |
imgsz | int ou tuple | 640 | Tamanho de imagem desejado para a entrada do modelo. Pode ser um número inteiro para imagens quadradas ou uma tupla (height, width) para dimensões específicas. |
quantize | int ou str | None | Precisão de quantização: 8 (INT8 estático, pesos int8 + ativações int8; necessita de calibração data/fraction), 'w8a16' (estático, pesos int8 + ativações int16; necessita de calibração data/fraction), 'w8a32' (INT8 dinâmico, pesos int8 + ativações FP32; sem necessidade de calibração) ou 32/não definido (FP32). FP16 não é exportado separadamente (vê a nota abaixo). Substitui as flags obsoletas half/int8. |
batch | int | 1 | Especifica o tamanho de inferência em lote do modelo de exportação ou o número máximo de imagens que o modelo exportado processará concorrentemente no modo predict. |
data | str | None | Dataset YAML usado para a calibração INT8; a classificação aceita em vez disso um diretório de dataset ou um nome de dataset integrado. Se omitido com quantize=8 ou 'w8a16', a Ultralytics seleciona o dataset de calibração padrão para a tarefa do modelo. |
device | str | None | Especifica o dispositivo para exportação. A exportação LiteRT é executada na CPU (device=cpu). |
Ao contrário da exportação legada tflite, o LiteRT não requer uma exportação FP16 separada. Um modelo FP32 .tflite é executado em meia precisão em tempo de execução ao usar um delegado de GPU (WebGPU, OpenCL, Metal) — esta é a abordagem oficial do LiteRT para inferência em FP16.
Para mais detalhes sobre o processo de exportação, visita a página de documentação do Ultralytics sobre exportação.
Implementando modelos YOLO LiteRT exportados#
Após exportar o teu modelo Ultralytics YOLO para LiteRT, podes implantá-lo em várias plataformas. A maneira mais rápida de verificá-lo localmente é o método YOLO("yolo26n.tflite") mostrado acima. Para implantação em outros ambientes, consulta os seguintes recursos:
Móvel e Integrado#
- Android: Um guia de início rápido para integrar o LiteRT em aplicações Android.
- iOS: Um guia para integrar e implantar modelos LiteRT em aplicações iOS.
- Linux Embarcado e Raspberry Pi: Executa modelos LiteRT em computadores de placa única, opcionalmente acelerados com uma Coral Edge TPU.
- Microcontroladores: Implanta em MCUs com apenas alguns quilobytes de memória — o runtime principal cabe em aproximadamente 16 KB num Arm Cortex-M3.
Navegador e Node.js (LiteRT.js)#
- Visão geral do LiteRT.js: Executa o mesmo modelo
.tflitediretamente no navegador com aceleração WebGPU/WASM, eliminando o cálculo do lado do servidor e mantendo os dados no dispositivo do usuário. - Exemplos de Ponta a Ponta: Exemplos práticos e tutoriais para implementar o LiteRT em dispositivos móveis, edge e web.
Resumo#
Neste guia, abordamos como exportar modelos Ultralytics YOLO para o formato LiteRT. Ao consolidar a implantação móvel/edge (antigamente TFLite) e em navegador (antigamente TF.js) num único modelo .tflite, o LiteRT torna os teus modelos YOLO mais rápidos, menores e portáteis em praticamente qualquer destino on-device.
Para mais detalhes, visita a documentação oficial do LiteRT.
Além disso, se tiveres curiosidade sobre outras integrações do Ultralytics YOLO, consulta a nossa página do guia de integração para obteres vários recursos úteis.
FAQ#
Usa a biblioteca Ultralytics para exportar um modelo YOLO para LiteRT (
.tflite). Primeiro, instala o pacote:pip install ultralyticsDepois, exporta o teu 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 utilizadores da CLI:
yolo export model=yolo26n.pt format=litert imgsz=640 # use imgsz=224 for classificationPara mais detalhes, visita o guia de exportação do Ultralytics.
LiteRT é o novo nome do TensorFlow Lite — o mesmo formato de modelo
.tflite, mesma linhagem de runtime, renomeado pela Google. Na Ultralytics, o formato de exportação únicolitertagora abrange ambos os casos de uso que anteriormente exigiam dois formatos separados:- O antigo formato
tflite→ implantação em dispositivos móveis, embarcados e edge. - O antigo formato
tfjs→ implantação em navegador e Node.js, agora tratado pelo LiteRT.js executando o mesmo arquivo.tflite.
Se tens um arquivo
.tfliteexistente, podes carregá-lo diretamente comYOLO("model.tflite")e ele será executado através do backend LiteRT.- O antigo formato
Sim. Exporta o teu modelo para o formato LiteRT e, em seguida, executa-o num Raspberry Pi para melhorar as velocidades de inferência. Para otimização adicional, considera uma Coral Edge TPU. Para passos detalhados, consulta o nosso guia de implantação no Raspberry Pi.
Sim — em tempo de execução. Um modelo LiteRT FP32 é executado automaticamente em FP16 quando executado num delegado de GPU (WebGPU, OpenCL ou Metal), que é a abordagem oficial do LiteRT. Portanto, não precisas de uma exportação dedicada para FP16; para compressão adicional, usa a quantização INT8 com
quantize=8.Se encontrares erros ao exportar modelos YOLO para LiteRT, as soluções comuns incluem:
- Verificar plataforma: A exportação LiteRT é suportada em Linux x86_64 e macOS. Verifica se o teu ambiente corresponde.
- Verifica a compatibilidade do pacote: Certifica-te de que estás a usar uma versão compatível do Ultralytics. Consulta o nosso guia de instalação.
- Problemas de quantização: Ao usar a quantização INT8, certifica-te de que o caminho do teu dataset está especificado corretamente no parâmetro
data.
Para dicas adicionais de resolução de problemas, visita o nosso guia de Problemas Comuns.