Ausgerichtete Begrenzungsrahmen Objekterkennung#
Die orientierte Objekterkennung geht einen Schritt weiter als die Standard-Objekterkennung, indem sie einen zusätzlichen Winkel einführt, um Objekte in einem Bild präziser zu lokalisieren.
Das Ergebnis eines orientierten Objektdetektors ist eine Menge rotierter Bounding Boxes, die die Objekte im Bild genau umschließen, zusammen mit Klassenkennzeichnungen und Konfidenzwerten für jede Box. Orientierte Bounding Boxes sind besonders nützlich, wenn Objekte in verschiedenen Winkeln erscheinen, wie etwa bei Luftaufnahmen, wo herkömmliche achsenparallele Bounding Boxes unnötigen Hintergrund enthalten könnten.
YOLO26 OBB-Modelle verwenden das Suffix -obb, d. h. yolo26n-obb.pt, und sind auf DOTAv1 vorab trainiert.
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
Visuelle Beispiele#
| Schifferkennung mit OBB | Fahrzeugerkennung mit OBB |
|---|---|
![]() | ![]() |
Models#
Hier sind vorab trainierte YOLO26 OBB-Modelle dargestellt, die auf dem DOTAv1-Dataset vorab trainiert wurden.
Modelle werden bei der ersten Verwendung automatisch aus dem neuesten Ultralytics-Release heruntergeladen.
| Modell | Größe (Pixel) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | Geschwindigkeit CPU ONNX (ms) | Geschwindigkeit T4 TensorRT10 (ms) | Parameter (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-Werte gelten für die Multiskalen-Auswertung eines einzelnen Modells auf dem DOTAv1-Dataset.
Reproduziere dies mityolo val obb data=DOTAv1.yaml device=0 split=testund reiche zusammengeführte Ergebnisse bei der DOTA-Auswertung ein. - Geschwindigkeit gemittelt über DOTAv1-Validierungsbilder unter Verwendung einer Amazon EC2 P4d-Instanz.
Reproduziere dies mityolo val obb data=DOTAv1.yaml batch=1 device=0|cpu - Params- und FLOPs-Werte gelten für das fusionierte Modell nach
model.fuse(), welches Conv- und BatchNorm-Schichten zusammenführt und bei End-to-End-Modellen den zusätzlichen One-to-Many-Erkennungskopf entfernt. Vorab trainierte Checkpoints behalten die vollständige Trainingsarchitektur bei und können höhere Anzahlen aufweisen.
Trainieren#
Trainiere YOLO26n-obb auf dem DOTA8-Dataset für 100 Epochen bei einer Bildgröße von 640. Eine vollständige Liste der verfügbaren Argumente findest du auf der Konfigurationsseite.
Ein OBB und seine Drehung um 180° sind identisch, daher ist die Drehung modulo 180° definiert und die Box hat keine Richtung. Trainings-Labels werden auf eine Langkantenform kanonisiert: Die Box-Breite w ist die längere Seite, der Winkel wird im Uhrzeigersinn von der positiven x-Achse zur Ausrichtung der w-Kante gemessen und in Bogenmaß in [-π/4, 3π/4) ([-45°, 135°)) gespeichert. Vorhersagen werden nicht kanonisiert, daher kann eine vorhergesagte Box die kurze Kante als w melden; siehe Ergebnisausgabe. Die Form [0°, 90°) ist die regulierte DOTA-Konvention und wird beim Training oder der Inferenz nicht angewendet.
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
Datensatzformat#
Das OBB-Dataset-Format wird im Detail im Dataset-Leitfaden beschrieben. Das YOLO OBB-Format definiert Begrenzungsrahmen über ihre vier Eckpunkte mit zwischen 0 und 1 normierten Koordinaten gemäß dieser Struktur. Die Ultralytics Plattform-Annotation unterstützt OBB-Labels mit einem dedizierten Zeichenwerkzeug für ausgerichtete Begrenzungsrahmen:
class_index x1 y1 x2 y2 x3 y3 x4 y4Intern verarbeitet YOLO Verluste und Ausgaben im Format xywhr, das den Mittelpunkt (xy), die Breite, die Höhe und die Rotation des Begrenzungsrahmens darstellt.
Validieren#
Validiere die Genauigkeit des trainierten YOLO26n-obb-Modells auf dem DOTA8-Dataset. Es sind keine Argumente erforderlich, da das model seine Trainings-data und -Argumente als Modellattribute behält.
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 FNVorhersagen#
Verwende ein trainiertes YOLO26n-obb-Modell, um Vorhersagen auf Bildern auszuführen.
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
Weitere Details zum predict-Modus findest du auf der Predict-Seite.
Ergebnisausgabe#
Die Erkennung ausgerichteter Begrenzungsrahmen gibt ein Results-Objekt pro Bild zurück. Das primäre Vorhersagefeld ist result.obb, welches gedrehte Boxen, Klassen-IDs und Konfidenzwerte für jedes erkannte Objekt enthält.
| Attribut | Typ | Form | Beschreibung |
|---|---|---|---|
result.obb | OBB | (N) | Orientierte Boxen. |
result.obb.data | torch.float32 | (N,7/8) | Rohe rotierte Boxen mit Konfidenz/Klasse. |
result.obb.xywhr | torch.float32 | (N,5) | xywhr gedrehte Boxen. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | Vier Eckpunkte. |
result.obb.conf | torch.float32 | (N,) | Konfidenzwerte. |
Labels werden auf die Langkantenkonvention kanonisiert, Vorhersagen jedoch nicht, weshalb result.obb.xywhr möglicherweise einen Wert w ausgibt, der kleiner als h ist, wobei die Rotation von der kurzen Kante aus gemessen wird. Beide Formen beschreiben dasselbe Rechteck, sodass result.obb.xyxyxyxy in beiden Fällen korrekt ist. Konvertiere die Ecken zurück, wenn nachfolgender Code die Langkantenform benötigt, und bedenke dabei, dass das Umschreiben der Box-Parameter die Reihenfolge der Ecken zyklisch verschieben kann:
from ultralytics.utils.ops import xyxyxyxy2xywhr
xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy) # w >= h, rotation in [-pi/4, 3pi/4)Aufgabenspezifische Results-Felder für alle Aufgaben findest du im Abschnitt Predict Results by Task.
Exportieren#
Exportiere ein YOLO26n-obb-Modell in ein anderes Format wie ONNX, CoreML usw.
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")Verfügbare YOLO26-obb-Exportformate sind in der Tabelle unten aufgeführt. Du kannst in jedes Format exportieren, indem du das Argument format verwendest, d. h. format='onnx' oder format='engine'. Du kannst direkt mit exportierten Modellen Vorhersagen treffen oder sie validieren, d. h. yolo predict model=yolo26n-obb.onnx. Anwendungsbeispiele werden für dein Modell nach Abschluss des Exports angezeigt.
| Format | format-Argument | Modell | Metadaten | Argumente |
|---|---|---|---|---|
| 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 |
Weitere Details zum export-Modus findest du auf der Export-Seite.
Anwendungen in der Praxis#
Die OBB-Erkennung mit YOLO26 hat zahlreiche praktische Anwendungen in verschiedenen Branchen:
- Schifffahrts- und Hafenmanagement: Erkennung von Schiffen und Wasserfahrzeugen unter verschiedenen Winkeln für Flottenmanagement und Überwachung.
- Stadtplanung: Analyse von Gebäuden und Infrastruktur anhand von Luftbildern.
- Landwirtschaft: Überwachung von Erntegut und landwirtschaftlichen Maschinen durch Drohnenaufnahmen.
- Energiesektor: Inspektion von Solarpaneelen und Windkraftanlagen in unterschiedlichen Ausrichtungen.
- Verkehrswesen: Verfolgung von Fahrzeugen auf Straßen und Parkplätzen aus verschiedenen Perspektiven.
Diese Anwendungen profitieren von der Fähigkeit von OBB, Objekte präzise in jedem Winkel zu erfassen, was eine genauere Erkennung als herkömmliche Bounding Boxes ermöglicht.
FAQ#
Ausgerichtete Begrenzungsrahmen (OBB) beinhalten einen zusätzlichen Winkel, um die Genauigkeit der Lokalisierung von Objekten in Bildern zu verbessern. Im Gegensatz zu regulären Begrenzungsrahmen, bei denen es sich um achsenparallele Rechtecke handelt, können OBBs gedreht werden, um sich besser an die Ausrichtung des Objekts anzupassen. Dies ist besonders nützlich für Anwendungen, die eine präzise Objektplatzierung erfordern, wie etwa Luft- oder Satellitenbilder (Dataset-Leitfaden).
Um ein YOLO26n-obb-Modell mit einem eigenen Datensatz zu trainieren, befolge das unten stehende Beispiel mit Python oder der CLI:
Beispielfrom 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)Weitere Trainingsargumente findest du im Abschnitt Konfiguration.
YOLO26-OBB-Modelle werden auf Datasets wie DOTAv1 vorab trainiert, aber du kannst jedes für OBB formatierte Dataset verwenden. Detaillierte Informationen zu OBB-Dataset-Formaten findest du im Dataset-Leitfaden.
Der Export eines YOLO26-OBB-Modells in das ONNX-Format ist einfach mit Python oder der CLI möglich:
Beispielfrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Export the model model.export(format="onnx")Weitere Exportformate und Details findest du auf der Export-Seite.
Um ein YOLO26n-obb-Modell zu validieren, kannst du Python oder CLI-Befehle wie unten gezeigt verwenden:
Beispielfrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Validate the model metrics = model.val(data="dota8.yaml")Vollständige Validierungsdetails findest du im Abschnitt Val.

