Ultralytics YOLO27:
Get Started

Rilevamento di riquadri orientati con Ultralytics YOLO#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

Il rilevamento di oggetti orientati amplia il rilevamento standard introducendo un angolo aggiuntivo per localizzare gli oggetti nell'immagine con maggiore precisione.

L'output di un rilevatore di oggetti orientati è un insieme di riquadri orientati che racchiudono con precisione gli oggetti nell'immagine, con l'etichetta di classe e il punteggio di confidenza per ogni riquadro. I riquadri orientati sono particolarmente utili quando gli oggetti si trovano a diverse angolazioni, ad esempio nelle immagini aeree, dove i tradizionali riquadri allineati agli assi possono includere aree di sfondo superflue. Tra gli usi tipici ci sono il rilevamento di navi e veicoli tramite satelliti e droni, l'analisi di edifici e infrastrutture per la pianificazione urbana, il monitoraggio delle colture e l'ispezione di pannelli solari o turbine eoliche.



Guarda: Come rilevare e tracciare oggetti con le bounding box orientate (OBB) di Ultralytics YOLO26 | Tracking delle navi 🚢
Suggerimento

I modelli YOLO26 OBB usano il suffisso -obb, ad esempio yolo26n-obb.pt, e sono pretrained su DOTAv1.

Rilevamento di navi con OBBRilevamento di veicoli con OBB
Rilevamento di navi con OBBRilevamento di veicoli con OBB

Modelli#

Di seguito sono mostrati i modelli YOLO26 OBB pretrained sul dataset DOTAv1.

I modelli vengono scaricati automaticamente dalla più recente release di Ultralytics al primo utilizzo.

Modellodimensione
(pixel)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Velocità
CPU ONNX
(ms)
Velocità
T4 TensorRT10
(ms)
parametri
(M)
FLOPs
(B)
YOLO26n-obb102452.478.997.7 ± 0.92.8 ± 0.02.414.8
YOLO26s-obb102454.880.9218.0 ± 1.44.9 ± 0.19.856.7
YOLO26m-obb102455.381.0579.2 ± 3.810.2 ± 0.321.2184.9
YOLO26l-obb102456.281.6735.6 ± 3.113.0 ± 0.225.6232.4
YOLO26x-obb102456.781.71485.7 ± 11.530.5 ± 0.957.6520.1
  • I valori mAPtest si riferiscono a un singolo modello con valutazione multiscala sul dataset DOTAv1.
    Riproduci con yolo obb val data=DOTAv1.yaml device=0 split=test nms=False e invia i risultati aggregati alla valutazione DOTA.
  • Velocità media sulle immagini di validazione di DOTAv1 con ONNX su CPU e TensorRT10 su una GPU NVIDIA T4.
    Riproduci con yolo obb val data=DOTAv1.yaml batch=1 device=0|cpu nms=False
  • I valori di Parametri e FLOPs si riferiscono ai modelli fusi dopo la fusione di Conv/BatchNorm e la rimozione del ramo di rilevamento inutilizzato. I checkpoint preaddestrati mantengono l’architettura di addestramento completa e possono riportare valori più elevati.

Consulta l'anteprima non ancora rilasciata di YOLO27 per i risultati preliminari su DOTAv1.

Addestra#

Addestra YOLO26n-obb sul dataset DOTA8 per 100 epoche con una dimensione delle immagini di 640. Per l'elenco completo degli argomenti disponibili, consulta la pagina Configurazione.

Nota

Un OBB e la sua rotazione di 180° sono identici, quindi la rotazione è definita modulo 180° e il riquadro non ha una direzione. Le etichette di addestramento vengono canonicalizzate secondo la convenzione del lato lungo: la larghezza del riquadro w corrisponde al lato più lungo, l'angolo si misura in senso orario dall'asse x positivo all'orientamento del lato w e viene memorizzato in radianti in [-π/4, 3π/4) ([-45°, 135°)). Le previsioni non vengono canonicalizzate, quindi un riquadro previsto può indicare il lato corto come w; consulta Output dei risultati. La forma [0°, 90°) corrisponde alla convenzione DOTA regolarizzata e non viene applicata durante l'addestramento o l'inferenza.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-obb.yaml")  # crea un nuovo modello dal file YAML
model = YOLO("yolo26n-obb.pt")  # carica un modello preaddestrato (consigliato per l'addestramento)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt")  # crea dal file YAML e trasferisci i pesi

