Comprendere il rilevamento end-to-end in Ultralytics YOLO26#
YOLO26 allena sia una testa uno-a-molti che una testa uno-a-uno. La previsione e la convalida utilizzano la testa uno-a-molti con Non-Maximum Suppression (NMS) per impostazione predefinita. Questo favorisce l'accuratezza utilizzando gli stessi pesi addestrati. Imposta nms=False per utilizzare invece la testa uno-a-uno più veloce e senza NMS.
Un argomento controlla la scelta tra previsione, convalida, tracciamento, esportazione e benchmark:
nms | Previsione e convalida | Esportazione |
|---|---|---|
None (predefinito) | Testa uno-a-molti; Ultralytics esegue NMS | Output grezzi uno-a-molti; il consumatore esegue NMS |
True | Uguale a None | Testa uno-a-molti con NMS incorporata dove supportata |
False | Testa uno-a-uno senza soppressione IoU | Output uno-a-uno senza NMS dove supportati |
None significa che nessuna post-elaborazione opzionale è incorporata nel modello. Non rimuove la normale elaborazione che converte gli output del modello in risultati di previsione o metriche di convalida. La classificazione, la segmentazione semantica, la profondità e i modelli senza teste di rilevamento selezionabili mantengono il comportamento nativo del loro task.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.predict("image.jpg") # one-to-many + NMS
metrics = model.val(data="coco.yaml") # one-to-many + NMS
results = model.predict("image.jpg", nms=False) # opt into NMS-free inference
results = model.predict("image.jpg", nms=None) # switch back to one-to-many + NMS
model.export(format="onnx") # raw one-to-many outputs
model.export(format="onnx", nms=True) # embed NMS
model.export(format="onnx", nms=False) # NMS-free one-to-one outputsCome funziona il rilevamento end-to-end#
Entrambe le teste condividono il backbone e il neck e vengono ottimizzate durante l'addestramento. La testa uno-a-molti fornisce più previsioni candidate per oggetto; NMS rimuove le rilevazioni sovrapposte. La testa uno-a-uno impara a produrre una singola previsione per oggetto. La selezione del percorso di inferenza non disabilita la supervisione a doppia testa. La convalida durante l'addestramento utilizza la testa di inferenza selezionata, quindi la selezione del checkpoint e l'arresto anticipato seguono le stesse previsioni del deployment.
| Head | Output di rilevamento prima dell'elaborazione esterna | Elaborazione |
|---|---|---|
| Uno-a-molti (predefinito) | (N, nc + 4, 8400) | Filtraggio della confidenza e NMS |
| Uno-a-uno | (N, 300, 6) | Filtraggio della confidenza; nessuna soppressione IoU |
Qui N è la dimensione del batch, nc è il numero di classi e 8400 è il conteggio dei candidati a imgsz=640. Le righe di rilevamento uno-a-uno contengono [x1, y1, x2, y2, confidence, class_id]. Altri task di rilevamento trasportano output aggiuntivi:
| Attività | Output end-to-end | Dati extra |
|---|---|---|
| Rilevamento | (N, 300, 6) | — |
| Segmentazione di istanze | (N, 300, 6 + nm) e (N, nm, H, W) | Coefficienti di maschera e prototipi |
| Posa | (N, 300, 57) | 17 keypoint × 3 valori |
| OBB | (N, 300, 7) | Angolo di rotazione |
La fusione rimuove i rami di inferenza inutilizzati e unisce i layer Conv e BatchNorm. Mantieni il checkpoint di addestramento originale se hai bisogno di cambiare testa: la fusione non può ricostruire un ramo che è già stato rimosso. Un modello a cui è rimasta solo la testa uno-a-uno mantiene disponibile quel percorso.
Output esportati#
I modelli di rilevamento YOLOv8, YOLO11 e YOLO26 esportano previsioni grezze uno-a-molti per impostazione predefinita. Esporta YOLO26 con nms=False per rilevamenti senza NMS.
nms=None | nms=False | |
|---|---|---|
| Output di rilevamento | (N, nc + 4, 8400) | (N, 300, 6) |
| Formato bbox | xywh | xyxy |
| Punteggi | Un punteggio per classe per candidato | Confidenza e ID classe per rilevazione |
| Elaborazione esterna | Filtraggio della confidenza e NMS | Filtraggio della confidenza |
nms=True produce anche rilevamenti elaborati, ma utilizza la testa uno-a-molti e incorpora la NMS tradizionale. È utile quando il runtime di deployment deve ricevere rilevamenti senza implementare la soppressione in autonomia.
Il grafo di un modello esportato ne determina gli output. Passare nms durante il caricamento non ricostruisce il grafo; esporta il checkpoint di origine con il valore nms desiderato per selezionare il suo percorso di output. Ultralytics utilizza i metadati dell'artefatto per evitare di applicare NMS due volte.
Compatibilità dei formati di esportazione#
ONNX, TensorRT, CoreML, OpenVINO e diversi altri formati supportano le esportazioni senza NMS. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU e Qualcomm QNN tornano al percorso uno-a-molti quando i loro operatori non possono supportare l'output end-to-end. Gli avvisi del formato spiegano il fallback.
- NMS incorporata:
nms=Trueè soggetto alle restrizioni di task, precisione e forma dinamica di ciascun formato. I formati senza supporto NMS incorporato esportano output nativi per l'elaborazione esterna. - CoreML: La NMS incorporata supporta detect, segment e pose con forme statiche. Utilizza
nms=Trueper i modelli di rilevamento che necessitano della pipeline NMS di Xcode Preview. - MNN: La NMS incorporata supporta detect e pose con
dynamic=False. - IMX: Il rilevamento, la segmentazione di istanze e pose richiedono NMS incorporata, selezionata automaticamente.
- Hailo: YOLO26 utilizza tensori grezzi con NMS host per impostazione predefinita;
nms=Falseseleziona il suo percorso uno-a-uno. Il rilevamento YOLOv8/YOLO11 utilizza HailoRT NMS. - Quantizzazione: Le versioni di TensorRT precedenti alla 8.5.0, TensorRT 10.3.0 INT8 su JetPack 6 e LiteRT INT8 o
w8a16tornano agli output uno-a-molti.
Consulta le singole guide all'integrazione per i requisiti hardware. Per tensori di output FP16 completi, usa nms=None; gli indici di classe end-to-end possono mantenere i tensori di output in FP32 anche quando il modello è quantizzato.
Compromessi tra accuratezza e velocità#
I risultati COCO di YOLO26 pubblicati mostrano che la testa uno-a-molti migliora l'mAP di rilevamento di 0,6–0,8 punti tra le cinque scale: ad esempio, 40,9 contro 40,1 per YOLO26n e 57,5 contro 56,9 per YOLO26x. La testa uno-a-uno evita il passaggio NMS e favorisce la latenza. Questi risultati motivano il valore predefinito; non garantiscono un guadagno su ogni dataset.
Le misurazioni di velocità senza NMS pubblicate utilizzano nms=False. Confronta accuratezza e latenza utilizzando la stessa selezione della testa, dimensione dell'immagine, precisione e hardware.
FAQ#
Limita i rilevamenti restituiti dalla predizione e dalla validazione. Per le esportazioni end-to-end e con NMS incorporata, il limite fa parte del grafo, quindi riesporta per modificarlo; il rilevamento CoreML con NMS incorporata rappresenta l'eccezione e non ha alcun limite di rilevamento. L'output end-to-end può contenere un minor numero di candidati quando l'immagine fornisce meno di
max_detancore.Sì, per
nms=Falseonms=Truecon il limite di rilevamento predefinito. La sola forma non identifica quale testa sia stata esportata. Un'esportazione di rilevamento COCO grezza predefinita ha invece normalmente la forma(1, 84, 8400)aimgsz=640.Sì. Lo stesso argomento
nmsseleziona la testa di rilevamento disponibile per detect, segmentazione di istanze, pose e OBB. Non sostituisce la ricostruzione della maschera, la decodifica dei keypoint, la gestione dei box ruotati, le probabilità di classificazione, le mappe di classe semantica o la decodifica della profondità.