Riquadri di delimitazione orientati (OBB) Object Detection#
Il rilevamento di oggetti orientati fa un passo avanti rispetto al normale rilevamento di oggetti, introducendo un angolo aggiuntivo per localizzare gli oggetti con maggiore precisione in un'immagine.
L'output di un rilevatore di oggetti orientati è un set di bounding box ruotati che racchiudono con precisione gli oggetti nell'immagine, insieme alle etichette di classe e ai punteggi di confidenza per ogni box. Gli oriented bounding box sono particolarmente utili quando gli oggetti appaiono con varie angolazioni, come nelle immagini aeree, dove i tradizionali bounding box allineati agli assi potrebbero includere uno sfondo superfluo.
I modelli YOLO26 OBB utilizzano il suffisso -obb, ad esempio yolo26n-obb.pt, e sono preaddestrati su DOTAv1.
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
Esempi visivi#
| Rilevamento navi tramite OBB | Rilevamento veicoli tramite OBB |
|---|---|
![]() | ![]() |
Modelli#
Qui vengono mostrati i modelli OBB preaddestrati YOLO26, i quali sono preaddestrati sul dataset DOTAv1.
I Modelli vengono scaricati automaticamente dall'ultimo rilascio di Ultralytics al primo utilizzo.
| Modello | dimensione (pixel) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | Velocità CPU ONNX (ms) | Velocità T4 TensorRT10 (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-obb | 1024 | 52.4 | 78.9 | 97.7 ± 0.9 | 2.8 ± 0.0 | 2.5 | 14.0 |
| YOLO26s-obb | 1024 | 54.8 | 80.9 | 218.0 ± 1.4 | 4.9 ± 0.1 | 9.8 | 55.1 |
| YOLO26m-obb | 1024 | 55.3 | 81.0 | 579.2 ± 3.8 | 10.2 ± 0.3 | 21.2 | 183.3 |
| YOLO26l-obb | 1024 | 56.2 | 81.6 | 735.6 ± 3.1 | 13.0 ± 0.2 | 25.6 | 230.0 |
| YOLO26x-obb | 1024 | 56.7 | 81.7 | 1485.7 ± 11.5 | 30.5 ± 0.9 | 57.6 | 516.5 |
- mAPtest i valori si riferiscono a modello singolo multiscala sul dataset DOTAv1.
Riproduci conyolo val obb data=DOTAv1.yaml device=0 split=teste invia i risultati uniti alla valutazione DOTA. - Velocità mediata sulle immagini di validazione di DOTAv1 utilizzando un'istanza Amazon EC2 P4d.
Riproduci tramiteyolo val obb data=DOTAv1.yaml batch=1 device=0|cpu - I valori di Params e FLOPs si riferiscono al modello fuso dopo
model.fuse(), che unisce i layer Conv e BatchNorm e, per i modelli end2end, rimuove la testa di rilevamento ausiliaria one-to-many. I checkpoint preaddestrati mantengono l'architettura di addestramento completa e potrebbero mostrare conteggi più elevati.
Addestramento#
Allena YOLO26n-obb sul dataset DOTA8 per 100 epoche a una dimensione di immagine di 640. Per un elenco completo degli argomenti disponibili, consulta la pagina Configurazione.
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 sono canonicalizzate in una forma a lato lungo: la larghezza del riquadro w è il lato più lungo, l'angolo viene misurato in senso orario dall'asse x positivo all'orientamento del bordo w, ed è memorizzato in radianti in [-π/4, 3π/4) ([-45°, 135°)). Le predizioni non sono canonicalizzate, quindi un riquadro predetto potrebbe riportare il bordo corto come w; vedi Risultati dell'output. La forma [0°, 90°) è la convenzione regolarizzata in stile DOTA e non viene applicata durante l'addestramento o l'inferenza.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.yaml") # build a new model from YAML
model = YOLO("yolo26n-obb.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)Watch: How to Train Ultralytics YOLO-OBB (Oriented Bounding Boxes) Models on DOTA Dataset using Ultralytics Platform
Formato del dataset#
Il formato del dataset OBB può essere trovato in dettaglio nella Guida ai dataset. Il formato YOLO OBB designa i riquadri di delimitazione tramite i loro quattro punti d'angolo con coordinate normalizzate tra 0 e 1, seguendo questa struttura. L'annotazione della piattaforma Ultralytics supporta le etichette OBB con uno strumento di disegno di riquadri di delimitazione orientati dedicato:
class_index x1 y1 x2 y2 x3 y3 x4 y4Internamente, YOLO elabora le perdite e gli output nel formato xywhr, che rappresenta il punto centrale (xy), la larghezza, l'altezza e la rotazione del riquadro di delimitazione.
Valutazione#
Valida l'accuratezza del modello YOLO26n-obb addestrato sul dataset DOTA8. Non sono necessari argomenti poiché il model mantiene il suo data di addestramento e gli argomenti come attributi del modello.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="dota8.yaml") # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # a list containing mAP50-95(B) for each category
metrics.box.image_metrics # per-image metrics dictionary with precision, recall, F1, TP, FP, and FNPrevisione#
Usa un modello YOLO26n-obb addestrato per eseguire previsioni sulle immagini.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/boats.jpg") # predict on an image
# Access the results
for result in results:
xywhr = result.obb.xywhr # center-x, center-y, width, height, angle (radians)
xyxyxyxy = result.obb.xyxyxyxy # polygon format with 4-points
names = [result.names[cls.item()] for cls in result.obb.cls.int()] # class name of each box
confs = result.obb.conf # confidence score of each boxWatch: How to Detect and Track Storage Tanks using Ultralytics YOLO-OBB | Oriented Bounding Boxes | DOTA
Visualizza i dettagli completi della modalità predict nella pagina Predict.
Output dei risultati#
Il rilevamento di riquadri di delimitazione orientati restituisce un oggetto Results per immagine. Il campo di predizione principale è result.obb,
che contiene riquadri ruotati, ID di classe e punteggi di confidenza per ciascun oggetto rilevato.
| Attributo | Tipo | Forma | Descrizione |
|---|---|---|---|
result.obb | OBB | (N) | Box orientate. |
result.obb.data | torch.float32 | (N,7/8) | Box ruotate grezze con confidenza/classe. |
result.obb.xywhr | torch.float32 | (N,5) | Riquadri ruotati xywhr. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | Quattro punti d'angolo. |
result.obb.conf | torch.float32 | (N,) | Punteggi di confidenza. |
Le etichette sono canonicalizzate secondo la convenzione del lato lungo ma le predizioni non lo sono, quindi result.obb.xywhr potrebbe riportare w più piccolo di h con la rotazione misurata dal bordo corto. Entrambe le forme descrivono lo stesso rettangolo, quindi result.obb.xyxyxyxy è corretto in entrambi i casi. Converti nuovamente gli angoli quando il codice a valle richiede la forma a lato lungo, tenendo presente che la riscrittura dei parametri del riquadro potrebbe spostare ciclicamente l'ordine degli angoli:
from ultralytics.utils.ops import xyxyxyxy2xywhr
xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy) # w >= h, rotation in [-pi/4, 3pi/4)Per i campi specifici dell'attività Results relativi a ogni attività, consulta la sezione Risultati di predizione per attività.
Esportazione#
Esporta un modello YOLO26n-obb in un formato diverso come ONNX, CoreML, ecc.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")I formati di esportazione YOLO26-obb disponibili sono nella tabella sottostante. Puoi esportare in qualsiasi formato utilizzando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi effettuare predizioni o validazioni direttamente su modelli esportati, ad esempio yolo predict model=yolo26n-obb.onnx. Gli esempi d'uso vengono mostrati per il tuo modello al termine dell'esportazione.
| Formato | Argomento format | Modello | Metadati | Argomenti |
|---|---|---|---|---|
| PyTorch | - | yolo26n-obb.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-obb.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-obb.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-obb_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-obb.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-obb.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-obb_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-obb.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-obb_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-obb_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-obb.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-obb_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-obb_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-obb_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-obb_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-obb_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-obb_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-obb_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-obb.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-obb_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-obb_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-obb.aimodel | ✅ | imgsz, batch, quantize |
Visualizza i dettagli completi di export nella pagina Export.
Applicazioni nel mondo reale#
Il rilevamento OBB con YOLO26 ha numerose applicazioni pratiche in diversi settori:
- Gestione marittima e portuale: Rilevamento di navi e imbarcazioni a varie angolazioni per la gestione della flotta e il monitoraggio.
- Pianificazione urbana: Analisi di edifici e infrastrutture da immagini aeree.
- Agricoltura: Monitoraggio delle colture e delle attrezzature agricole da riprese effettuate con droni.
- Settore energetico: Ispezione di pannelli solari e turbine eoliche con diverse orientazioni.
- Trasporti: Tracciamento di veicoli su strade e parcheggi da varie prospettive.
Queste applicazioni beneficiano della capacità dell'OBB di adattarsi con precisione agli oggetti con qualsiasi angolazione, fornendo un rilevamento più accurato rispetto ai tradizionali bounding box.
FAQ#
I riquadri di delimitazione orientati (OBB) includono un angolo aggiuntivo per migliorare l'accuratezza 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. Ciò è particolarmente utile per le applicazioni che richiedono un posizionamento preciso degli oggetti, come immagini aeree o satellitari (Guida ai dataset).
Per addestrare un modello YOLO26n-obb con un dataset personalizzato, segui l'esempio qui sotto utilizzando Python o la CLI:
Esempiofrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-obb.pt") # Train the model results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)Per ulteriori argomenti di addestramento, controlla la sezione Configurazione.
I modelli YOLO26-OBB sono preaddestrati su dataset come DOTAv1, ma puoi utilizzare qualsiasi dataset formattato per OBB. Informazioni dettagliate sui formati dei dataset OBB possono essere trovate nella Guida ai dataset.
L'esportazione di un modello YOLO26-OBB in formato ONNX è semplice utilizzando Python o la CLI:
Esempiofrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Export the model model.export(format="onnx")Per ulteriori formati di esportazione e dettagli, fai riferimento alla pagina Esportazione.
Per validare un modello YOLO26n-obb, puoi utilizzare i comandi Python o CLI come mostrato di seguito:
Esempiofrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Validate the model metrics = model.val(data="dota8.yaml")Visualizza i dettagli completi della validazione nella sezione Val.

