Ultralytics YOLO27:

Objekterkennung mit ausgerichteten Bounding Boxes mit Ultralytics YOLO#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

Die orientierte Objekterkennung geht über die standardmäßige Objekterkennung hinaus, indem sie einen zusätzlichen Winkel einführt, um Objekte in einem Bild genauer zu lokalisieren.

Das Ergebnis eines Detektors für orientierte Objekte ist eine Menge rotierter Begrenzungsrahmen, die die Objekte im Bild präzise einschließen, zusammen mit Klassenbezeichnungen und Konfidenzwerten für jeden Rahmen. Orientierte Begrenzungsrahmen sind besonders nützlich, wenn Objekte in verschiedenen Winkeln erscheinen, etwa in Luftaufnahmen, bei denen herkömmliche achsenparallele Begrenzungsrahmen unnötigen Hintergrund einschließen können.

Tipp

YOLO26-OBB-Modelle verwenden das Suffix -obb, also yolo26n-obb.pt, und sind auf DOTAv1 vortrainiert.



Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢

Visuelle Beispiele#

Schiffserkennung mit OBBFahrzeugerkennung mit OBB
Schiffserkennung mit OBBFahrzeugerkennung mit OBB

Modelle#

Hier werden vortrainierte OBB-Modelle von YOLO26 gezeigt, die auf dem Datensatz DOTAv1 vortrainiert wurden.

Modelle werden bei der ersten Verwendung automatisch aus dem neuesten Ultralytics-Release 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 für mAPtest gelten für die Mehrskalenverarbeitung mit einem einzelnen Modell auf dem Datensatz DOTAv1.
    Reproduziere die Ergebnisse mit yolo val obb data=DOTAv1.yaml device=0 split=test nms=False und reiche die zusammengeführten Ergebnisse bei der DOTA-Auswertung ein.
  • Geschwindigkeit, gemittelt über die Validierungsbilder von DOTAv1 unter Verwendung einer Amazon-EC2-P4d-Instanz.
    Reproduziere die Ergebnisse mit yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=False
  • Params- und FLOPs-Werte beziehen sich auf fusionierte Modelle nach der Conv/BatchNorm-Faltung und dem Entfernen des nicht verwendeten Erkennungszweigs. Vortrainierte Checkpoints behalten die vollständige Trainingsarchitektur bei und können höhere Anzahlen aufweisen.

Sieh dir die unreleased YOLO27 preview für vorläufige DOTAv1-Ergebnisse an.

Trainieren#

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

Hinweis

Ein OBB und seine Drehung um 180° sind identisch, daher wird die Drehung modulo 180° definiert und der Rahmen hat keine Richtung. Trainingsbeschriftungen werden in eine Form mit langer Kante kanonisiert: Die Rahmenbreite w ist die längere Seite, der Winkel wird im Uhrzeigersinn von der positiven x-Achse bis zur Ausrichtung der Kante w gemessen und im Bogenmaß in [-π/4, 3π/4) ([-45°, 135°)) gespeichert. Vorhersagen werden nicht kanonisiert, daher kann ein vorhergesagter Rahmen die kurze Kante als w angeben; siehe Ergebnisausgabe. Die Form [0°, 90°) ist die regulierte Konvention im DOTA-Stil und wird weder beim Training noch bei der Inferenz angewendet.

Beispiel
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-Datensatzformat wird ausführlich im Datensatzleitfaden beschrieben. Das YOLO-OBB-Format bezeichnet Begrenzungsrahmen anhand ihrer vier Eckpunkte mit auf 0 bis 1 normierten Koordinaten und folgt dieser Struktur. Ultralytics Platform-Anmerkungen unterstützen OBB-Beschriftungen 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 Rotation der Begrenzungsbox darstellt.

Validierung#

Validiere die Genauigkeit eines trainierten YOLO26n-obb-Modells auf dem DOTA8-Datensatz. Es sind keine Argumente erforderlich, da model seine Trainings-data und Argumente als Modelleigenschaften beibehält.

Beispiel
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")  # validate on the DOTA8 dataset
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 FN

Vorhersage#

Verwende ein trainiertes YOLO26n-obb-Modell, um Vorhersagen für Bilder auszuführen.

