Ultralytics YOLO27:
Get Started

Erkennung orientierter Begrenzungsrahmen mit Ultralytics YOLO#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

Die Erkennung orientierter Objekte geht über die herkömmliche Objekterkennung hinaus: Ein zusätzlicher Winkel ermöglicht es, Objekte in einem Bild genauer zu lokalisieren.

Ein Detektor für orientierte Objekte gibt eine Reihe gedrehter Begrenzungsrahmen aus, die die Objekte im Bild präzise umschließen, sowie Klassenbezeichnungen und Konfidenzwerte für jeden Rahmen. Orientierte Begrenzungsrahmen sind besonders nützlich, wenn Objekte in verschiedenen Winkeln erscheinen, etwa bei Luftaufnahmen, bei denen herkömmliche achsenparallele Begrenzungsrahmen unnötige Hintergrundbereiche einschließen können. Typische Anwendungen sind die Erkennung von Schiffen und Fahrzeugen anhand von Satelliten- und Drohnenaufnahmen, die Analyse von Gebäuden und Infrastruktur für die Stadtplanung, die Überwachung von Nutzpflanzen sowie die Inspektion von Solarmodulen und Windkraftanlagen.



Ansehen: So erkennst und verfolgst du Objekte mit gedrehten Begrenzungsrahmen (OBB) in Ultralytics YOLO26 | Schiffsverfolgung 🚢
Tipp

YOLO26-OBB-Modelle verwenden das Suffix -obb, zum Beispiel yolo26n-obb.pt, und werden mit DOTAv1 vortrainiert.

Schiffserkennung mit OBBFahrzeugerkennung mit OBB
Schiffserkennung mit OBBFahrzeugerkennung mit OBB

Modelle#

Die mit dem Datensatz DOTAv1 vortrainierten YOLO26-OBB-Modelle sind unten aufgeführt.

Modelle werden bei der ersten Verwendung automatisch aus der neuesten Ultralytics-Version heruntergeladen.

ModellGröße
(Pixel)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Geschwindigkeit
CPU ONNX
(ms)
Geschwindigkeit
T4 TensorRT10
(ms)
Parameter
(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
  • Die Werte mAPtest gelten für ein einzelnes Modell mit mehreren Skalierungen auf dem Datensatz DOTAv1.
    Mit yolo obb val data=DOTAv1.yaml device=0 split=test nms=False reproduzieren und die zusammengeführten Ergebnisse bei der DOTA-Auswertung einreichen.
  • Geschwindigkeit, gemittelt über DOTAv1-Validierungsbilder mit ONNX auf einer CPU und TensorRT10 auf einer NVIDIA T4 GPU.
    Mit yolo obb val data=DOTAv1.yaml batch=1 device=0|cpu nms=False reproduzieren
  • Die Werte für Parameter und FLOPs gelten für zusammengeführte Modelle nach dem Zusammenführen von Conv/BatchNorm und dem Entfernen des ungenutzten Erkennungszweigs. Vortrainierte Prüfpunkte behalten die vollständige Trainingsarchitektur bei und können daher höhere Werte aufweisen.

Vorläufige DOTAv1-Ergebnisse findest du in der unveröffentlichten YOLO27-Vorschau.

Trainieren#

Trainiere YOLO26n-obb 100 Epochen lang mit einer Bildgröße von 640 auf dem DOTA8-Datensatz. Eine vollständige Liste der verfügbaren Argumente findest du auf der Seite Konfiguration.

Hinweis

Eine OBB und ihre Drehung um 180° sind identisch. Daher wird die Drehung modulo 180° definiert und die Box hat keine Richtung. Trainingslabels werden auf eine Form mit langer Kante kanonisiert: Die Boxbreite w entspricht der längeren Seite, der Winkel wird im Uhrzeigersinn von der positiven x-Achse zur Ausrichtung der w-Kante gemessen und im Bogenmaß in [-π/4, 3π/4) ([-45°, 135°)) gespeichert. Vorhersagen werden nicht kanonisiert, daher kann eine vorhergesagte Box die kurze Kante als w angeben; siehe Ergebnisausgabe. Die Form [0°, 90°) entspricht der regularisierten DOTA-Konvention und wird weder beim Training noch bei der Inferenz angewendet.

Beispiel
from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n-obb.yaml")  # ein neues Modell aus YAML erstellen
model = YOLO("yolo26n-obb.pt")  # ein vortrainiertes Modell laden (für das Training empfohlen)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt")  # aus YAML erstellen und Gewichte übertragen

# Das Modell trainieren
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)