# Addestra il modello
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)


Guarda: Come addestrare i modelli Ultralytics YOLO-OBB (bounding box orientate) sul dataset DOTA usando la piattaforma Ultralytics

Consulta la pagina Addestramento per i dettagli completi sulla modalità train. Puoi addestrare i modelli OBB anche con l'addestramento cloud di Ultralytics Platform.

Formato del dataset#

Trovi tutti i dettagli sul formato dei dataset OBB nella Guida ai dataset. Il formato YOLO OBB definisce i riquadri tramite le coordinate dei quattro vertici, normalizzate tra 0 e 1, secondo questa struttura. Le annotazioni di Ultralytics Platform supportano le etichette OBB con uno strumento dedicato al disegno di riquadri orientati:

class_index x1 y1 x2 y2 x3 y3 x4 y4

Internamente, YOLO gestisce le perdite e gli output nel formato xywhr, che rappresenta il punto centrale (xy), la larghezza, l'altezza e la rotazione del riquadro.

Convalida#

Convalida l'accuratezza del modello YOLO26n-obb addestrato sul dataset DOTA8. Passa esplicitamente data affinché la convalida usi il file YAML del dataset previsto.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-obb.pt")  # carica un modello ufficiale
model = YOLO("path/to/best.pt")  # carica un modello personalizzato

# Convalida il modello
metrics = model.val(data="dota8.yaml")  # convalida sul dataset DOTA8
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # un elenco contenente mAP50-95(B) per ogni categoria
metrics.box.image_metrics  # dizionario con le metriche per immagine: precisione, richiamo, F1, TP, FP e FN

Predici#

Usa un modello YOLO26n-obb addestrato per eseguire previsioni sulle immagini.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-obb.pt")  # carica un modello ufficiale
model = YOLO("path/to/best.pt")  # carica un modello personalizzato

# Esegui previsioni con il modello
results = model("https://ultralytics.com/images/boats.jpg")  # esegui una previsione su un’immagine

# Accedi ai risultati
for result in results:
    xywhr = result.obb.xywhr  # centro-x, centro-y, larghezza, altezza, angolo (radianti)
    xyxyxyxy = result.obb.xyxyxyxy  # formato poligonale a 4 punti
    names = [result.names[cls.item()] for cls in result.obb.cls.int()]  # nome della classe di ogni riquadro
    confs = result.obb.conf  # punteggio di confidenza di ogni riquadro

Consulta la pagina Previsione per i dettagli completi sulla modalità predict.

Passa save_crop=True per salvare un ritaglio allineato alla rotazione di ogni OBB alle dimensioni del relativo riquadro, come fa anche ObjectCropper.

Output dei risultati#

Il rilevamento di riquadri orientati restituisce un oggetto Results per immagine. Il campo principale della previsione è result.obb, che contiene i riquadri ruotati, gli ID di classe e i punteggi di confidenza per ogni oggetto rilevato.

AttributoTipoFormaDescrizione
result.obbOBB(N)Riquadri orientati.
result.obb.datatorch.float32(N,7/8)Riquadri ruotati grezzi con confidenza/classe.
result.obb.xywhrtorch.float32(N,5)Riquadri ruotati xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)Quattro punti angolari.
result.obb.conftorch.float32(N,)Punteggi di confidenza.