Beispiel
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 box


Watch: How to Detect and Track Storage Tanks using Ultralytics YOLO-OBB | Oriented Bounding Boxes | DOTA

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

Ausgabe der Ergebnisse#

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

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

Beschriftungen werden gemäß der Konvention der langen Kante kanonisiert, Vorhersagen jedoch 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 Ecken zurück in die Form mit langer Kante, wenn nachgelagerter Code diese benötigt, und beachte, dass das Umschreiben der Rahmenparameter 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)

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

Export#

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

Beispiel
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")

Die verfügbaren Exportformate für YOLO26-obb sind in der folgenden Tabelle aufgeführt. Du kannst mit dem Argument format in jedes Format exportieren, also mit format='onnx' oder format='engine'. Du kannst direkt auf exportierten Modellen Vorhersagen ausführen oder sie validieren, also mit yolo predict model=yolo26n-obb.onnx. Nach Abschluss des Exports werden für dein Modell Anwendungsbeispiele angezeigt.

FormatArgument formatModellMetadatenArgumente
PyTorch-yolo26n-obb.pt-
TorchScripttorchscriptyolo26n-obb.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-obb.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-obb_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-obb.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-obb.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-obb_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-obb.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-obb_paddle_model/imgsz, batch, device
MNNmnnyolo26n-obb.mnnimgsz, 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.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-obb.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-obb_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-obb_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-obb.aimodelimgsz, batch, quantize

nms=None verwendet standardmäßig Rohausgaben für externes NMS. Setze nms=False, um einen verfügbaren NMS-freien Kopf auszuwählen; nicht unterstützte Formate greifen auf ihren nativen Ausgabepfad zurück. Die Einträge nms oben identifizieren Formate, die NMS mit nms=True einbetten können.

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

Anwendungen in der Praxis#

Die OBB-Erkennung mit YOLO26 hat zahlreiche praktische Anwendungen in verschiedenen Branchen:

  • Maritimer Bereich und Hafenverwaltung: Erkennung von Schiffen und Wasserfahrzeugen aus verschiedenen Winkeln für die Flottenverwaltung und Überwachung.
  • Stadtplanung: Analyse von Gebäuden und Infrastruktur anhand von Luftaufnahmen.
  • Landwirtschaft: Überwachung von Nutzpflanzen und landwirtschaftlichen Geräten anhand von Drohnenaufnahmen.
  • Energiesektor: Inspektion von Solarmodulen und Windkraftanlagen in verschiedenen Ausrichtungen.
  • Verkehr: Verfolgung von Fahrzeugen auf Straßen und Parkplätzen aus verschiedenen Perspektiven.

Diese Anwendungen profitieren von der Fähigkeit von OBB, Objekte in jedem Winkel präzise einzuschließen, und ermöglichen dadurch eine genauere Erkennung als herkömmliche Begrenzungsrahmen.

FAQ#

  • Orientierte Begrenzungsrahmen (OBB) enthalten einen zusätzlichen Winkel, um die Genauigkeit der Objektlokalisierung in Bildern zu verbessern. Anders als reguläre Begrenzungsrahmen, bei denen es sich um achsenparallele Rechtecke handelt, können OBB gedreht werden, um sich besser an der Ausrichtung des Objekts zu orientieren. Das ist besonders nützlich für Anwendungen, die eine präzise Platzierung von Objekten erfordern, etwa bei Luft- oder Satellitenaufnahmen (Datensatzleitfaden).

  • Um ein YOLO26n-obb-Modell mit einem benutzerdefinierten Datensatz zu trainieren, befolge das folgende Beispiel mit Python oder CLI:

    Beispiel
    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)

    Weitere Trainingsargumente findest du im Abschnitt Konfiguration.

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

  • Der Export eines YOLO26-OBB-Modells in das ONNX-Format ist mit Python oder CLI unkompliziert:

    Beispiel
    from 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 Seite Export.

  • Um ein YOLO26n-obb-Modell zu validieren, kannst du die unten gezeigten Python- oder CLI-Befehle verwenden:

    Beispiel
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-obb.pt")
    
    # Validate the model
    metrics = model.val(data="dota8.yaml")

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

Kommentare