Esporta modelli YOLO in LiteRT per la distribuzione su dispositivi edge e sul web#
LiteRT (abbreviazione di Lite Runtime) è il runtime ad alte prestazioni di Google per l'IA on-device. È la nuova generazione e il nuovo nome di TensorFlow Lite (TFLite) e utilizza lo stesso formato di modello .tflite. Con LiteRT, un singolo modello Ultralytics YOLO esportato può essere distribuito su dispositivi mobili, sistemi embedded, dispositivi edge e browser: copre tutto ciò che i precedenti formati di esportazione tflite e tfjs gestivano separatamente, riunendolo ora in un'unica soluzione.
Guarda: Come esportare Ultralytics YOLO26 in Google LiteRT | Distribuisci l'IA per la visione su Android e iOS | IA mobile 📱🚀
Il formato di esportazione LiteRT ottimizza i tuoi modelli per attività come il rilevamento degli oggetti, la segmentazione, la stima della posa e la classificazione, così possono funzionare rapidamente e offline su un'ampia gamma di dispositivi.
Il plugin ufficiale Ultralytics YOLO per Flutter esegue subito su Android le esportazioni LiteRT .tflite, offrendo inferenza in tempo reale dalla fotocamera, predizioni su singole immagini, accelerazione GPU e download automatico dei modelli per tutte e sette le attività di YOLO26, inclusa la profondità. Per i dispositivi Apple, usa l'esportazione CoreML; per le NPU Qualcomm Snapdragon, consulta l'integrazione Qualcomm QNN.
Esporta i modelli di classificazione in imgsz=224. Esporta i modelli di rilevamento, segmentazione, semantica, profondità, posa e OBB in imgsz=640. Questo standard 224/640 è condiviso dagli asset mobili ufficiali LiteRT, CoreML e QNN.
Il pacchetto NPM ufficiale Ultralytics YOLO esegue direttamente nel browser le esportazioni LiteRT .tflite tramite LiteRT.js, senza server né Python. Offre inferenza in tempo reale tramite webcam, predizioni su singole immagini e accelerazione WebGPU (con fallback automatico a CPU/WASM) per sei attività di YOLO26 (rilevamento, segmentazione, semantica, classificazione, posa, OBB). Con WebGPU è spesso ~2× più veloce di ONNX Runtime Web.
npm i @ultralytics/yolo @litertjs/corePerché esportare in LiteRT?#
LiteRT è un framework open source progettato per l'inferenza on-device, nota anche come edge computing. Offre agli sviluppatori gli strumenti per eseguire modelli addestrati su dispositivi mobili, sistemi embedded e IoT, computer tradizionali e, tramite LiteRT.js, direttamente nei browser web e in Node.js.
Un formato di modello, ogni destinazione:
- Dispositivi mobili e sistemi 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 sul web lo stesso modello
.tflitecon accelerazione WebGPU/WASM, eliminando la necessità di un'esportazione TensorFlow.js separata.
Funzionalità principali dei modelli LiteRT#
- Ottimizzazione sul dispositivo: riduce la latenza elaborando i dati localmente, migliora la privacy evitando di trasmettere dati personali e riduce al minimo le dimensioni del modello per risparmiare spazio.
- Supporto di più piattaforme: funziona su Android, iOS, Linux embedded, microcontrollori e browser web moderni.
- Accelerazione hardware: sfrutta XNNPACK sulla CPU e l'accelerazione GPU tramite OpenCL, Metal e WebGPU. Per impostazione predefinita, il delegate GPU esegue i calcoli in FP16 per offrire prestazioni ancora migliori.
- Quantizzazione: supporta FP32, INT8 statica (
quantize=8, pesi int8 + attivazioni int8), INT16 statica per le attivazioni (quantize="w8a16", pesi int8 + attivazioni int16 per una maggiore precisione) e INT8 dinamica (quantize="w8a32", pesi int8 + attivazioni FP32, senza necessità di dati di calibrazione) per comprimere i modelli e velocizzare l'inferenza con una perdita minima di precisione. - Supporto per diversi linguaggi: 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 a 3 nm (SM8850) integra una CPU Qualcomm Oryon a 8 core (2 core Prime fino a 4.6 GHz e 6 core Performance fino a 3.62 GHz), una GPU Adreno e una NPU Hexagon.
| Modello | Attività | dimensione (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Rilevamento | 640 | 52.2 1.8 / 48.1 / 2.4 | 15.8 2.3 / 8.9 / 4.6 |
| YOLO26n-seg | Segmentazione | 640 | 73.4 1.8 / 65.6 / 6.0 | 33.2 1.8 / 23.8 / 7.6 |
| YOLO26n-sem | Semantica | 640 | 61.2 1.8 / 51.1 / 8.3 | 34.2 1.8 / 24.0 / 8.3 |
| YOLO26n-depth | Profondità | 640 | 124.4 1.9 / 115.1 / 7.4 | 23.0 1.8 / 13.5 / 7.7 |
| YOLO26n-cls | Classificazione | 224 | 4.4 0.4 / 4.0 / 0.0 | 3.1 0.8 / 2.1 / 0.2 |
| YOLO26n-pose | Posa | 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 medie di burst su una singola immagine: la media di 15 esecuzioni dopo 3 esecuzioni di riscaldamento su
bus.jpg, misurate con il plugin Flutter di Ultralytics0.6.10e gli asset standardizzativ0.6.6. L'ordine CPU/GPU è stato alternato tra le attività in un'unica sequenza. I log nativi hanno confermato che ogni riga CPU usava LiteRT CPU/XNNPACK e ogni riga GPU delegava l'intero grafo a LiteRT OpenCL (LITERT_CL). - L'esportazione LiteRT traccia direttamente il modello PyTorch, generando un
.tfliteNCHW con input float: il delegate GPU compila l'intero grafo (qui tutte e sette le attività vengono eseguite sulla GPU Adreno) ew8a32non richiede dati di calibrazione. Chi utilizza il modello dovrebbe leggere le forme dei tensori e i nomi delle signature anziché dare per scontato il layout NHWC legacy di onnx2tf o i nomi di outputIdentity; i dati RGB vanno organizzati direttamente in CHW planare o trasposti prima dell'inferenza. Le esportazioni semantiche restituiscono logits NCHW e richiedono un argmax delle classi sul lato host. Gli asset Android ufficiali sono disponibili nella releasev0.6.6di yolo-flutter-app; il documento sulle prestazioni di Flutter contiene i dettagli completi del benchmark. - I valori corrispondenti per la NPU Hexagon Snapdragon e per CPU/GPU LiteRT sono disponibili nell'integrazione Qualcomm QNN.
- Confronta i risultati di CPU/acceleratore Apple nell'integrazione CoreML.
Le seguenti prove su dispositivi utilizzano gli stessi asset standardizzati 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 integra 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), una GPU PowerVR D-Series e una TPU Google. Le frequenze dei core e il nome del driver GPU sono stati rilevati sul dispositivo di benchmark, perché Google non li pubblica nelle specifiche collegate.
| Modello | Attività | dimensione (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Rilevamento | 640 | 53.3 1.5 / 50.2 / 1.6 | 45.5 3.8 / 37.7 / 4.0 |
| YOLO26n-seg | Segmentazione | 640 | 87.7 1.8 / 78.5 / 7.5 | 50.9 3.0 / 36.9 / 10.9 |
| YOLO26n-sem | Semantica | 640 | 68.6 1.5 / 59.0 / 8.0 | 71.6 1.5 / 59.5 / 10.6 |
| YOLO26n-depth | Profondità | 640 | 120.3 1.5 / 112.5 / 6.3 | 52.5 2.0 / 37.5 / 13.0 |
| YOLO26n-cls | Classificazione | 224 | 4.0 0.3 / 3.4 / 0.2 | 17.6 0.9 / 16.7 / 0.1 |
| YOLO26n-pose | Posa | 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 esecuzioni di riscaldamento su bus.jpg, usando ultralytics_yolo 0.6.10 e gli asset ufficiali v0.6.6. L'ordine CPU/GPU si alterna tra le attività in un'unica sequenza. I log nativi hanno confermato che ogni riga CPU usava LiteRT CPU/XNNPACK e ogni riga GPU delegava 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 integra una CPU Armv9.3 a 10 core (1 core C1-Ultra fino a 3.8 GHz, 3 core C1-Pro ad alte prestazioni fino a 3.26 GHz e 6 core C1-Pro a basso consumo fino a 2.76 GHz), una GPU Xclipse 960 e una NPU Samsung.
| Modello | Attività | dimensione (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Rilevamento | 640 | 36.7 1.3 / 33.8 / 1.7 | 16.4 1.4 / 12.3 / 2.6 |
| YOLO26n-seg | Segmentazione | 640 | 54.6 1.2 / 48.0 / 5.3 | 32.8 1.3 / 24.5 / 7.0 |
| YOLO26n-sem | Semantica | 640 | 47.8 1.2 / 38.4 / 8.1 | 34.2 1.3 / 24.9 / 8.0 |
| YOLO26n-depth | Profondità | 640 | 92.9 1.2 / 84.8 / 6.9 | 33.5 1.3 / 22.4 / 9.8 |
| YOLO26n-cls | Classificazione | 224 | 2.7 0.2 / 2.3 / 0.2 | 2.6 0.2 / 2.4 / 0.0 |
| YOLO26n-pose | Posa | 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 esecuzioni di riscaldamento su bus.jpg, usando ultralytics_yolo 0.6.10 e gli asset ufficiali v0.6.6. L'ordine CPU/GPU si alterna tra le attività in un'unica sequenza. I log nativi hanno confermato che ogni riga CPU usava LiteRT CPU/XNNPACK e ogni riga GPU delegava 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 a 3 nm (MT6993) integra 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), una GPU Mali-G1 Ultra MC12 e una NPU MediaTek 990.
| Modello | Attività | dimensione (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Rilevamento | 640 | 45.4 1.3 / 42.1 / 2.0 | 26.6 1.9 / 22.0 / 2.7 |
| YOLO26n-seg | Segmentazione | 640 | 126.2 2.6 / 113.9 / 9.7 | 46.7 2.6 / 33.3 / 10.8 |
| YOLO26n-sem | Semantica | 640 | 117.9 2.6 / 98.8 / 16.5 | 74.3 2.6 / 54.7 / 17.0 |
| YOLO26n-depth | Profondità | 640 | 182.4 2.5 / 167.6 / 12.3 | 47.8 2.5 / 32.3 / 12.9 |
| YOLO26n-cls | Classificazione | 224 | 6.2 0.4 / 5.3 / 0.4 | 7.4 0.4 / 6.9 / 0.1 |
| YOLO26n-pose | Posa | 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 esecuzioni di riscaldamento su bus.jpg, usando ultralytics_yolo 0.6.10 e gli asset ufficiali v0.6.6. L'ordine CPU/GPU si alterna tra le attività in un'unica sequenza. I log nativi hanno confermato che ogni riga CPU usava LiteRT CPU/XNNPACK e ogni riga GPU delegava l'intero grafo a LiteRT OpenCL (LITERT_CL).
Attività supportate#
L'esportazione LiteRT supporta tutte e sette le attività Ultralytics. La segmentazione semantica e la stima della profondità sono disponibili solo con YOLO26, l'unica famiglia che include queste head.
| Attività | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Rilevamento | ✅ | ✅ | ✅ |
| Segmentazione | ✅ | ✅ | ✅ |
| Semantica | ❌ | ❌ | ✅ |
| Profondità | ❌ | ❌ | ✅ |
| Classificazione | ✅ | ✅ | ✅ |
| Stima della posa | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Esportazione in LiteRT: convertire il tuo modello YOLO#
Puoi migliorare l'efficienza dell'esecuzione sul dispositivo 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. Se riscontri difficoltà, consulta la nostra guida ai problemi comuni.
L'esportazione LiteRT è attualmente supportata su Linux x86_64 e macOS. Il modello .tflite esportato può essere eseguito su tutte le piattaforme supportate da LiteRT (dispositivi mobili, embedded, edge e browser).
Utilizzo#
Tutti i modelli Ultralytics YOLO supportano l'esportazione senza configurazioni aggiuntive. Il formato LiteRT supporta le modalità Export, Predict e Validate: puoi esportare un modello e poi caricarlo per eseguire inferenze o convalidarne localmente la precisione.
from ultralytics import YOLO
# Carica un modello YOLO26
model = YOLO("yolo26n.pt")
# Esporta il modello nel formato LiteRT
model.export(format="litert", imgsz=640) # crea 'yolo26n.tflite'; usa imgsz=224 per la classificazionefrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# INT8 dinamica: pesi int8, attivazioni FP32: non sono necessari dati di calibrazione
model.export(format="litert", quantize="w8a32", imgsz=640) # crea 'yolo26n_w8a32.tflite'
# INT8 statica: pesi int8 + attivazioni int8: richiede dati di calibrazione
model.export(format="litert", quantize=8, data="coco8.yaml", imgsz=640) # crea 'yolo26n_int8.tflite'
# w8a16 statica: pesi int8 + attivazioni int16 (maggiore precisione): richiede dati di calibrazione
model.export(format="litert", quantize="w8a16", data="coco8.yaml", imgsz=640) # crea 'yolo26n_w8a16.tflite'from ultralytics import YOLO
# Carica il modello LiteRT esportato
model = YOLO("yolo26n.tflite")
# Esegui l'inferenza
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Carica il modello LiteRT esportato
model = YOLO("yolo26n.tflite")
# # Convalida l'accuratezza sul dataset COCO8
metrics = model.val(data="coco8.yaml")Argomenti di esportazione#
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
format | str | 'litert' | Formato di destinazione del modello esportato, che definisce la compatibilità con i vari ambienti di distribuzione. |
imgsz | int o tuple | 640 | Dimensione dell'immagine desiderata per l'input del modello. Può essere un intero per immagini quadrate o una tupla (height, width) per dimensioni specifiche. |
quantize | int o str | None | Precisione della quantizzazione: 8 (INT8 statica, pesi int8 + attivazioni int8; richiede la calibrazione data/fraction), 'w8a16' (statica, pesi int8 + attivazioni int16; richiede la calibrazione data/fraction), 'w8a32' (INT8 dinamica, pesi int8 + attivazioni FP32; non richiede calibrazione) oppure 32/non impostato (FP32). FP16 non viene esportato separatamente (vedi nota sotto). Sostituisce i flag deprecati half/int8. |
batch | int | 1 | Specifica la dimensione batch per l'inferenza del modello esportato o il numero massimo di immagini che il modello esportato elaborerà contemporaneamente in modalità predict. |
data | str | None | File YAML del dataset usato per la calibrazione INT8; per la classificazione si usa invece una directory del 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. |
fraction | float, int o list | 1.0 | Sottoinsieme di calibrazione espresso come rapporto, numero di immagini o rapporti/conteggi [train, val, test]. Gli elenchi di due elementi lasciano completo test, mentre 0 lo esclude. |
device | str | None | Specifica il dispositivo per l'esportazione. L'esportazione LiteRT viene eseguita sulla CPU (device=cpu). |
A differenza della precedente esportazione tflite, LiteRT non richiede un'esportazione FP16 separata. Un modello .tflite FP32 viene eseguito in precisione dimezzata in fase di esecuzione quando si usa un delegate GPU (WebGPU, OpenCL, Metal): questo è l'approccio ufficiale di LiteRT all'inferenza FP16.
Per ulteriori dettagli sul processo di esportazione, visita la pagina della documentazione Ultralytics dedicata all'esportazione.
Distribuzione dei modelli YOLO LiteRT esportati#
Dopo aver esportato il tuo modello Ultralytics YOLO in LiteRT, puoi distribuirlo su diverse piattaforme. Il modo più rapido per verificarlo localmente è il metodo YOLO("yolo26n.tflite") mostrato sopra. Per distribuirlo in altri ambienti, consulta le risorse seguenti:
Mobile e sistemi embedded#
- Android: una guida introduttiva 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, con accelerazione opzionale tramite Coral Edge TPU.
- Microcontrollori: distribuisci su MCU con solo pochi kilobyte di memoria: il runtime di base occupa circa 16 KB su un Arm Cortex-M3.
Browser e Node.js (LiteRT.js)#
- Panoramica di LiteRT.js: esegui lo stesso modello
.tflitedirettamente nel browser con accelerazione WebGPU/WASM, eliminando i calcoli lato server e mantenendo i dati sul dispositivo dell'utente. - Esempi end-to-end: esempi pratici ed esercitazioni per implementare LiteRT su dispositivi mobili, edge e web.
Riepilogo#
In questa guida abbiamo illustrato come esportare i modelli Ultralytics YOLO nel formato LiteRT. Riunendo la distribuzione su dispositivi mobili/edge (in precedenza TFLite) e nel browser (in precedenza TF.js) in un unico modello .tflite, LiteRT rende i tuoi modelli YOLO più veloci, più piccoli e portabili praticamente su qualsiasi destinazione on-device.
Per ulteriori dettagli, visita la documentazione ufficiale di LiteRT.
Inoltre, se vuoi conoscere altre integrazioni Ultralytics YOLO, consulta la nostra pagina della guida alle integrazioni, ricca di risorse utili.
Domande frequenti#
Usa la libreria Ultralytics per esportare un modello YOLO in LiteRT (
.tflite). Per prima cosa, installa il pacchetto:pip install ultralyticsPoi esporta il modello:
from ultralytics import YOLO # Carica un modello YOLO26 model = YOLO("yolo26n.pt") # Esporta il modello nel formato LiteRT model.export(format="litert", imgsz=640) # usa imgsz=224 per la classificazionePer chi usa la CLI:
yolo export model=yolo26n.pt format=litert imgsz=640 # use imgsz=224 for classificationPer ulteriori dettagli, visita la guida all'esportazione di Ultralytics.
LiteRT è il nuovo nome di TensorFlow Lite: stesso formato di modello
.tflite, stessa evoluzione del runtime, nuovo marchio scelto da Google. In Ultralytics, un unico formato di esportazionelitertora copre entrambi i casi d'uso che in precedenza richiedevano due formati separati:- Il vecchio formato
tflite→ distribuzione su dispositivi mobili, embedded ed edge. - Il vecchio formato
tfjs→ distribuzione su browser e Node.js, ora gestita da LiteRT.js, che esegue lo stesso file.tflite.
Se hai già un file
.tflite, puoi caricarlo direttamente conYOLO("model.tflite")e verrà eseguito tramite il backend LiteRT.- Il vecchio formato
Sì. Esporta il modello nel formato LiteRT, quindi eseguilo su Raspberry Pi per migliorare la velocità di inferenza. Per un'ulteriore ottimizzazione, valuta l'uso di Coral Edge TPU. Per i passaggi dettagliati, consulta la nostra guida alla distribuzione su Raspberry Pi.
Sì. LiteRT.js esegue lo stesso modello esportato
.tflitedirettamente in un browser web o in un'applicazione Node.js, con accelerazione WebGPU/WASM. Sostituisce il precedente flusso di lavoro TensorFlow.js: non serve un'esportazione separata per il browser, basta distribuire il modello LiteRT con il runtime LiteRT.js.Sì, in fase di esecuzione. Un modello LiteRT FP32 viene eseguito automaticamente in FP16 quando utilizza un delegato GPU (WebGPU, OpenCL o Metal), secondo l'approccio ufficiale di LiteRT. Non serve quindi un'esportazione FP16 dedicata; per un'ulteriore compressione, usa la quantizzazione INT8 con
quantize=8.Se riscontri errori durante l'esportazione di modelli YOLO in LiteRT, ecco alcune soluzioni comuni:
- Verifica la piattaforma: l'esportazione LiteRT è supportata su Linux x86_64 e macOS. Verifica che il tuo ambiente sia compatibile.
- Verifica la compatibilità del pacchetto: assicurati di usare una versione compatibile di Ultralytics. Consulta la nostra guida all'installazione.
- Problemi di quantizzazione: quando usi la quantizzazione INT8, assicurati di specificare correttamente il percorso del dataset nel parametro
data.
Per altri suggerimenti sulla risoluzione dei problemi, visita la nostra guida ai problemi comuni.