Le etichette vengono canonicalizzate secondo la convenzione del lato lungo, ma le previsioni no; pertanto, result.obb.xywhr può indicare che w è minore di h, con la rotazione misurata dal lato corto. Entrambe le forme descrivono lo stesso rettangolo, quindi result.obb.xyxyxyxy è corretto in entrambi i casi. Se il codice a valle richiede la forma con il lato lungo, converti nuovamente i vertici, tenendo presente che la riscrittura dei parametri del riquadro può modificare ciclicamente l'ordine dei vertici:

from ultralytics.utils.ops import xyxyxyxy2xywhr

xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy)  # w >= h, rotation in [-pi/4, 3pi/4)

Per consultare i campi Results specifici di ogni attività, visita la sezione Risultati delle previsioni per attività.

Esporta#

Esporta un modello YOLO26n-obb in un altro formato, come ONNX, CoreML ecc.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-obb.pt")  # carica un modello ufficiale
model = YOLO("path/to/best.pt")  # carica un modello personalizzato

# Esporta il modello
model.export(format="onnx")

I formati di esportazione disponibili per YOLO26-obb sono elencati nella tabella seguente. Puoi esportare in qualsiasi formato usando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi eseguire previsioni o convalidare direttamente i modelli esportati, ad esempio yolo predict model=yolo26n-obb.onnx. Al termine dell'esportazione, vengono mostrati esempi d'uso per il tuo modello.

FormatoArgomento formatModelloMetadatiArgomenti
PyTorch-yolo26n-obb.pt✅-
TorchScripttorchscriptyolo26n-obb.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-obb.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-obb_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-obb.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-obb.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n-obb.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n-obb_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-obb.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n-obb.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-obb_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n-obb.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-obb_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo26n-obb_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-obb_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-obb_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n-obb_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-obb_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-obb_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n-obb_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n-obb_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n-obb_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None restituisce per impostazione predefinita output grezzi per NMS esterno. Imposta nms=False per selezionare una head disponibile senza NMS; i formati non supportati utilizzano il proprio percorso di output nativo. Le voci nms qui sopra identificano i formati che possono integrare NMS con nms=True.

Consulta i dettagli completi di export nella pagina Esportazione.

Domande frequenti#

  • I riquadri di delimitazione orientati (OBB) includono un angolo aggiuntivo che migliora la precisione della localizzazione degli oggetti nelle immagini. A differenza dei normali riquadri di delimitazione, che sono rettangoli allineati agli assi, gli OBB possono ruotare per adattarsi meglio all'orientamento dell'oggetto. Questo è particolarmente utile nelle applicazioni che richiedono un posizionamento preciso degli oggetti, come le immagini aeree o satellitari (Guida ai dataset).

  • Per addestrare un modello YOLO26n-obb con un dataset personalizzato, segui l'esempio riportato di seguito usando Python o la CLI:

    Esempio
    from ultralytics import YOLO
    
    # Carica un modello preaddestrato
    model = YOLO("yolo26n-obb.pt")
    
    # Addestra il modello
    results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)

    Per altri argomenti di addestramento, consulta la sezione Configurazione.

  • I modelli YOLO26-OBB sono preaddestrati su dataset come DOTAv1, ma puoi usare qualsiasi dataset formattato per OBB. Trovi informazioni dettagliate sui formati dei dataset OBB nella Guida ai dataset.

  • Per convalidare un modello YOLO26n-obb, puoi usare Python o i comandi della CLI mostrati di seguito:

    Esempio
    from ultralytics import YOLO
    
    # Carica un modello
    model = YOLO("yolo26n-obb.pt")
    
    # Convalida il modello
    metrics = model.val(data="dota8.yaml")

    Consulta la sezione Val per tutti i dettagli sulla convalida.

  • Esportare un modello YOLO26-OBB nel formato ONNX è semplice, sia usando Python sia la CLI:

    Esempio
    from ultralytics import YOLO
    
    # Carica un modello
    model = YOLO("yolo26n-obb.pt")
    
    # Esporta il modello
    model.export(format="onnx")

    Per altri formati di esportazione e ulteriori dettagli, consulta la pagina Export.

Commenti