Ansehen: So trainierst du Ultralytics-YOLO-OBB-Modelle (gedrehte Begrenzungsrahmen) mit dem DOTA-Datensatz über die Ultralytics-Plattform

Ausführliche Informationen zum Modus train findest du auf der Seite Trainieren. OBB-Modelle lassen sich auch mit dem Cloud-Training der Ultralytics Platform trainieren.

Datensatzformat#

Ausführliche Informationen zum OBB-Datensatzformat findest du im Datensatzleitfaden. Das YOLO-OBB-Format beschreibt Begrenzungsrahmen anhand ihrer vier Eckpunkte mit auf Werte zwischen 0 und 1 normierten Koordinaten gemäß der folgenden Struktur. Die Annotation in der Ultralytics Platform unterstützt OBB-Labels mit einem speziellen Zeichenwerkzeug für orientierte Begrenzungsrahmen:

class_index x1 y1 x2 y2 x3 y3 x4 y4

Intern verarbeitet YOLO Verluste und Ausgaben im Format xywhr, das den Mittelpunkt (xy), die Breite, die Höhe und die Drehung des Begrenzungsrahmens darstellt.

Validieren#

Validiere die Genauigkeit eines trainierten YOLO26n-obb-Modells anhand des DOTA8-Datensatzes. Übergib ausdrücklich data, damit die Validierung die vorgesehene Datensatz-YAML-Datei verwendet.

Beispiel
from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n-obb.pt")  # Ein offizielles Modell laden
model = YOLO("path/to/best.pt")  # Ein benutzerdefiniertes Modell laden

# Das Modell validieren
metrics = model.val(data="dota8.yaml")  # anhand des DOTA8-Datensatzes validieren
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # eine Liste mit mAP50-95(B)-Werten für jede Kategorie
metrics.box.image_metrics  # Kennzahlenverzeichnis pro Bild mit Präzision, Trefferquote, F1, TP, FP und FN

Vorhersagen#

Verwende ein trainiertes YOLO26n-obb-Modell, um Vorhersagen für Bilder zu treffen.

Beispiel
from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n-obb.pt")  # Ein offizielles Modell laden
model = YOLO("path/to/best.pt")  # Ein benutzerdefiniertes Modell laden

# Mit dem Modell Vorhersagen erstellen
results = model("https://ultralytics.com/images/boats.jpg")  # Eine Vorhersage für ein Bild erstellen

# Auf die Ergebnisse zugreifen
for result in results:
    xywhr = result.obb.xywhr  # Mittelpunkt-x, Mittelpunkt-y, Breite, Höhe, Winkel (Bogenmaß)
    xyxyxyxy = result.obb.xyxyxyxy  # Polygonformat mit 4 Punkten
    names = [result.names[cls.item()] for cls in result.obb.cls.int()]  # Klassenname jedes Rahmens
    confs = result.obb.conf  # Konfidenzwert jedes Rahmens

Ausführliche Informationen zum Modus predict findest du auf der Seite Vorhersagen.

Übergib save_crop=True, um einen rotationsausgerichteten Zuschnitt jeder OBB in der Größe ihrer Box zu speichern, wie es auch ObjectCropper tut.

Ausgabe der Ergebnisse#

Die Erkennung orientierter Begrenzungsrahmen gibt pro Bild ein Results-Objekt zurück. Das wichtigste Vorhersagefeld ist result.obb und enthält gedrehte Boxen, Klassen-IDs und Konfidenzwerte für jedes erkannte Objekt.

AttributTypFormBeschreibung
result.obbOBB(N)Orientierte Boxen.
result.obb.datatorch.float32(N,7/8)Rohe rotierte Boxen mit Konfidenz/Klasse.
result.obb.xywhrtorch.float32(N,5)Rotierte Boxen in xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)Vier Eckpunkte.
result.obb.conftorch.float32(N,)Konfidenzwerte.

