YOLOv10: Rilevamento oggetti end-to-end in tempo reale#
YOLOv10, rilasciato a maggio 2024 e basato sul pacchetto Python di Ultralytics dai ricercatori della Tsinghua University, introduce un nuovo approccio al rilevamento di oggetti in tempo reale, affrontando sia le carenze di post-elaborazione che quelle di architettura del modello riscontrate nelle versioni precedenti di YOLO. Eliminando la soppressione dei non massimi (NMS) e ottimizzando vari componenti del modello, YOLOv10 ha ottenuto prestazioni eccellenti con un sovraccarico computazionale significativamente ridotto al momento del suo rilascio. Il suo design end-to-end senza NMS ha aperto la strada a un approccio che è stato 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 categorie e posizioni degli oggetti nelle immagini con bassa latenza. La serie YOLO è stata all'avanguardia in questa ricerca grazie al suo bilanciamento tra prestazioni ed efficienza. Tuttavia, la dipendenza da NMS e le inefficienze architetturali hanno ostacolato le prestazioni ottimali. YOLOv10 affronta questi problemi introducendo assegnazioni duali coerenti per l'addestramento senza NMS e una strategia di progettazione del modello olistica basata sull'efficienza e l'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 è composta dai seguenti componenti:
- Backbone: Responsabile dell'estrazione delle caratteristiche, il backbone in YOLOv10 utilizza una versione migliorata di CSPNet (Cross Stage Partial Network) per migliorare il flusso del gradiente e ridurre la ridondanza computazionale.
- Neck: Il neck è progettato per aggregare le feature da diverse scale e passarle alla head. Include strati PAN (Path Aggregation Network) per un'efficace fusione multiscala delle feature.
- One-to-Many Head: Genera previsioni multiple per oggetto durante l'addestramento per fornire ricchi segnali di supervisione e migliorare l'accuratezza dell'apprendimento.
- One-to-One Head: Genera un'unica previsione ottimale per oggetto durante l'inferenza per eliminare la necessità di NMS, riducendo così la latenza e migliorando l'efficienza.
Caratteristiche principali#
- Addestramento senza NMS: Utilizza assegnazioni duali coerenti per eliminare la necessità di NMS, riducendo la latenza di inferenza.
- Design olistico del modello: Ottimizzazione completa di vari componenti sia dal punto di vista dell'efficienza che dell'accuratezza, inclusi head di classificazione leggere, downsampling disaccoppiato spaziale-canale e design a blocchi guidato dal rango.
- Funzionalità avanzate del modello: Incorpora convoluzioni a kernel ampio e moduli di auto-attenzione parziale per migliorare le prestazioni senza significativi costi computazionali.
Varianti del modello#
YOLOv10 è disponibile in diverse scale di modello per soddisfare le diverse esigenze applicative:
- 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 larghezza per una maggiore accuratezza.
- YOLOv10l: Versione Large per una maggiore accuratezza a costo di maggiori risorse computazionali.
- YOLOv10x: Versione Extra-large per la massima accuratezza e prestazioni.
Performance#
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, e YOLOv10b ha il 46% in meno di latenza e il 25% in meno di parametri rispetto a YOLOv9-C a parità di prestazioni.
Latenza misurata con TensorRT FP16 su GPU T4.
| Modello | Dimensione 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 distribuzione end-to-end. La metrica di corrispondenza coerente allinea la supervisione tra entrambe le strategie, migliorando la qualità delle previsioni durante l'inferenza.
Progettazione del modello guidata dall'efficienza olistica e dall'accuratezza#
Miglioramenti all'efficienza#
- Lightweight Classification Head: Riduce il sovraccarico computazionale della head di classificazione utilizzando convoluzioni separabili in profondità.
- Downsampling disaccoppiato spaziale-canale: Disaccoppia la riduzione spaziale e la modulazione dei canali per minimizzare la perdita di informazioni e il costo computazionale.
- Design a blocchi guidato dal rango: Adatta il design del blocco in base alla ridondanza intrinseca dello stage, garantendo un utilizzo ottimale dei parametri.
Miglioramenti all'accuratezza#
- Convoluzione a kernel ampio: Amplia il campo recettivo per migliorare la capacità di estrazione delle caratteristiche.
- Partial Self-Attention (PSA): Incorpora moduli di auto-attenzione per migliorare l'apprendimento della rappresentazione globale con un sovraccarico minimo.
Esperimenti e risultati#
YOLOv10 è stato ampiamente testato su benchmark standard come COCO, dimostrando prestazioni ed efficienza superiori. Il modello ottiene risultati all'avanguardia su diverse varianti, mostrando miglioramenti significativi in termini di latenza e accuratezza rispetto alle versioni precedenti e ad altri rilevatori contemporanei.
Confronti#

