Ultralytics YOLO27:
Get Started

Comprendere il rilevamento end-to-end in Ultralytics YOLO26#

YOLO26 addestra sia una testa one-to-many sia una testa one-to-one. Per impostazione predefinita, la predizione e la convalida usano la testa one-to-many con la soppressione dei massimi locali (NMS). Questo privilegia la precisione usando gli stessi pesi addestrati. Imposta nms=False per usare invece la testa one-to-one, più veloce e senza NMS.

Un unico argomento controlla questa scelta durante la predizione, la convalida, il tracciamento, l'esportazione e il benchmarking:

nmsPredizione e convalidaEsporta
None (predefinito)Testa one-to-many; Ultralytics esegue NMSOutput grezzi one-to-many; il componente utilizzatore esegue NMS
TrueCome NoneTesta one-to-many con NMS integrata, se supportata
FalseTesta one-to-one senza soppressione IoUOutput one-to-one senza NMS, se supportati

None indica che nel modello non è integrato alcun post-processing facoltativo. Non elimina la normale elaborazione che converte gli output del modello in risultati di predizione o metriche di convalida. La classificazione, la segmentazione semantica, la profondità e i modelli senza teste di rilevamento selezionabili mantengono il comportamento nativo della rispettiva attività.

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)  # attiva l'inferenza senza NMS
results = model.predict("image.jpg", nms=None)  # torna a one-to-many + NMS

model.export(format="onnx")  # output grezzi one-to-many
model.export(format="onnx", nms=True)  # integra NMS
model.export(format="onnx", nms=False)  # output one-to-one senza NMS

Come funziona il rilevamento end-to-end#

Entrambe le teste condividono il backbone e il neck e vengono ottimizzate durante l'addestramento. La testa one-to-many fornisce più predizioni candidate per oggetto; NMS rimuove i rilevamenti sovrapposti. La testa one-to-one impara a produrre una sola predizione per oggetto. La selezione del percorso di inferenza non disattiva la supervisione a doppia testa. Durante l'addestramento, la convalida usa la testa di inferenza selezionata, quindi la scelta del checkpoint e l'arresto anticipato si basano sulle stesse predizioni usate in distribuzione.

TestaOutput di rilevamento prima dell'elaborazione esternaElaborazione
One-to-many (predefinito)(N, nc + 4, 8400)Filtraggio per confidenza e NMS
One-to-one(N, 300, 6)Filtraggio per confidenza; nessuna soppressione IoU

Qui N è la dimensione del batch, nc è il numero di classi e 8400 è il numero di candidati in imgsz=640. Le righe di rilevamento one-to-one contengono [x1, y1, x2, y2, confidence, class_id]. Altre attività di rilevamento includono dati aggiuntivi:

AttivitàOutput end-to-endDati aggiuntivi
Rilevamento(N, 300, 6)—
Segmentazione di istanze(N, 300, 6 + nm) e (N, nm, H, W)Coefficienti delle maschere e prototipi
Stima della posa(N, 300, 57)17 keypoint × 3 valori
OBB(N, 300, 7)Angolo di rotazione

La fusione rimuove i rami di inferenza inutilizzati e accorpa i layer Conv e BatchNorm. Conserva il checkpoint di training originale se devi cambiare head: la fusione non può ricostruire un ramo già rimosso. Un modello con il solo head one-to-one mantiene il percorso disponibile.

Output esportati#

Per impostazione predefinita, i modelli di rilevamento YOLOv8, YOLO11 e YOLO26 esportano predizioni grezze one-to-many. Esporta YOLO26 con nms=False per ottenere rilevamenti senza NMS.

nms=Nonenms=False
Output del rilevamento(N, nc + 4, 8400)(N, 300, 6)
Formato delle bounding boxxywhxyxy
PunteggiUn punteggio per classe per candidatoConfidenza e ID di classe per rilevamento
Elaborazione esternaFiltraggio per confidenza e NMSFiltro della confidenza

Anche nms=True produce rilevamenti elaborati, ma utilizza l'head one-to-many e integra la NMS tradizionale. È utile quando vuoi che il runtime di deployment riceva i rilevamenti senza dover implementare autonomamente la soppressione.

Il grafo di un modello esportato determina i suoi output. Passare nms al momento del caricamento non ricostruisce il grafo; esporta il checkpoint sorgente con il valore nms desiderato per selezionare il relativo percorso di output. Ultralytics usa i metadati dell'artefatto per evitare di applicare la NMS due volte.

Compatibilità dei formati di esportazione#

ONNX, TensorRT, CoreML, OpenVINO e diversi altri formati supportano esportazioni senza NMS. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU e Qualcomm QNN ripiegano sul percorso one-to-many quando i relativi operatori non supportano l'output end-to-end. Gli avvisi sul formato spiegano il ripiego.

  • NMS integrata: nms=True è soggetto alle restrizioni di ciascun formato relative a task, precisione e forme dinamiche. I formati senza supporto per la NMS integrata esportano gli output nativi per l'elaborazione esterna.
  • CoreML: la NMS integrata supporta detect, segment e pose con forme statiche. Usa nms=True per i modelli di rilevamento che richiedono la pipeline NMS di Xcode Preview.
  • MNN: la NMS integrata supporta detect e pose con dynamic=False.
  • IMX: il rilevamento, la segmentazione di istanze e pose richiedono la NMS integrata, selezionata automaticamente.
  • Hailo: per impostazione predefinita, YOLO26 usa tensori grezzi con NMS sull'host; nms=False seleziona il percorso one-to-one. Il rilevamento YOLOv8/YOLO11 usa la NMS di HailoRT.
  • Quantizzazione: le versioni di TensorRT precedenti alla 8.5.0, TensorRT 10.3.0 INT8 su JetPack 6 e LiteRT INT8 o w8a16 ripiegano sugli output one-to-many.

Consulta le singole guide alle integrazioni per i requisiti hardware. Per ottenere 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 YOLO26 su COCO pubblicati mostrano che l'head one-to-many migliora la mAP di rilevamento di 0,6–0,8 punti su tutte e cinque le scale: ad esempio, 40,9 contro 40,1 per YOLO26n e 57,5 contro 56,9 per YOLO26x. L'head one-to-one evita il passaggio NMS e privilegia la latenza. Questi risultati motivano l'impostazione predefinita, ma non garantiscono un miglioramento su ogni dataset.

Le misurazioni di velocità pubblicate per l'inferenza senza NMS usano nms=False. Confronta accuratezza e latenza usando la stessa selezione dell'head, dimensione dell'immagine, precisione e hardware.

Domande frequenti#

  • Limita i rilevamenti restituiti dalla predizione e dalla validazione. Per le esportazioni end-to-end e con NMS integrata, il limite fa parte del grafo: per modificarlo, esporta di nuovo il modello; fa eccezione la NMS integrata di rilevamento di CoreML, che non prevede un limite ai rilevamenti. L'output end-to-end può contenere meno candidati se l'immagine fornisce un numero di ancore inferiore a max_det.

  • Sì, per nms=False o nms=True con il limite di rilevamento predefinito. La forma da sola non permette di identificare quale head è stato esportato. Un'esportazione predefinita del rilevamento COCO grezzo ha invece normalmente forma (1, 84, 8400) a imgsz=640.

  • Sì. Lo stesso argomento nms seleziona l'head di rilevamento disponibile per detect, segmentazione di istanze, pose e OBB. Non sostituisce la ricostruzione delle maschere, la decodifica dei keypoint, la gestione delle bounding box ruotate, le probabilità di classificazione, le mappe di classi semantiche o la decodifica della profondità.

Commenti