YOLOv10 vs YOLOX#
Il campo della computer vision è trainato dai rapidi progressi delle architetture per il rilevamento degli oggetti in tempo reale. Questo confronto tecnico approfondito esamina due modelli influenti che hanno migliorato l'efficienza e la progettazione dei rilevatori: YOLOv10 e YOLOX. Analizzandone le differenze architetturali, le metriche di prestazione e le metodologie di addestramento, sviluppatori e ricercatori possono prendere decisioni consapevoli per distribuire sistemi di visione affidabili.
Origini e contesto dei modelli#
Comprendere le origini di questi modelli di deep learning offre un contesto prezioso sui loro obiettivi architetturali e sui casi d’uso a cui sono destinati.
YOLOv10: eliminare NMS per un rilevamento davvero end-to-end#
Sviluppato per risolvere colli di bottiglia nella latenza presenti da tempo, YOLOv10 ha introdotto un approccio end-to-end nativo nella famiglia YOLO.
- Autori: Ao Wang, Hui Chen, Lihao Liu, et al.
- Organizzazione: Università Tsinghua
- Data: 23 maggio 2024
- arXiv: 2405.14458
- GitHub: THU-MIG/yolov10
- Documentazione: Documentazione di Ultralytics YOLOv10
YOLOX: colmare il divario tra ricerca e industria#
YOLOX è emerso come una versione senza anchor del design YOLO tradizionale, offrendo una metodologia più semplice con prestazioni competitive, pensata specificamente per agevolare la distribuzione nelle comunità industriali.
- Autori: Zheng Ge, Songtao Liu, Feng Wang, Zeming Li e Jian Sun
- Organizzazione: Megvii
- Data: 18 luglio 2021
- arXiv: 2107.08430
- GitHub: Megvii-BaseDetection/YOLOX
- Documentazione: Documentazione ufficiale di YOLOX
Caratteristiche e innovazioni architetturali#
Entrambi i framework si discostano dai rilevatori tradizionali basati su anchor, ma affrontano problemi diversi nella pipeline di rilevamento degli oggetti.
Architettura di YOLOX#
Nel 2021 YOLOX ha introdotto diversi aggiornamenti importanti al design YOLO. Il contributo principale è stato il passaggio a un design di rilevatore senza anchor. Eliminando le box anchor predefinite, YOLOX ha ridotto il numero di parametri di progettazione e di regolazioni euristiche necessari per i diversi dataset.
Inoltre, YOLOX utilizza una testa disaccoppiata, che separa le attività di classificazione e regressione. Questo ha risolto il conflitto tra i due obiettivi e accelerato la convergenza durante l'addestramento. Utilizza anche SimOTA per l'assegnazione dinamica delle etichette, migliorando la gestione delle scene affollate e delle occlusioni comuni nel dataset COCO.
I design senza anchor, come quello utilizzato da YOLOX, riducono la complessità della regolazione del modello. Gli sviluppatori non devono più eseguire il clustering k-means sui dataset personalizzati per definire le dimensioni ottimali delle box anchor, risparmiando tempo di preparazione.
Architettura di YOLOv10#
Sebbene YOLOX abbia migliorato la testa di rilevamento, durante l'inferenza si affidava ancora alla soppressione non massima (NMS), che causa variabilità della latenza. YOLOv10 ha affrontato specificamente questa limitazione introducendo una strategia di assegnazione doppia coerente per l'addestramento senza NMS. Durante l'addestramento utilizza assegnazioni delle etichette sia uno-a-molti sia uno-a-uno, mentre durante l'inferenza può eliminare del tutto la testa uno-a-molti e produrre predizioni senza post-elaborazione NMS (nel pacchetto Ultralytics, seleziona questa testa con nms=False).
YOLOv10 presenta anche un design del modello olistico, orientato all'efficienza e alla precisione. Integra teste di classificazione leggere e un downsampling disaccoppiato spaziale e dei canali, riducendo il numero di parametri e le FLOP senza sacrificare la precisione.
Confronto delle prestazioni#
La valutazione di questi modelli su hardware come la GPU NVIDIA T4 rivela vantaggi distinti a seconda della dimensione. La tabella seguente confronta entrambe le famiglie di modelli.
| Modello | dimensione (pixel) | mAPval50-95 | Velocità CPU ONNX (ms) | Velocità T4 TensorRT10 (ms) | parametri (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOv10n | 640 | 38.5 | - | 1.84 | 2.3 | 6.7 |
| YOLOv10s | 640 | 46.3 | - | 2.49 | 7.2 | 21.6 |
| YOLOv10m | 640 | 51.1 | - | 4.74 | 15.4 | 59.1 |
| YOLOv10b | 640 | 52.5 | - | 5.74 | 19.1 | 92.0 |
| YOLOv10l | 640 | 53.2 | - | 7.28 | 24.4 | 120.3 |
| YOLOv10x | 640 | 54.4 | - | 10.70 | 29.5 | 160.4 |
| YOLOXnano | 416 | 25.8 | - | - | 0.91 | 1.08 |
| YOLOXtiny | 416 | 32.8 | - | - | 5.06 | 6.45 |
| YOLOXs | 640 | 40.5 | - | 2.56 | 9.0 | 26.8 |
| YOLOXm | 640 | 46.9 | - | 5.43 | 25.3 | 73.8 |
| YOLOXl | 640 | 49.7 | - | 9.04 | 54.2 | 155.6 |
| YOLOXx | 640 | 51.1 | - | 16.1 | 99.1 | 281.9 |
Come si vede sopra, YOLOv10 si adatta bene a diverse dimensioni. La variante YOLOv10x raggiunge la precisione più elevata (54.4 mAP), mentre la variante YOLOv10n offre la più alta velocità di inferenza TensorRT riportata. Al contrario, il modello YOLOX-Nano ha l'ingombro minore (0.91M parametri a 416 pixel), risultando adatto ad ambienti con forti limitazioni.
Metodologie di addestramento e requisiti di risorse#
Quando implementi modelli in produzione, l’ecosistema di addestramento e il fabbisogno di risorse sono importanti quanto la velocità di inferenza pura.
YOLOX si basa su una codebase più datata, le cui dipendenze e configurazioni dell'ambiente possono essere complicate da gestire negli attuali stack software.
Al contrario, YOLOv10 è integrato nell'ecosistema Ultralytics, che semplifica l'esperienza degli sviluppatori. Durante l'addestramento, i modelli Ultralytics YOLO utilizzano anche meno memoria CUDA rispetto alle architetture basate su Transformer come RT-DETR.
Esempio di codice: addestramento semplificato#
Con l'API unificata Ultralytics puoi addestrare modelli con poche righe di Python, senza compilare manualmente operatori C++ né modificare file di configurazione complessi.
from ultralytics import YOLO
# Inizializza un modello YOLOv10 preaddestrato
model = YOLO("yolov10s.pt")
# Addestra il modello sul dataset COCO8
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Valida le prestazioni del modello
metrics = model.val()
# Esporta il modello ottimizzato in formato ONNX
model.export(format="onnx")Questa semplice sintassi offre accesso immediato alla precisione mista automatica, all’aumento automatico dei dati e all’integrazione immediata con strumenti come Weights & Biases.
Casi d'uso e consigli#
La scelta tra YOLOv10 e YOLOX dipende dai requisiti specifici del progetto, dai vincoli di distribuzione e dalle preferenze per l’ecosistema.
Quando scegliere YOLOv10#
YOLOv10 è una scelta valida per:
- Rilevamento in tempo reale senza NMS: applicazioni che traggono vantaggio dal rilevamento end-to-end senza soppressione non massima, riducendo la complessità della distribuzione.
- Compromesso equilibrato tra velocità e precisione: progetti che richiedono un buon equilibrio tra velocità di inferenza e precisione di rilevamento con modelli di diverse dimensioni.
- Applicazioni con latenza costante: scenari di distribuzione in cui i tempi di inferenza prevedibili sono fondamentali, ad esempio nella robotica o nei sistemi autonomi.
Quando scegliere YOLOX#
YOLOX è consigliato per:
- Ricerca sul rilevamento senza anchor: Ricerca accademica che usa l'architettura pulita e senza anchor di YOLOX come riferimento per sperimentare nuove head di rilevamento o funzioni di perdita.
- Dispositivi edge ultraleggeri: Implementazione su microcontrollori o hardware mobile legacy, dove le dimensioni estremamente ridotte della variante YOLOX-Nano (0,91 M di parametri) sono fondamentali.
- Studi sull'assegnazione delle etichette SimOTA: Progetti di ricerca che analizzano le strategie di assegnazione delle etichette basate sul trasporto ottimale e il loro impatto sulla convergenza dell'addestramento.
Quando scegliere Ultralytics (YOLO26)#
Per la maggior parte dei nuovi progetti, Ultralytics YOLO26 offre la combinazione migliore di prestazioni ed esperienza per gli sviluppatori:
- Distribuzione edge senza NMS: applicazioni che richiedono inferenza costante a bassa latenza senza la complessità della post-elaborazione con soppressione non massima.
- Ambienti solo CPU: dispositivi senza accelerazione GPU dedicata, sui quali YOLO26n è fino al 43% più veloce di YOLO11n su CPU.
- Rilevamento di oggetti piccoli: scenari impegnativi come le immagini aeree da droni o l'analisi dei sensori IoT, in cui ProgLoss e STAL migliorano la precisione sugli oggetti minuscoli.
Il futuro dell’IA per la visione: arriva YOLO26#
YOLOv10 e YOLOX rappresentano traguardi importanti, ma il settore continua a evolversi. Per gli sviluppatori che avviano nuovi progetti, Ultralytics YOLO26 è la scelta consigliata.
Rilasciato a gennaio 2026, Ultralytics YOLO26 si basa sul design end-to-end senza NMS introdotto nei modelli YOLO da YOLOv10 e lo offre come testa one-to-one opzionale (nms=False).
YOLO26 introduce anche diversi altri miglioramenti:
- Inferenza CPU fino al 43% più veloce: eliminando Distribution Focal Loss (DFL), YOLO26n è fino al 43% più veloce di YOLO11n su CPU, un vantaggio per i dispositivi edge privi di GPU.
- Ottimizzatore MuSGD: ispirato all'addestramento degli LLM, questo approccio ibrido tra SGD e Muon offre una convergenza più rapida e sessioni di addestramento stabili.
- ProgLoss + STAL: Progressive Loss e l'assegnazione delle etichette consapevole degli oggetti piccoli migliorano il riconoscimento degli oggetti di piccole dimensioni, un fattore cruciale per le immagini aeree e i sensori IoT.
- Versatilità: a differenza di YOLOX, che è esclusivamente un rilevatore di oggetti, YOLO26 supporta nativamente la segmentazione di istanze, la segmentazione semantica, la stima della profondità, la classificazione delle immagini, la stima della posa e il rilevamento OBB in un'unica libreria unificata.
Per il percorso più semplice verso la produzione, gli sviluppatori possono usare la Piattaforma Ultralytics per annotare i dataset, addestrare YOLO26 nel cloud ed esportare o distribuire i modelli con una configurazione minima.
Applicazioni nel mondo reale#
Il modello più adatto dipende dallo scenario di distribuzione e dal settore.
Analisi video ad alta velocità#
Per elaborare flussi video densi, come quelli della gestione del traffico nelle smart city, YOLOv10 offre un vantaggio grazie al suo design senza NMS. L'eliminazione del collo di bottiglia della NMS mantiene costante la latenza, rendendolo adatto all'uso insieme ad algoritmi di tracking come BoT-SORT.
Implementazione edge su sistemi legacy#
Per configurazioni accademiche più datate o applicazioni Android legacy basate su YOLOX, i modelli più piccoli come YOLOX-Tiny possono ancora essere utili, quando mantenere ambienti PyTorch meno recenti è un compromesso accettabile.
Dispositivi edge e IoT moderni#
Per le distribuzioni su hardware di nuova generazione, come robotica, droni e analisi degli scaffali nei punti vendita, YOLO26 è la soluzione consigliata. La minore latenza CPU e il miglior rilevamento degli oggetti piccoli lo rendono particolarmente adatto alla navigazione autonoma e alla gestione dettagliata dell'inventario.
Per ampliare il tuo toolkit di deep learning con ulteriori confronti, puoi anche scoprire come questi modelli si posizionano rispetto ad alternative come il flessibile YOLO11 o il RT-DETR basato su Transformer.