Esporta i 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 sul dispositivo. È la generazione successiva e il nuovo nome di TensorFlow Lite (TFLite) ed esegue lo stesso formato di modello .tflite. Con LiteRT, un singolo modello Ultralytics YOLO esportato può essere distribuito su dispositivi mobili, embedded, edge e browser, coprendo tutto ciò che i precedenti formati di esportazione tflite e tfjs gestivano separatamente, ora sotto un unico ombrello.
Watch: How to Export Ultralytics YOLO26 to Google LiteRT | Deploy Vision AI on Android & iOS | Mobile AI 📱🚀
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, consentendo loro di funzionare rapidamente e offline su un'ampia gamma di dispositivi.
Il plugin Flutter ufficiale di Ultralytics YOLO esegue le esportazioni LiteRT .tflite su Android immediatamente, con inferenza in tempo reale dalla fotocamera, predizione su singola immagine, accelerazione GPU e download automatico del modello 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, 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 di Ultralytics YOLO esegue direttamente nel browser le esportazioni LiteRT .tflite tramite LiteRT.js, senza server né Python, con inferenza in tempo reale dalla webcam, predizione su singola immagine e accelerazione WebGPU (fallback automatico a CPU/WASM) per tutte e sei le attività di YOLO26 (rilevamento, segmentazione, posa, OBB, classificazione, segmentazione semantica). 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 sul dispositivo, noto anche come edge computing. Fornisce 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 formato di modello, ogni destinazione:
- Dispositivi mobili ed 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 TensorFlow.js separata.
Caratteristiche principali dei modelli LiteRT#
- Ottimizzazione sul dispositivo: riduce la latenza elaborando i dati localmente, migliora la privacy non trasmettendo dati personali e riduce al minimo le dimensioni del modello per risparmiare spazio.
- Supporto per 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 delegato GPU esegue i calcoli in FP16 per una velocità aggiuntiva.
- Quantizzazione: supporta FP32, INT8 statico (
quantize=8, pesi int8 + attivazioni int8), attivazioni INT16 statiche (quantize="w8a16", pesi int8 + attivazioni int16 per una maggiore accuratezza) e INT8 dinamico (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 accuratezza. - Ampio supporto dei 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) dispone 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 | Attività | 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 | 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 burst su singola immagine, ovvero la media di 15 esecuzioni dopo 3 esecuzioni di riscaldamento su
bus.jpg, misurate con il plugin Flutter di Ultralytics0.6.10e gli assetv0.6.6standardizzati. L'ordine CPU/GPU è stato alternato tra le attività in un'unica sequenza. I log nativi hanno confermato che ogni riga della CPU utilizzava LiteRT CPU/XNNPACK e che ogni riga della GPU delegava il grafo completo a LiteRT OpenCL (LITERT_CL). - L'esportazione LiteRT traccia direttamente il modello PyTorch, producendo un
.tfliteNCHW con input float; il delegato GPU compila l'intero grafo (qui tutte e sette le attività vengono eseguite sulla GPU Adreno) ew8a32non richiede dati di calibrazione. Chi integra il modello deve leggere le forme dei tensori e i nomi delle signature invece di presumere il layout NHWC legacy di onnx2tf o i nomi di outputIdentity; inserisci direttamente i dati RGB come CHW planare oppure trasponili prima dell'inferenza. Le esportazioni semantiche restituiscono logit NCHW e richiedono un argmax della classe sul lato host. Gli asset Android ufficiali sono ospitati nella releasev0.6.6di yolo-flutter-app, con il benchmark dettagliato nel documento sulle prestazioni di Flutter. - I risultati della NPU Hexagon Snapdragon corrispondente e quelli di LiteRT su CPU/GPU sono disponibili nell'integrazione Qualcomm QNN.
- Confronta i risultati di CPU/acceleratore Apple nell'integrazione CoreML.
Le seguenti serie di test sui dispositivi utilizzano gli stessi asset v0.6.6 standardizzati.
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 dispone di 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. Le frequenze dei core e il nome del driver GPU sono stati letti dal dispositivo usato per il benchmark, perché Google non li pubblica nelle specifiche collegate.
| Modello | Attività | 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 | 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 riscaldamenti su bus.jpg, utilizzando ultralytics_yolo, 0.6.10 e gli asset ufficiali v0.6.6. L'ordine CPU/GPU alterna tra le attività in un'unica sequenza. I log nativi hanno confermato che ogni riga della CPU utilizzava LiteRT CPU/XNNPACK e che ogni riga della GPU delegava il grafo completo 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 dispone di 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 ad alta efficienza fino a 2,76 GHz), GPU Xclipse 960 e NPU Samsung.
| Modello | Attività | 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 | 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 riscaldamenti su bus.jpg, utilizzando ultralytics_yolo, 0.6.10 e gli asset ufficiali v0.6.6. L'ordine CPU/GPU alterna tra le attività in un'unica sequenza. I log nativi hanno confermato che ogni riga della CPU utilizzava LiteRT CPU/XNNPACK e che ogni riga della GPU delegava il grafo completo 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) dispone di 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 NPU MediaTek 990.
| Modello | Attività | 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 | 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 riscaldamenti su bus.jpg, utilizzando ultralytics_yolo, 0.6.10 e gli asset ufficiali v0.6.6. L'ordine CPU/GPU alterna tra le attività in un'unica sequenza. I log nativi hanno confermato che ogni riga della CPU utilizzava LiteRT CPU/XNNPACK e che ogni riga della GPU delegava il grafo completo 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 head.
| Attività | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Rilevamento | ✅ | ✅ | ✅ |
| Segmentazione | ✅ | ✅ | ✅ |
| Semantica | ❌ | ❌ | ✅ |
| Profondità | ❌ | ❌ | ✅ |
| Classificazione | ✅ | ✅ | ✅ |
| Posa | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Esportazione in LiteRT: conversione del tuo modello YOLO#
Puoi migliorare l'efficienza dell'esecuzione sul dispositivo e ampliare le opzioni di distribuzione 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 funziona su tutte le piattaforme supportate da LiteRT (dispositivi mobili, embedded, edge e browser).
Utilizzo#
Tutti gli Ultralytics YOLO models supportano l'esportazione immediatamente. Il formato LiteRT supporta le modalità Export, Predict e Validate, quindi puoi esportare un modello e poi caricarlo per eseguire l'inferenza o verificarne localmente l'accuratezza.
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 del modello esportato, che definisce la compatibilità con diversi ambienti di distribuzione. |
imgsz | int o tuple | 640 | Dimensione desiderata dell'immagine 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 della quantizzazione: 8 (INT8 statico, pesi int8 + attivazioni int8; richiede la calibrazione data/fraction), 'w8a16' (statica, pesi int8 + attivazioni int16; richiede la calibrazione data/fraction), 'w8a32' (INT8 dinamico, pesi int8 + attivazioni FP32; non richiede calibrazione) oppure 32/non impostata (FP32). FP16 non viene esportato separatamente (vedi la nota sotto). Sostituisce i flag deprecati half/int8. |
batch | int | 1 | Specifica la dimensione del batch di inferenza del modello esportato o il numero massimo di immagini che il modello esportato elaborerà simultaneamente in modalità predict. |
data | str | None | File YAML del dataset utilizzato 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. |
device | str | None | Specifica il dispositivo per l'esportazione. L'esportazione LiteRT viene eseguita sulla CPU (device=cpu). |
A differenza dell'esportazione legacy tflite, LiteRT non richiede un'esportazione FP16 separata. Un modello FP32 .tflite viene eseguito in precisione dimezzata in fase di runtime 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 Ultralytics sull'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 la distribuzione in altri ambienti, consulta le risorse seguenti:
Dispositivi mobili e sistemi embedded#
- Android: guida introduttiva rapida per integrare LiteRT nelle applicazioni Android.
- iOS: 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 una Coral Edge TPU.
- Microcontrollori: distribuisci i modelli su MCU con solo pochi kilobyte di memoria: il runtime principale 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 e tutorial 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 nei browser (in precedenza TF.js) in un unico modello .tflite, LiteRT rende i tuoi modelli YOLO più veloci, compatti e portabili su quasi tutti i target 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, che offre numerose risorse utili.
FAQ#
Usa la libreria Ultralytics per esportare un modello YOLO in LiteRT (
.tflite). Per prima cosa, installa il pacchetto:pip install ultralyticsQuindi esporta il 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 della 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 del modello
.tflite, stessa linea evolutiva del runtime, con un nuovo marchio introdotto da Google. In Ultralytics, l'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, sistemi embedded ed edge. - Il vecchio formato
tfjs→ distribuzione nei browser e in Node.js, ora gestita da LiteRT.js, che esegue lo stesso file.tflite.
Se disponi di un file
.tfliteesistente, 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 un Raspberry Pi per migliorare la velocità dell'inferenza. Per un'ulteriore ottimizzazione, valuta l'utilizzo di una Coral Edge TPU. Per i passaggi dettagliati, consulta la nostra guida alla distribuzione su Raspberry Pi.
Sì. LiteRT.js esegue lo stesso modello
.tfliteesportato 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; è sufficiente distribuire il modello LiteRT con il runtime LiteRT.js.Sì, in fase di runtime. Un modello LiteRT FP32 viene eseguito automaticamente in FP16 quando viene eseguito su un delegato GPU (WebGPU, OpenCL o Metal), secondo l'approccio ufficiale di LiteRT. Non hai quindi bisogno di un'esportazione FP16 dedicata; per un'ulteriore compressione, usa la quantizzazione INT8 con
quantize=8.Se riscontri errori durante l'esportazione dei modelli YOLO in LiteRT, tra le soluzioni comuni ci sono:
- Controlla la piattaforma: l'esportazione LiteRT è supportata su Linux x86_64 e macOS. Verifica che il tuo ambiente corrisponda a questi requisiti.
- Controlla la compatibilità del pacchetto: assicurati di utilizzare una versione compatibile di Ultralytics. Consulta la nostra guida all'installazione.
- Problemi di quantizzazione: quando utilizzi 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.