Rispetto ad altri rilevatori allo stato dell'arte:
- 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 il 46% di latenza in meno rispetto a YOLOv9-C a parità di accuratezza
- YOLOv10l / x superano YOLOv8l / x di 0,3 AP / 0,5 AP con parametri inferiori di 1,8× / 2,3×
Ecco un confronto dettagliato delle varianti di YOLOv10 con altri modelli allo stato dell'arte:
| Modello | Params (M) | FLOPs (G) | mAPval 50-95 | Latenza (ms) | Latenza-forward (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 parametri e FLOP si riferiscono al modello fuso dopo model.fuse(), che unisce i livelli Conv e BatchNorm e rimuove la testa di rilevamento ausiliaria uno-a-molti. I checkpoint preaddestrati mantengono l'architettura di addestramento completa e potrebbero mostrare conteggi più elevati.
Esempi di Utilizzo#
Per la previsione di nuove immagini con YOLOv10. I modelli possono anche essere addestrati su GPU cloud tramite la piattaforma Ultralytics:
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 set di dati 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)Compiti e modalità supportati#
La serie di modelli YOLOv10 offre una gamma di modelli, ciascuno ottimizzato per il rilevamento di oggetti ad alte prestazioni. Questi modelli soddisfano diverse esigenze di calcolo e requisiti di accuratezza, risultando versatili per un'ampia gamma di applicazioni.
| Modello | Nomi file | Task | Addestramento | Validazione | Inferenza | Esportazione |
|---|---|---|---|---|---|---|
| YOLOv10 | yolov10n.pt yolov10s.pt yolov10m.pt yolov10l.pt yolov10x.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ✅ |
Esportazione di YOLOv10#
A causa delle nuove operazioni introdotte con YOLOv10, non tutti i formati di esportazione forniti da Ultralytics sono attualmente supportati. La seguente tabella delinea quali formati sono stati convertiti con successo utilizzando Ultralytics per YOLOv10. Sentiti libero di aprire una pull request se sei in grado di fornire una modifica di contributo per aggiungere il supporto all'esportazione di formati aggiuntivi per YOLOv10.
| Formato di esportazione | Supporto all'esportazione | Inferenza del modello esportato | Note |
|---|---|---|---|
| TorchScript | ✅ | ✅ | Formato modello standard PyTorch. |
| ONNX | ✅ | ✅ | Ampiamente supportato per il deployment. |
| OpenVINO | ✅ | ✅ | Ottimizzato per hardware Intel. |
| TensorRT | ✅ | ✅ | Ottimizzato per GPU NVIDIA. |
| CoreML | ✅ | ✅ | Limitato ai dispositivi Apple. |
| TF SavedModel | ✅ | ✅ | Formato modello standard di TensorFlow. |
| TF GraphDef | ✅ | ✅ | Formato TensorFlow legacy. |
| LiteRT | ✅ | ✅ | Ottimizzato per dispositivi mobili, embedded e browser (LiteRT.js). |
| TF Edge TPU | ✅ | ✅ | Specifico per i dispositivi Edge TPU di Google. |
| PaddlePaddle | ❌ | ❌ | Popolare in Cina; supporto globale minore. |
| NCNN | ✅ | ❌ | Il livello torch.topk non esiste o non è registrato |
Conclusione#
YOLOv10 ha stabilito un nuovo standard nel rilevamento di oggetti in tempo reale al momento del suo rilascio, affrontando le carenze delle versioni precedenti di YOLO e incorporando strategie di progettazione innovative. Il suo approccio senza NMS ha aperto la strada al rilevamento di oggetti end-to-end nella famiglia YOLO. Per l'ultimo modello Ultralytics con prestazioni migliorate e inferenza senza NMS, vedi YOLO26.
Citazioni e riconoscimenti#
Vorremmo ringraziare gli autori di YOLOv10 della Tsinghua University per la loro vasta ricerca e i significativi 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 un'implementazione dettagliata, le innovazioni architettoniche e i risultati sperimentali, fai riferimento al documento di ricerca e al repository GitHub di YOLOv10 del team della Tsinghua University.
FAQ#
YOLOv10, sviluppato dai ricercatori della Tsinghua University, introduce diverse innovazioni chiave nel rilevamento di oggetti in tempo reale. Elimina la necessità della soppressione dei non massimi (NMS) impiegando assegnazioni duali coerenti durante l'addestramento e componenti del modello ottimizzati per prestazioni superiori con un overhead computazionale ridotto. Per maggiori dettagli sulla sua architettura e sulle caratteristiche principali, dai un'occhiata alla sezione Panoramica di YOLOv10.
Per un'inferenza semplice, puoi utilizzare la libreria Python Ultralytics YOLO o l'interfaccia a riga di comando (CLI). Di seguito sono riportati esempi di predizione su nuove immagini utilizzando 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 nostra sezione Esempi di utilizzo.
YOLOv10 offre diverse varianti di modello per soddisfare diversi casi d'uso:
- YOLOv10n: Adatto per ambienti con risorse estremamente limitate
- YOLOv10s: Bilancia velocità e precisione
- YOLOv10m: Uso generico
- YOLOv10b: Maggiore precisione con larghezza aumentata
- YOLOv10l: Alta precisione a costo di maggiori risorse computazionali
- YOLOv10x: Massima precisione e prestazioni
Ogni variante è progettata per diverse esigenze di calcolo e requisiti di accuratezza, rendendole versatili per una varietà di applicazioni. Esplora la sezione Varianti del modello per ulteriori informazioni.
YOLOv10 elimina la necessità della soppressione dei non massimi (NMS) durante l'inferenza impiegando assegnazioni duali coerenti per l'addestramento. Questo approccio riduce la latenza di inferenza e migliora l'efficienza delle previsioni. L'architettura include anche una testa uno-a-uno per l'inferenza, garantendo che ciascun oggetto ottenga una singola previsione ottimale. Per una spiegazione dettagliata, vedi la sezione Assegnazioni duali coerenti per l'addestramento senza NMS.
YOLOv10 supporta diversi formati di esportazione, tra cui TorchScript, ONNX, OpenVINO e TensorRT. Tuttavia, non tutti i formati di esportazione forniti da Ultralytics sono attualmente supportati per YOLOv10 a causa delle sue nuove operazioni. Per i dettagli sui formati supportati e le istruzioni sull'esportazione, visita la sezione Esportazione di YOLOv10.
YOLOv10 supera le versioni precedenti di YOLO e altri modelli all'avanguardia sia in termini di accuratezza che di efficienza. Ad esempio, YOLOv10s è 1,8 volte più veloce di RT-DETR-R18 con un AP simile sul dataset COCO. YOLOv10b mostra il 46% in meno di latenza e il 25% in meno di parametri rispetto a YOLOv9-C a parità di prestazioni. I benchmark dettagliati sono disponibili nella sezione Confronti.