Ultralytics YOLO27:

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:

nmsPrevisione e convalidaEsportazione
None (predefinito)Testa uno-a-molti; Ultralytics esegue NMSOutput grezzi uno-a-molti; il consumatore esegue NMS
TrueUguale a NoneTesta uno-a-molti con NMS incorporata dove supportata
FalseTesta uno-a-uno senza soppressione IoUOutput 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.

Scegli il percorso di output
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 outputs

Come 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.

HeadOutput di rilevamento prima dell'elaborazione esternaElaborazione
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-endDati 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=Nonenms=False
Output di rilevamento(N, nc + 4, 8400)(N, 300, 6)
Formato bboxxywhxyxy
PunteggiUn punteggio per classe per candidatoConfidenza e ID classe per rilevazione
Elaborazione esternaFiltraggio della confidenza e NMSFiltraggio 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=True per 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=False seleziona 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 w8a16 tornano 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_det ancore.

  • Sì, per nms=False o nms=True con 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) a imgsz=640.

  • Sì. Lo stesso argomento nms seleziona 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à.

Commenti