YOLOv10: rilevamento di oggetti end-to-end in tempo reale#
YOLOv10, rilasciato a maggio 2024 e basato sul pacchetto Python di Ultralytics, sviluppato da ricercatori della Tsinghua University, introduce un nuovo approccio al rilevamento di oggetti in tempo reale, affrontando sia le carenze del post-processing sia quelle dell'architettura presenti nelle versioni precedenti di YOLO. Eliminando la soppressione dei non massimi (NMS) e ottimizzando vari componenti del modello, YOLOv10 ha raggiunto prestazioni eccellenti con un overhead computazionale significativamente ridotto al momento del rilascio. Il suo design end-to-end senza NMS ha aperto la strada a un approccio ulteriormente sviluppato in YOLO26.

Watch: How to Train YOLOv10 on SKU-110k Dataset using Ultralytics | Retail Dataset
Panoramica#
Il rilevamento di oggetti in tempo reale mira a prevedere con precisione le categorie e le posizioni degli oggetti nelle immagini con una bassa latenza. La serie YOLO è stata all'avanguardia in questa ricerca grazie al suo equilibrio tra prestazioni ed efficienza. Tuttavia, la dipendenza da NMS e le inefficienze architetturali hanno ostacolato prestazioni ottimali. YOLOv10 affronta questi problemi introducendo le assegnazioni duali coerenti per l'addestramento senza NMS e una strategia di progettazione olistica del modello guidata da efficienza e accuratezza.
Architettura#
L'architettura di YOLOv10 si basa sui punti di forza dei precedenti modelli YOLO, introducendo al contempo diverse innovazioni chiave. L'architettura del modello è costituita dai seguenti componenti:
- Backbone: responsabile dell'estrazione delle caratteristiche, il backbone di YOLOv10 utilizza una versione migliorata di CSPNet (rete parziale tra fasi) per migliorare il flusso del gradiente e ridurre la ridondanza computazionale.
- Neck: il neck è progettato per aggregare caratteristiche provenienti da scale diverse e passarle alla head. Include layer PAN (rete di aggregazione dei percorsi) per un'efficace fusione multiscala delle caratteristiche.
- Head one-to-many: genera più predizioni per oggetto durante l'addestramento, fornendo segnali di supervisione ricchi e migliorando l'accuratezza dell'apprendimento.
- Head one-to-one: genera una singola predizione migliore per oggetto durante l'inferenza, eliminando la necessità di NMS e riducendo così la latenza e migliorando l'efficienza.
Funzionalità principali#
- Addestramento senza NMS: utilizza assegnazioni duali coerenti per eliminare la necessità di NMS, riducendo la latenza dell'inferenza.
- Holistic Model Design: Ottimizzazione completa di vari componenti sia dal punto di vista dell'efficienza che della precisione, incluse teste di classificazione leggere, downsampling disaccoppiato spaziale-canale e progettazione a blocchi guidata dal rango.
- Funzionalità avanzate del modello: incorpora convoluzioni con kernel di grandi dimensioni e moduli di autoattenzione parziale per migliorare le prestazioni senza costi computazionali significativi.
Varianti del modello#
YOLOv10 è disponibile in diverse dimensioni di modello per soddisfare esigenze applicative differenti:
- YOLOv10n: versione Nano per ambienti con risorse estremamente limitate.
- YOLOv10s: versione Small che bilancia velocità e accuratezza.
- YOLOv10m: versione Medium per uso generico.
- YOLOv10b: versione bilanciata con maggiore ampiezza per una più alta accuratezza.
- YOLOv10l: versione Large per una maggiore accuratezza, a fronte di un aumento delle risorse computazionali.
- YOLOv10x: versione Extra-large per la massima accuratezza e le massime prestazioni.
Prestazioni#
YOLOv10 supera le versioni precedenti di YOLO e altri modelli all'avanguardia in termini di accuratezza ed efficienza. Ad esempio, YOLOv10s è 1,8 volte più veloce di RT-DETR-R18 con un AP simile sul dataset COCO, mentre YOLOv10b ha una latenza inferiore del 46% e il 25% di parametri in meno rispetto a YOLOv9-C, con le stesse prestazioni.
Latenza misurata con TensorRT FP16 su GPU T4.
| Modello | Dimensione dell'input | APval | FLOPs (G) | Latenza (ms) |
|---|---|---|---|---|
| [YOLOv10n][1] | 640 | 38.5 | 6.7 | 1.84 |
| [YOLOv10s][2] | 640 | 46.3 | 21.6 | 2.49 |
| [YOLOv10m][3] | 640 | 51.1 | 59.1 | 4.74 |
| [YOLOv10b][4] | 640 | 52.5 | 92.0 | 5.74 |
| [YOLOv10l][5] | 640 | 53.2 | 120.3 | 7.28 |
| [YOLOv10x][6] | 640 | 54.4 | 160.4 | 10.70 |
Metodologia#
Assegnazioni duali coerenti per l'addestramento senza NMS#
YOLOv10 impiega assegnazioni di etichette duali, combinando strategie uno-a-molti e uno-a-uno durante l'addestramento per garantire una supervisione ricca e un efficiente deployment end-to-end. La previsione e la validazione di Ultralytics utilizzano per impostazione predefinita la testa uno-a-molti con NMS; imposta nms=False per selezionare la testa senza NMS. La metrica di corrispondenza coerente allinea la supervisione tra entrambe le strategie, migliorando la qualità delle previsioni durante la inference.
Progettazione del modello guidata olisticamente da efficienza e accuratezza#
Miglioramenti dell'efficienza#
- Head di classificazione leggera: riduce l'overhead computazionale della head di classificazione utilizzando convoluzioni separabili in profondità.
- Spatial-Channel Decoupled Downsampling: Disaccoppia la riduzione spaziale e la modulazione dei canali per ridurre al minimo la perdita di informazioni e il costo computazionale.
- Progettazione dei blocchi guidata dal rango: adatta la progettazione dei blocchi in base alla ridondanza intrinseca degli stage, garantendo un utilizzo ottimale dei parametri.
Miglioramenti dell'accuratezza#
- Convoluzione con kernel di grandi dimensioni: amplia il campo recettivo per migliorare la capacità di estrazione delle caratteristiche.
- Autoattenzione parziale (PSA): incorpora moduli di autoattenzione per migliorare l'apprendimento delle rappresentazioni globali con un overhead minimo.
Esperimenti e risultati#
YOLOv10 è stato ampiamente testato su benchmark standard come COCO, dimostrando prestazioni ed efficienza superiori. Il modello raggiunge risultati all'avanguardia nelle diverse varianti, mostrando miglioramenti significativi in termini di latenza e accuratezza rispetto alle versioni precedenti e ad altri detector contemporanei.
Confronti#

