Esporta modelli YOLO in LiteRT per il deployment su Edge e Web#
LiteRT (abbreviazione di Lite Runtime) è il runtime ad alte prestazioni di Google per l'IA su dispositivo. È la nuova generazione e il nuovo nome di TensorFlow Lite (TFLite), ed esegue lo stesso formato di modello .tflite. Con LiteRT, un singolo modello Ultralytics YOLO esportato viene distribuito su dispositivi mobili, embedded, edge e browser, coprendo tutto ciò che i precedenti formati di esportazione tflite e tfjs gestivano separatamente, ora riuniti sotto un unico ombrello.
Il formato di esportazione LiteRT ottimizza i tuoi modelli per attività come rilevamento oggetti, segmentazione, stima della posa e classificazione in modo che vengano eseguiti velocemente e offline su un'ampia gamma di dispositivi.
Il plugin Flutter ufficiale di Ultralytics YOLO esegue le esportazioni LiteRT .tflite su Android in modo nativo: inferenza con fotocamera in tempo reale, previsione su singola immagine, accelerazione GPU e download automatico del modello per tutte e sette le attività YOLO26, incluso Depth. Per i dispositivi Apple usa l'esportazione CoreML; per le NPU Qualcomm Snapdragon vedi l'integrazione Qualcomm QNN.
Esporta i modelli di classificazione su imgsz=224. Esporta i modelli di rilevamento, segmentazione, semantico, profondità, posa e OBB su
imgsz=640. Questo standard 224/640 è condiviso dalle risorse mobili ufficiali LiteRT, CoreML e QNN.
Il pacchetto NPM ufficiale di Ultralytics YOLO esegue le esportazioni LiteRT .tflite direttamente nel browser tramite LiteRT.js senza bisogno di server o Python, con inferenza da webcam in tempo reale, previsione su singola immagine e accelerazione WebGPU (con fallback automatico a CPU/WASM) in tutte e sei le attività YOLO26 (detect, segment, pose, OBB, classify, semantic). Su WebGPU è spesso ~2 volte più veloce di ONNX Runtime Web.
npm i @ultralytics/yolo @litertjs/corePerché esportare in LiteRT?#
LiteRT è un framework open-source progettato per l'inferenza su dispositivo, noto anche come edge computing. Offre agli sviluppatori gli strumenti per eseguire modelli addestrati su dispositivi mobili, embedded e IoT, computer tradizionali e, tramite LiteRT.js, direttamente nei browser web e in Node.js.
Un unico formato di modello, ogni destinazione:
- Mobile & Embedded: Android, iOS, Linux embedded e microcontrollori (MCU).
- Acceleratori edge: Compatibile con Coral Edge TPU per un'ulteriore accelerazione.
- Browser e Node.js: LiteRT.js esegue lo stesso modello
.tflitesul web con accelerazione WebGPU/WASM, eliminando la necessità di un'esportazione separata in TensorFlow.js.
Caratteristiche principali dei modelli LiteRT#
- Ottimizzazione on-device: Riduce la latenza elaborando i dati localmente, migliora la privacy non trasmettendo dati personali e minimizza la dimensione del modello per risparmiare spazio.
- Supporto multipiattaforma: Funziona su Android, iOS, Linux embedded, microcontrollori e moderni browser web.
- Accelerazione hardware: Sfrutta XNNPACK su CPU e l'accelerazione GPU tramite OpenCL, Metal e WebGPU. Il delegato GPU viene eseguito in FP16 per impostazione predefinita per una maggiore velocità.
- Quantizzazione: Supporta FP32, INT8 statico (
quantize=8, pesi int8 + attivazioni int8), INT16 statico per l'attivazione (quantize="w8a16", pesi int8 + attivazioni int16 per una maggiore precisione) e INT8 dinamico (quantize="w8a32", pesi int8 + attivazioni FP32, senza bisogno di dati di calibrazione) per comprimere i modelli e velocizzare l'inferenza con una perdita minima di precisione. - Supporto multilingue: Compatibile con Java/Kotlin, Swift, Objective-C, C++, Python e JavaScript.
Prestazioni misurate#
Hardware: Xiaomi 17 con 12 GB di memoria LPDDR5X e Android 16 / API 36. Il suo Snapdragon 8 Elite Gen 5 (SM8850) a 3 nm è dotato di una CPU Qualcomm Oryon a 8 core (2 core Prime fino a 4,6 GHz e 6 core Performance fino a 3,62 GHz), GPU Adreno e NPU Hexagon.
| Modello | Compito | dimensione (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (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 | Semantico | 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 | Classify | 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 |
- I valori di velocità sono latenze in burst per singola immagine (la media di 15 esecuzioni dopo 3 esecuzioni di riscaldamento su
bus.jpg), misurati con il plugin Flutter di Ultralytics0.6.10e le risorse standardizzatev0.6.6. L'ordine CPU/GPU è alternato tra le attività in una singola scansione sequenziale. I log nativi hanno confermato che ogni riga della CPU ha utilizzato LiteRT CPU/XNNPACK e ogni riga della GPU ha delegato l'intero grafo a LiteRT OpenCL (LITERT_CL). - L'esportazione LiteRT traccia direttamente il modello PyTorch, producendo un
.tfliteNCHW con un input float: il delegato GPU compila l'intero grafo (tutte e sette le attività vengono eseguite sulla GPU Adreno qui) ew8a32non richiede dati di calibrazione. I consumatori dovrebbero leggere le forme dei tensori e i nomi delle firme anziché dare per scontato il layout NHWC onnx2tf legacy o i nomi di outputIdentity; impacchetta i dati RGB direttamente come CHW planare o trasponili prima dell'inferenza. Le esportazioni semantiche restituiscono logit NCHW e richiedono un argmax di classe lato host. Le risorse Android ufficiali sono ospitate nella release yolo-flutter-appv0.6.6, con il record di benchmark dettagliato nella documentazione sulle prestazioni di Flutter. - I numeri corrispondenti della NPU Hexagon di Snapdragon e della CPU/GPU LiteRT sono disponibili nell'integrazione Qualcomm QNN.
- Confronta i risultati della CPU e degli acceleratori Apple nell'integrazione CoreML.
Le seguenti scansioni dei dispositivi utilizzano le stesse risorse standardizzate v0.6.6.
Google Pixel 10#
Hardware: Google Pixel 10 con 12 GB di memoria e Android 16 / API 36. Il suo Google Tensor G5 a 3 nm ha una CPU a 8 core (1 core Prime fino a 3,78 GHz, 5 core Performance fino a 3,05 GHz e 2 core Efficiency fino a 2,25 GHz), GPU PowerVR D-Series e Google TPU. I clock del core e il nome del driver della GPU sono stati letti dal dispositivo di benchmark poiché Google non li pubblica nelle specifiche collegate.
| Modello | Compito | dimensione (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (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 | Semantico | 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 | Classify | 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 di 15 chiamate predict() dopo 3 riscaldamenti su bus.jpg, utilizzando ultralytics_yolo 0.6.10 e le
risorse ufficiali v0.6.6. L'ordine CPU/GPU si alterna tra le attività in una scansione sequenziale. I log nativi hanno confermato che
ogni riga della CPU ha utilizzato LiteRT CPU/XNNPACK e ogni riga della GPU ha delegato l'intero grafo a LiteRT OpenCL (LITERT_CL).
Samsung Galaxy S26#
Hardware: Samsung Galaxy S26 (SM-S942B) con 12 GB di memoria e Android 16 / API 36. Il suo Exynos 2600 a 2 nm ha una CPU Armv9.3 a 10 core (1 core C1-Ultra fino a 3,8 GHz, 3 core C1-Pro di prestazioni fino a 3,26 GHz e 6 core C1-Pro di efficienza fino a 2,76 GHz), GPU Xclipse 960 e Samsung NPU.
| Modello | Compito | dimensione (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (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 | Semantico | 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 | Classify | 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 di 15 chiamate predict() dopo 3 riscaldamenti su bus.jpg, utilizzando ultralytics_yolo 0.6.10 e le
risorse ufficiali v0.6.6. L'ordine CPU/GPU si alterna tra le attività in una scansione sequenziale. I log nativi hanno confermato che
ogni riga della CPU ha utilizzato LiteRT CPU/XNNPACK e ogni riga della GPU ha delegato l'intero grafo a LiteRT OpenCL (LITERT_CL).
Xiaomi 17T Pro#
Hardware: Xiaomi 17T Pro (2602EPTC0G) con 12 GB di memoria LPDDR5X e Android 16 / API 36. Il suo MediaTek Dimensity 9500 (MT6993) a 3 nm ha una CPU Armv9.3 a 8 core (1 core C1-Ultra fino a 4,21 GHz, 3 core C1-Premium fino a 3,5 GHz e 4 core C1-Pro fino a 2,7 GHz), GPU Mali-G1 Ultra MC12 e MediaTek NPU 990.
| Modello | Compito | dimensione (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (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 | Semantico | 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 | Classify | 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 di 15 chiamate predict() dopo 3 riscaldamenti su bus.jpg, utilizzando ultralytics_yolo 0.6.10 e le
risorse ufficiali v0.6.6. L'ordine CPU/GPU si alterna tra le attività in una scansione sequenziale. I log nativi hanno confermato che
ogni riga della CPU ha utilizzato LiteRT CPU/XNNPACK e ogni riga della GPU ha delegato l'intero grafo a LiteRT OpenCL (LITERT_CL).
Attività supportate#
L'esportazione LiteRT supporta tutte e sette le attività di Ultralytics. La segmentazione semantica e la stima della profondità sono disponibili solo con YOLO26, l'unica famiglia che include queste teste.
Esportare in LiteRT: Convertire il tuo modello YOLO#
Puoi migliorare l'efficienza dell'esecuzione on-device e ampliare le opzioni di deployment convertendo i tuoi modelli nel formato LiteRT.
Installazione#
Per installare il pacchetto richiesto, esegui:
# Install the required package for YOLO
pip install ultralyticsPer istruzioni dettagliate e best practice, consulta la nostra guida all'installazione di Ultralytics. In caso di difficoltà, consulta la nostra guida ai problemi comuni.
L'esportazione LiteRT è attualmente supportata su Linux x86_64 e macOS. Il modello .tflite esportato viene eseguito su tutte le piattaforme supportate da LiteRT (dispositivi mobili, embedded, edge e browser).
Utilizzo#
Tutti i modelli Ultralytics YOLO supportano l'esportazione per impostazione predefinita. Il formato LiteRT supporta le modalità Export, Predict e Validate, consentendoti di esportare un modello e caricarlo per eseguire l'inferenza o convalidarne la precisione 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")Argomenti di esportazione#
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
format | str | 'litert' | Formato di destinazione per il modello esportato, che definisce la compatibilità con vari ambienti di distribuzione. |
imgsz | int o tuple | 640 | Dimensione dell'immagine desiderata per l'input del modello. Può essere un numero intero per immagini quadrate o una tupla (height, width) per dimensioni specifiche. |
quantize | int o str | None | Precisione di quantizzazione: 8 (INT8 statico, pesi int8 + attivazioni int8; richiede calibrazione data/fraction), 'w8a16' (statico, pesi int8 + attivazioni int16; richiede calibrazione data/fraction), 'w8a32' (INT8 dinamico, pesi int8 + attivazioni FP32; nessuna calibrazione necessaria) o 32/non impostato (FP32). L'FP16 non viene esportato separatamente (vedi la nota sotto). Sostituisce i flag deprecati half/int8. |
batch | int | 1 | Specifica la dimensione dell'inferenza in batch del modello esportato o il numero massimo di immagini che il modello esportato elaborerà contemporaneamente in modalità predict. |
data | str | None | YAML del dataset utilizzato per la calibrazione INT8; la classificazione richiede invece una directory di dataset o il nome di un dataset integrato. Se omesso con quantize=8 o 'w8a16', Ultralytics seleziona il dataset di calibrazione predefinito per l'attività del modello. |
device | str | None | Specifica il dispositivo per l'esportazione. L'esportazione LiteRT viene eseguita su CPU (device=cpu). |
A differenza della vecchia esportazione tflite, LiteRT non richiede un'esportazione FP16 separata. Un modello FP32 .tflite viene eseguito in mezza precisione al momento dell'esecuzione quando si utilizza un delegato GPU (WebGPU, OpenCL, Metal): questo è l'approccio ufficiale di LiteRT per l'inferenza FP16.
Per ulteriori dettagli sul processo di esportazione, visita la pagina della documentazione di Ultralytics sull'esportazione.
Distribuire i modelli YOLO LiteRT esportati#
Dopo aver esportato il tuo modello Ultralytics YOLO in LiteRT, puoi distribuirlo su tutte le piattaforme. Il modo più rapido per verificarlo localmente è il metodo YOLO("yolo26n.tflite") mostrato sopra. Per la distribuzione in altri ambienti, consulta le seguenti risorse:
Mobile & Embedded#
- Android: Una guida rapida per integrare LiteRT nelle applicazioni Android.
- iOS: Una guida per integrare e distribuire modelli LiteRT nelle applicazioni iOS.
- Linux Embedded e Raspberry Pi: Esegui modelli LiteRT su computer a scheda singola, eventualmente accelerati con una Coral Edge TPU.
- Microcontrollori: Distribuisci su MCU con solo pochi kilobyte di memoria: il runtime principale occupa circa 16 KB su un Arm Cortex-M3.
Browser & Node.js (LiteRT.js)#
- Panoramica di LiteRT.js: Esegui lo stesso modello
.tflitedirettamente nel browser con accelerazione WebGPU/WASM, eliminando il calcolo lato server e mantenendo i dati sul dispositivo dell'utente. - Esempi End-to-End: Esempi pratici e tutorial per l'implementazione di LiteRT su dispositivi mobili, edge e web.
Riepilogo#
In questa guida abbiamo spiegato come esportare i modelli Ultralytics YOLO nel formato LiteRT. Consolidando la distribuzione mobile/edge (precedentemente TFLite) e browser (precedentemente TF.js) in un unico modello .tflite, LiteRT rende i tuoi modelli YOLO più veloci, più piccoli e portabili su praticamente qualsiasi destinazione su dispositivo.
Per ulteriori dettagli, visita la documentazione ufficiale di LiteRT.
Inoltre, se sei curioso di conoscere altre integrazioni di Ultralytics YOLO, dai un'occhiata alla nostra pagina della guida alle integrazioni per molte risorse utili.
FAQ#
Come posso esportare un modello YOLO in formato LiteRT?#
Usa la libreria Ultralytics per esportare un modello YOLO in LiteRT (.tflite). Per prima cosa, installa il pacchetto:
pip install ultralyticsQuindi esporta il tuo modello:
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 classificationPer gli utenti CLI:
yolo export model=yolo26n.pt format=litert imgsz=640 # use imgsz=224 for classificationPer maggiori dettagli, visita la guida all'esportazione di Ultralytics.
Qual è la differenza tra LiteRT, TFLite e TF.js?#
LiteRT è il nuovo nome di TensorFlow Lite: stesso formato di modello .tflite, stessa linea di runtime, ribattezzato da Google. In Ultralytics, il singolo formato di esportazione litert copre ora entrambi i casi d'uso che in precedenza richiedevano due formati separati:
- Il vecchio formato
tflite→ distribuzione mobile, embedded ed edge. - Il vecchio formato
tfjs→ distribuzione su browser e Node.js, ora gestito da LiteRT.js che esegue lo stesso file.tflite.
Se hai un file .tflite esistente, puoi caricarlo direttamente con YOLO("model.tflite") e verrà eseguito tramite il backend LiteRT.
Posso eseguire modelli YOLO LiteRT su un Raspberry Pi?#
Sì. Esporta il tuo modello nel formato LiteRT, quindi eseguilo su un Raspberry Pi per migliorare le velocità di inferenza. Per un'ulteriore ottimizzazione, prendi in considerazione una Coral Edge TPU. Per i passaggi dettagliati, fai riferimento alla nostra guida alla distribuzione su Raspberry Pi.
Posso eseguire modelli YOLO nel browser con LiteRT?#
Sì. LiteRT.js esegue lo stesso modello esportato .tflite direttamente in un browser web o in un'applicazione Node.js, con accelerazione WebGPU/WASM. Questo sostituisce il precedente flusso di lavoro TensorFlow.js: non esiste un'esportazione separata per il browser, basta distribuire il tuo modello LiteRT con il runtime LiteRT.js.
LiteRT supporta l'inferenza FP16 (mezza precisione)?#
Sì, al momento dell'esecuzione. Un modello LiteRT FP32 viene eseguito automaticamente in FP16 quando viene eseguito su un delegato GPU (WebGPU, OpenCL o Metal), che è l'approccio ufficiale di LiteRT. Pertanto, non è necessaria un'esportazione dedicata in FP16; per un'ulteriore compressione, usa la quantizzazione INT8 con quantize=8.
Come risolvo i problemi comuni durante l'esportazione LiteRT?#
Se riscontri errori durante l'esportazione di modelli YOLO in LiteRT, le soluzioni comuni includono:
- Controlla la piattaforma: L'esportazione LiteRT è supportata su Linux x86_64 e macOS. Verifica che il tuo ambiente corrisponda.
- Controlla la compatibilità del pacchetto: Assicurati di utilizzare una versione compatibile di Ultralytics. Fai riferimento alla nostra guida all'installazione.
- Problemi di quantizzazione: Quando usi la quantizzazione INT8, assicurati che il percorso del dataset sia specificato correttamente nel parametro
data.
Per ulteriori suggerimenti sulla risoluzione dei problemi, visita la nostra guida ai problemi comuni.