Labels werden auf die Konvention mit langer Kante kanonisiert, Vorhersagen hingegen nicht. Daher kann result.obb.xywhr w als kleiner als h angeben, wobei die Drehung von der kurzen Kante aus gemessen wird. Beide Formen beschreiben dasselbe Rechteck, daher ist result.obb.xyxyxyxy in beiden Fällen korrekt. Wandle die Eckpunkte zurück, wenn nachgelagerter Code die Form mit langer Kante benötigt, und beachte dabei, dass eine Änderung der Boxparameter die Reihenfolge der Eckpunkte zyklisch verschieben kann:

from ultralytics.utils.ops import xyxyxyxy2xywhr

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

Task-spezifische Results-Felder für alle Aufgaben findest du im Abschnitt Vorhersageergebnisse nach Aufgabe.

Exportieren#

Exportiere ein YOLO26n-obb-Modell in ein anderes Format wie ONNX, CoreML usw.

Beispiel
from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n-obb.pt")  # Ein offizielles Modell laden
model = YOLO("path/to/best.pt")  # Ein benutzerdefiniertes Modell laden

# Modell exportieren
model.export(format="onnx")

Die verfügbaren Exportformate für YOLO26-obb findest du in der Tabelle unten. Mit dem Argument format kannst du in jedes Format exportieren, also zum Beispiel mit format='onnx' oder format='engine'. Du kannst exportierte Modelle direkt für Vorhersagen oder zur Validierung verwenden, also zum Beispiel mit yolo predict model=yolo26n-obb.onnx. Nach Abschluss des Exports findest du Anwendungsbeispiele für dein Modell.

FormatArgument formatModellMetadatenArgumente
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 gibt standardmäßig Rohdaten für die externe NMS aus. Lege nms=False fest, um einen verfügbaren Kopf ohne NMS auszuwählen; nicht unterstützte Formate greifen auf ihren nativen Ausgabepfad zurück. Die obigen Einträge nms kennzeichnen Formate, die NMS mit nms=True integrieren können.

Ausführliche Informationen zu export findest du auf der Seite Export.

Häufig gestellte Fragen#

  • Gedrehte Begrenzungsrahmen (OBB) berücksichtigen zusätzlich einen Winkel, um die Genauigkeit der Objektlokalisierung in Bildern zu verbessern. Anders als normale Begrenzungsrahmen, bei denen es sich um achsenparallele Rechtecke handelt, können OBBs gedreht werden, damit sie besser an die Ausrichtung des Objekts angepasst sind. Das ist besonders nützlich für Anwendungen, die eine präzise Platzierung von Objekten erfordern, etwa bei Luft- oder Satellitenbildern (Datensatzleitfaden).

  • Um ein YOLO26n-obb-Modell mit einem benutzerdefinierten Datensatz zu trainieren, folge dem Beispiel unten mit Python oder der CLI:

    Beispiel
    from ultralytics import YOLO
    
    # Vortrainiertes Modell laden
    model = YOLO("yolo26n-obb.pt")
    
    # Das Modell trainieren
    results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)

    Weitere Trainingsargumente findest du im Abschnitt Konfiguration.

  • YOLO26-OBB-Modelle werden mit Datensätzen wie DOTAv1 vortrainiert, aber du kannst jeden für OBB formatierten Datensatz verwenden. Ausführliche Informationen zu OBB-Datensatzformaten findest du im Datensatzleitfaden.

  • Wie unten gezeigt, kannst du die Validierung eines YOLO26n-obb-Modells mit Python oder CLI-Befehlen durchführen:

    Beispiel
    from ultralytics import YOLO
    
    # Ein Modell laden
    model = YOLO("yolo26n-obb.pt")
    
    # Das Modell validieren
    metrics = model.val(data="dota8.yaml")

    Ausführliche Informationen zur Validierung findest du im Abschnitt Val.

  • Ein YOLO26-OBB-Modell lässt sich ganz einfach mit Python oder der CLI ins ONNX-Format exportieren:

    Beispiel
    from ultralytics import YOLO
    
    # Ein Modell laden
    model = YOLO("yolo26n-obb.pt")
    
    # Modell exportieren
    model.export(format="onnx")

    Weitere Exportformate und Details findest du auf der Seite Export.

Kommentare