Rispetto agli altri detector all'avanguardia:
- YOLOv10s / x sono 1,8× / 1,3× più veloci di RT-DETR-R18 / R101 con un'accuratezza simile
- YOLOv10b ha il 25% di parametri in meno e una latenza inferiore del 46% rispetto a YOLOv9-C, con la stessa accuratezza
- YOLOv10l / x superano YOLOv8l / x di 0,3 AP / 0,5 AP con 1,8× / 2,3× parametri in meno
Le figure riportate di seguito sono quelle indicate nel paper di YOLOv10, misurate secondo il relativo protocollo, quindi non sono direttamente comparabili con i valori riportati nelle pagine dei modelli Ultralytics:
| Modello | Parametri (M) | FLOPs (G) | mAPval 50-95 | Latenza (ms) | Latenza prioritaria (ms) |
|---|---|---|---|---|---|
| YOLOv6-3.0-N | 4.7 | 11.4 | 37.0 | 2.69 | 1.76 |
| Gold-YOLO-N | 5.6 | 12.1 | 39.6 | 2.92 | 1.82 |
| YOLOv8n | 3.2 | 8.7 | 37.3 | 6.16 | 1.77 |
| YOLOv10n | 2.3 | 6.7 | 39.5 | 1.84 | 1.79 |
| YOLOv6-3.0-S | 18.5 | 45.3 | 44.3 | 3.42 | 2.35 |
| Gold-YOLO-S | 21.5 | 46.0 | 45.4 | 3.82 | 2.73 |
| YOLOv8s | 11.2 | 28.6 | 44.9 | 7.07 | 2.33 |
| YOLOv10s | 7.2 | 21.6 | 46.8 | 2.49 | 2.39 |
| RT-DETR-R18 | 20.0 | 60.0 | 46.5 | 4.58 | 4.49 |
| YOLOv6-3.0-M | 34.9 | 85.8 | 49.1 | 5.63 | 4.56 |
| Gold-YOLO-M | 41.3 | 87.5 | 49.8 | 6.38 | 5.45 |
| YOLOv8m | 25.9 | 78.9 | 50.6 | 9.50 | 5.09 |
| YOLOv10m | 15.4 | 59.1 | 51.3 | 4.74 | 4.63 |
| YOLOv6-3.0-L | 59.6 | 150.7 | 51.8 | 9.02 | 7.90 |
| Gold-YOLO-L | 75.1 | 151.7 | 51.8 | 10.65 | 9.78 |
| YOLOv8l | 43.7 | 165.2 | 52.9 | 12.39 | 8.06 |
| RT-DETR-R50 | 42.0 | 136.0 | 53.1 | 9.20 | 9.07 |
| YOLOv10l | 24.4 | 120.3 | 53.4 | 7.28 | 7.21 |
| YOLOv8x | 68.2 | 257.8 | 53.9 | 16.86 | 12.83 |
| RT-DETR-R101 | 76.0 | 259.0 | 54.3 | 13.71 | 13.58 |
| YOLOv10x | 29.5 | 160.4 | 54.4 | 10.70 | 10.60 |
I valori di Params e FLOPs si riferiscono al modello fuso dopo model.fuse(), che unisce i layer Conv e BatchNorm e rimuove la head di rilevamento ausiliaria one-to-many. I checkpoint preaddestrati mantengono l'architettura completa di addestramento e possono mostrare conteggi più elevati.
Esempi di utilizzo#
Per prevedere nuove immagini con YOLOv10. I modelli possono anche essere addestrati su GPU cloud tramite Ultralytics Platform:
from ultralytics import YOLO
# Load a pretrained YOLOv10n model
model = YOLO("yolov10n.pt")
# Perform object detection on an image
results = model("image.jpg")
# Display the results
results[0].show()Per addestrare YOLOv10 su un dataset personalizzato:
from ultralytics import YOLO
# Load YOLOv10n model from scratch
model = YOLO("yolov10n.yaml")
# Train the model
model.train(data="coco8.yaml", epochs=100, imgsz=640)Attività e modalità supportate#
La serie di modelli YOLOv10 offre una gamma di modelli, ciascuno ottimizzato per il rilevamento di oggetti ad alte prestazioni. Questi modelli soddisfano esigenze computazionali e requisiti di accuratezza diversi, rendendoli versatili per un'ampia varietà di applicazioni.
| Modello | Nomi dei file | Attività | Addestramento | Convalida | Inferenza | Esportazione |
|---|---|---|---|---|---|---|
| YOLOv10 | yolov10n.pt yolov10s.pt yolov10m.pt yolov10b.pt yolov10l.pt yolov10x.pt | Rilevamento degli oggetti | ✅ | ✅ | ✅ | ✅ |
Esportazione di YOLOv10#
A causa delle nuove operazioni introdotte con YOLOv10, attualmente non sono supportati tutti i formati di esportazione forniti da Ultralytics. La tabella seguente indica quali formati sono stati convertiti correttamente utilizzando Ultralytics per YOLOv10. Sentiti libero di aprire una pull request se riesci a fornire una modifica al contributo per aggiungere il supporto all'esportazione di altri formati per YOLOv10.
| Formato di esportazione | Supporto all'esportazione | Inferenza del modello esportato | Note |
|---|---|---|---|
| TorchScript | ✅ | ✅ | Formato standard del modello PyTorch. |
| ONNX | ✅ | ✅ | Ampiamente supportato per la distribuzione. |
| OpenVINO | ✅ | ✅ | Ottimizzato per hardware Intel. |
| TensorRT | ✅ | ✅ | Ottimizzato per GPU NVIDIA. |
| CoreML | ✅ | ✅ | Limitato ai dispositivi Apple. |
| TF SavedModel | ✅ | ✅ | Formato standard dei modelli di TensorFlow. |
| TF GraphDef | ✅ | ✅ | Formato legacy di TensorFlow. |
| LiteRT | ✅ | ✅ | Ottimizzato per dispositivi mobili, sistemi embedded e browser (LiteRT.js). |
| TF Edge TPU | ✅ | ✅ | Specifico per i dispositivi Edge TPU di Google. |
| PaddlePaddle | ❌ | ❌ | Popolare in Cina; supporto globale più limitato. |
| NCNN | ✅ | ❌ | L'operatore torch.topk non è supportato dal runtime NCNN. |
Conclusioni#
YOLOv10 ha stabilito un nuovo standard nel rilevamento degli oggetti in tempo reale al momento del suo rilascio, affrontando i limiti delle versioni precedenti di YOLO e incorporando strategie di progettazione innovative. Il suo approccio senza NMS ha aperto la strada al rilevamento degli oggetti end-to-end nella famiglia YOLO. Per scoprire l'ultimo modello Ultralytics, con prestazioni migliorate e inferenza senza NMS, consulta YOLO26.
Citazioni e ringraziamenti#
Desideriamo ringraziare gli autori di YOLOv10 della Tsinghua University per la loro vasta attività di ricerca e per i loro importanti contributi al framework Ultralytics:
@inproceedings{wang2024yolov10,
title={YOLOv10: Real-Time End-to-End Object Detection},
author={Wang, Ao and Chen, Hui and Liu, Lihao and Chen, Kai and Lin, Zijia and Han, Jungong and Ding, Guiguang},
booktitle={Advances in Neural Information Processing Systems},
doi = {10.52202/079017-3429},
url = {https://proceedings.neurips.cc/paper_files/paper/2024/file/c34ddd05eb089991f06f3c5dc36836e0-Paper-Conference.pdf},
volume={37},
pages={107984--108011},
year={2024}
}Per informazioni dettagliate sull'implementazione, sulle innovazioni architetturali e sui risultati sperimentali, consulta il documento di ricerca di YOLOv10 e il repository GitHub del team della Tsinghua University.
FAQ#
YOLOv10, sviluppato dai ricercatori della Tsinghua University, introduce diverse innovazioni chiave nel rilevamento degli oggetti in tempo reale. Elimina la necessità della soppressione dei non-massimi (NMS) utilizzando assegnazioni duali coerenti durante l'addestramento e componenti del modello ottimizzati, per ottenere prestazioni superiori con un minore overhead computazionale. Per ulteriori dettagli sulla sua architettura e sulle funzionalità principali, consulta la sezione Panoramica di YOLOv10.
Per eseguire facilmente l'inferenza, puoi usare la libreria Ultralytics YOLO per Python o l'interfaccia a riga di comando (CLI). Di seguito sono riportati esempi di predizione su nuove immagini usando YOLOv10:
Esempiofrom ultralytics import YOLO # Load the pretrained YOLOv10n model model = YOLO("yolov10n.pt") results = model("image.jpg") results[0].show()Per altri esempi di utilizzo, visita la sezione Esempi di utilizzo.
YOLOv10 offre diverse varianti del modello per adattarsi a vari casi d'uso:
- YOLOv10n: Adatto ad ambienti con risorse estremamente limitate
- YOLOv10s: Bilancia velocità e accuratezza
- YOLOv10m: Uso generico
- YOLOv10b: Maggiore accuratezza con una larghezza aumentata
- YOLOv10l: Elevata accuratezza a discapito delle risorse computazionali
- YOLOv10x: Massima accuratezza e prestazioni
Ogni variante è progettata per esigenze computazionali e requisiti di accuratezza diversi, risultando così versatile per una vasta gamma di applicazioni. Per ulteriori informazioni, esplora la sezione Varianti del modello.
YOLOv10 si allena con doppi assegnamenti coerenti in modo che la sua testa uno-a-uno produca un'unica previsione migliore per oggetto, eliminando la necessità della soppressione dei massimi non locali (NMS) in fase di inferenza. La previsione e la convalida di Ultralytics utilizzano per impostazione predefinita la testa uno-a-molti con NMS; imposta
nms=Falseper selezionare la testa senza NMS ed eliminare il passaggio NMS. Per una spiegazione dettagliata, consulta la sezione Consistent Dual Assignments for NMS-Free Training.YOLOv10 supporta diversi formati di esportazione, tra cui TorchScript, ONNX, OpenVINO e TensorRT. Tuttavia, a causa delle sue nuove operazioni, al momento non tutti i formati di esportazione forniti da Ultralytics sono supportati da YOLOv10. Per informazioni dettagliate sui formati supportati e sulle istruzioni per l'esportazione, visita la sezione Esportazione di YOLOv10.
YOLOv10 supera le versioni precedenti di YOLO e altri modelli all'avanguardia sia in termini di accuratezza sia di efficienza. Ad esempio, YOLOv10s è 1,8 volte più veloce di RT-DETR-R18 con un AP simile sul dataset COCO. YOLOv10b mostra una latenza inferiore del 46% e il 25% di parametri in meno rispetto a YOLOv9-C, a parità di prestazioni. Puoi trovare benchmark dettagliati nella sezione Confronti.