Rilevamento di oggetti con Oriented Bounding Boxes
Il rilevamento di oggetti orientati fa un passo avanti rispetto al rilevamento standard, introducendo un angolo extra per localizzare gli oggetti con maggiore precisione in un'immagine.
L'output di un rilevatore di oggetti orientati è un insieme di bounding box ruotati che racchiudono precisamente gli oggetti nell'immagine, insieme alle etichette di classe e ai punteggi di confidenza per ogni box. Gli oriented bounding boxes sono particolarmente utili quando gli oggetti appaiono ad angolazioni varie, come nelle immagini aeree, dove i tradizionali bounding box allineati agli assi potrebbero includere uno sfondo non necessario.
I modelli YOLO26 OBB utilizzano il suffisso -obb, ad esempio yolo26n-obb.pt, e sono pre-addestrati 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 sono mostrati i modelli OBB pre-addestrati di YOLO26, che sono pre-addestrati sul dataset DOTAv1.
I modelli si scaricano automaticamente dall'ultima release di Ultralytics al primo utilizzo.
| Modello | dimensione (pixel) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | Velocità CPU ONNX (ms) | Velocità T4 TensorRT10 (ms) | parametri (M) | FLOP (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 |
- I valori mAPtest si riferiscono a modelli singoli multiscala sul dataset DOTAv1.
Riproduci conyolo val obb data=DOTAv1.yaml device=0 split=teste invia i risultati uniti alla valutazione DOTA. - Velocità mediata su immagini di validazione DOTAv1 utilizzando un'istanza Amazon EC2 P4d.
Riproduci conyolo 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 livelli Conv e BatchNorm e, per i modelli end2end, rimuove l'head di rilevamento ausiliario one-to-many. I checkpoint pre-addestrati mantengono l'architettura di addestramento completa e potrebbero mostrare conteggi più elevati.
Train
Addestra YOLO26n-obb sul dataset DOTA8 per 100 epoch con dimensione immagine 640. Per un elenco completo degli argomenti disponibili, consulta la pagina Configurazione.
Gli angoli OBB sono limitati all'intervallo 0–90 gradi (escluso il 90). Angoli di 90 gradi o superiori non sono supportati.
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 è descritto in dettaglio nella Guida ai Dataset. Il formato YOLO OBB designa i bounding box tramite i loro quattro punti d'angolo con coordinate normalizzate tra 0 e 1, seguendo questa struttura. Ultralytics Platform supporta l'annotazione OBB con uno strumento dedicato per il disegno di oriented bounding box:
class_index x1 y1 x2 y2 x3 y3 x4 y4
Internamente, YOLO elabora le perdite e gli output nel formato xywhr, che rappresenta il punto centrale (xy), la larghezza, l'altezza e la rotazione del bounding box.
Val
Valida l'accuratezza del modello YOLO26n-obb addestrato sul dataset DOTA8. Non sono necessari argomenti poiché il model conserva i suoi 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 FNPredict
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
Vedi i dettagli completi della modalità predict nella pagina Previsione.
Export
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 disponibili per YOLO26-obb sono elencati nella tabella sottostante. Puoi esportare in qualsiasi formato usando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi eseguire previsioni o validazioni direttamente sui modelli esportati, ad esempio yolo predict model=yolo26n-obb.onnx. Gli esempi di utilizzo 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, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n-obb.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo26n-obb_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-obb.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-obb.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-obb_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-obb.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n-obb.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n-obb_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n-obb_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-obb_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-obb.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n-obb_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n-obb_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n-obb_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n-obb_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-obb_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DeepX | deepx | yolo26n-obb_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
Vedi i dettagli completi su export nella pagina Esportazione.
Applicazioni nel mondo reale
Il rilevamento OBB con YOLO26 ha numerose applicazioni pratiche in vari settori:
- Gestione marittima e portuale: Rilevamento di navi e imbarcazioni ad angolazioni varie per la gestione della flotta e il monitoraggio.
- Pianificazione urbana: Analisi di edifici e infrastrutture da immagini aeree.
- Agricoltura: Monitoraggio di colture e attrezzature agricole da riprese di 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 traggono vantaggio dalla capacità dell'OBB di adattarsi con precisione agli oggetti ad ogni angolazione, fornendo un rilevamento più accurato rispetto ai tradizionali bounding box.
FAQ
Cosa sono gli Oriented Bounding Boxes (OBB) e in cosa differiscono dai normali bounding box?
Gli Oriented Bounding Boxes (OBB) includono un angolo aggiuntivo per migliorare la precisione della localizzazione degli oggetti nelle immagini. A differenza dei normali bounding box, 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).
Come posso addestrare un modello YOLO26n-obb utilizzando un dataset personalizzato?
Per addestrare un modello YOLO26n-obb con un dataset personalizzato, segui l'esempio seguente utilizzando Python o CLI:
from 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, consulta la sezione Configurazione.
Quali dataset posso utilizzare per l'addestramento dei modelli YOLO26-OBB?
I modelli YOLO26-OBB sono pre-addestrati su dataset come DOTAv1, ma puoi usare qualsiasi dataset formattato per OBB. Informazioni dettagliate sui formati dei dataset OBB si trovano nella Guida ai Dataset.
Come posso esportare un modello YOLO26-OBB nel formato ONNX?
Esportare un modello YOLO26-OBB nel formato ONNX è semplice utilizzando Python o CLI:
from 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, consulta la pagina Esportazione.
Come posso validare l'accuratezza di un modello YOLO26n-obb?
Per validare un modello YOLO26n-obb, puoi usare Python o i comandi CLI come mostrato di seguito:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt")
# Validate the model
metrics = model.val(data="dota8.yaml")Vedi i dettagli completi sulla validazione nella sezione Val.

