Ultralytics YOLO27:

Ultralytics YOLO ile Yönlendirilmiş Sınırlayıcı Kutu Tespiti#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

Yönlendirilmiş nesne algılama, nesneleri bir görüntüde daha doğru konumlandırmak için ek bir açı ekleyerek standart nesne algılamanın ötesine geçer.

Yönlendirilmiş bir nesne algılayıcının çıktısı, görüntüdeki nesneleri tam olarak çevreleyen döndürülmüş sınırlayıcı kutuların yanı sıra her kutu için sınıf etiketleri ve güven skorlarından oluşur. Yönlendirilmiş sınırlayıcı kutular, nesnelerin çeşitli açılarda göründüğü durumlarda özellikle kullanışlıdır; örneğin hava görüntülerinde geleneksel eksen hizalı sınırlayıcı kutular gereksiz arka planı içerebilir.

İpucu

YOLO26 OBB modelleri -obb son ekini, yani yolo26n-obb.pt son ekini kullanır ve DOTAv1 üzerinde önceden eğitilmiştir.



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

Görsel Örnekler#

OBB kullanarak Gemi AlgılamaOBB kullanarak Araç Algılama
OBB kullanarak Gemi AlgılamaOBB kullanarak Araç Algılama

Modeller#

Burada, DOTAv1 veri kümesi üzerinde önceden eğitilmiş YOLO26 önceden eğitilmiş OBB modelleri gösterilmektedir.

Modeller, ilk kullanımda en güncel Ultralytics sürümünden otomatik olarak indirilir.

Modelboyut
(piksel)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Hız
CPU ONNX
(ms)
Hız
T4 TensorRT10
(ms)
parametre
(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
  • mAPtest değerleri, DOTAv1 veri kümesinde tek modelle çok ölçekli değerlendirme içindir.
    yolo val obb data=DOTAv1.yaml device=0 split=test nms=False ile yeniden üretin ve birleştirilmiş sonuçları DOTA değerlendirmesine gönderin.
  • Hız, bir Amazon EC2 P4d örneği kullanılarak DOTAv1 doğrulama görüntüleri üzerinden ortalanmıştır.
    yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=False ile yeniden üretin.
  • Parametreler ve FLOP değerleri, Conv/BatchNorm katlama işlemi ve kullanılmayan algılama dalının kaldırılmasından sonraki birleştirilmiş modeller içindir. Önceden eğitilmiş kontrol noktaları tam eğitim mimarisini korur ve daha yüksek sayılar gösterebilir.

Ön hazırlık DOTAv1 sonuçları için yayınlanmamış YOLO27 önizlemesine göz at.

Eğit#

YOLO26n-obb modelini DOTA8 veri kümesi üzerinde, 640 görüntü boyutunda 100 epoch boyunca eğitin. Kullanılabilir bağımsız değişkenlerin tam listesi için Yapılandırma sayfasına bakın.

Not

Bir OBB ve onun 180° döndürülmüş hâli aynıdır; bu nedenle döndürme 180° modulo olarak tanımlanır ve kutunun yönü yoktur. Eğitim etiketleri uzun kenar biçiminde kanonikleştirilir: kutu genişliği w daha uzun kenardır, açı pozitif x ekseninden w kenarının yönüne saat yönünde ölçülür ve radyan cinsinden [-π/4, 3π/4) ([-45°, 135°)) içinde saklanır. Tahminler kanonikleştirilmez; bu nedenle tahmin edilen bir kutu kısa kenarı w olarak bildirebilir; Sonuç Çıktısı bölümüne bakın. [0°, 90°) biçimi, standartlaştırılmış DOTA tarzı kuraldır ve eğitim veya çıkarım sırasında uygulanmaz.

Örnek
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

Veri kümesi biçimi#

OBB veri kümesi biçimi, Veri Kümesi Kılavuzu içinde ayrıntılı olarak açıklanmıştır. YOLO OBB biçimi, koordinatları 0 ile 1 arasında normalleştirilmiş dört köşe noktasıyla sınırlayıcı kutuları aşağıdaki yapıya göre tanımlar. Ultralytics Platform açıklaması, özel bir yönlendirilmiş sınırlayıcı kutu çizim aracıyla OBB etiketlerini destekler:

class_index x1 y1 x2 y2 x3 y3 x4 y4

YOLO, kayıpları ve çıktıları dahili olarak, sınırlayıcı kutunun merkez noktasını (xy), genişliğini, yüksekliğini ve döndürmesini temsil eden xywhr biçiminde işler.

Doğrulama#

Eğitilmiş YOLO26n-obb modelinin DOTA8 veri kümesindeki doğruluğunu doğrulayın. model, eğitim data değerini ve bağımsız değişkenlerini model öznitelikleri olarak koruduğundan bağımsız değişken gerekmez.

Örnek
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

Tahmin#

Görüntüler üzerinde tahminler çalıştırmak için eğitilmiş bir YOLO26n-obb modeli kullanın.

Örnek
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

predict modunun tüm ayrıntıları için Tahmin sayfasına bak.

Sonuç çıktısı#

Yönlendirilmiş sınırlayıcı kutu algılama, görüntü başına bir Results nesnesi döndürür. Birincil tahmin alanı result.obb olup, tespit edilen her nesne için döndürülmüş kutuları, sınıf kimliklerini ve güven skorlarını içerir.

ÖznitelikTürŞekilAçıklama
result.obbOBB(N)Yönlendirilmiş kutular.
result.obb.datatorch.float32(N,7/8)Güven/sınıf bilgisine sahip ham döndürülmüş kutular.
result.obb.xywhrtorch.float32(N,5)xywhr döndürülmüş kutular.
result.obb.xyxyxyxytorch.float32(N,4,2)Dört köşe noktası.
result.obb.conftorch.float32(N,)Güven skorları.

Etiketler uzun kenar kuralına göre kanonikleştirilir, ancak tahminler kanonikleştirilmez; bu nedenle result.obb.xywhr, w değerini h değerinden küçük ve döndürmeyi kısa kenardan ölçülmüş olarak bildirebilir. Her iki biçim de aynı dikdörtgeni tanımlar; dolayısıyla result.obb.xyxyxyxy her iki durumda da doğrudur. Alt akış kodu uzun kenar biçimine ihtiyaç duyduğunda köşeleri geri dönüştürün; kutu parametrelerinin yeniden yazılmasının köşe sırasını döngüsel olarak kaydırabileceğini unutmayın:

from ultralytics.utils.ops import xyxyxyxy2xywhr

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

Her görevdeki göreve özgü Results alanlarının tamamı için Göreve Göre Tahmin Sonuçları bölümüne bak.

Dışa aktarma#

Bir YOLO26n-obb modelini ONNX, CoreML vb. farklı bir biçime aktarın.

Örnek
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")

Kullanılabilir YOLO26-obb dışa aktarma biçimleri aşağıdaki tabloda verilmiştir. format bağımsız değişkenini, yani format='onnx' veya format='engine' değerini kullanarak herhangi bir biçime aktarabilirsiniz. Dışa aktarılmış modeller üzerinde doğrudan tahmin yapabilir veya doğrulama gerçekleştirebilirsiniz; örneğin yolo predict model=yolo26n-obb.onnx. Kullanım örnekleri, dışa aktarma tamamlandıktan sonra modeliniz için gösterilir.

Biçimformat bağımsız değişkeniModelMeta verilerBağımsız değişkenler
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, harici NMS için varsayılan olarak ham çıktıları kullanır. Mevcut bir NMS'siz başlığı seçmek için nms=False değerini ayarla; desteklenmeyen formatlar yerel çıktı yollarına geri döner. Yukarıdaki nms girdileri, NMS'yi nms=True ile gömebilen formatları tanımlar.

Ayrıntıların tamamı için Dışa aktarma sayfasındaki export bilgilerine bak.

Gerçek Dünya Uygulamaları#

YOLO26 ile OBB algılamanın çeşitli sektörlerde çok sayıda pratik uygulaması vardır:

  • Denizcilik ve Liman Yönetimi: Filo yönetimi ve izleme için çeşitli açılardaki gemileri ve deniz araçlarını algılama.
  • Kentsel Planlama: Hava görüntülerinden binaları ve altyapıyı analiz etme.
  • Tarım: Drone görüntülerinden mahsulleri ve tarım ekipmanlarını izleme.
  • Enerji Sektörü: Güneş panellerini ve rüzgâr türbinlerini farklı yönelimlerde inceleme.
  • Ulaşım: Yollardaki ve otoparklardaki araçları çeşitli perspektiflerden takip etme.

Bu uygulamalar, OBB'nin nesnelere her açıda tam olarak uyum sağlama yeteneğinden yararlanır ve geleneksel sınırlayıcı kutulara göre daha doğru algılama sağlar.

SSS#

  • Yönlendirilmiş Sınırlayıcı Kutular (OBB), görüntülerde nesne konumlandırma doğruluğunu artırmak için ek bir açı içerir. Eksen hizalı dikdörtgenler olan normal sınırlayıcı kutuların aksine OBB'ler, nesnenin yönüne daha iyi uyum sağlamak için dönebilir. Bu, hava veya uydu görüntüleri gibi hassas nesne konumlandırması gerektiren uygulamalarda özellikle kullanışlıdır (Veri Kümesi Kılavuzu).

  • Özel bir veri kümesiyle YOLO26n-obb modeli eğitmek için aşağıdaki Python veya CLI örneğini izleyin:

    Örnek
    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)

    Daha fazla eğitim bağımsız değişkeni için Yapılandırma bölümüne göz atın.

  • YOLO26-OBB modelleri DOTAv1 gibi veri kümeleriyle önceden eğitilmiştir, ancak OBB için biçimlendirilmiş herhangi bir veri kümesini kullanabilirsiniz. OBB veri kümesi biçimleri hakkında ayrıntılı bilgiyi Veri Kümesi Kılavuzu bölümünde bulabilirsiniz.

  • Bir YOLO26-OBB modelini ONNX biçimine aktarmak için Python veya CLI kullanmak oldukça kolaydır:

    Örnek
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-obb.pt")
    
    # Export the model
    model.export(format="onnx")

    Daha fazla dışa aktarma biçimi ve ayrıntı için Dışa Aktarma sayfasına bakın.

  • Bir YOLO26n-obb modelini doğrulamak için aşağıda gösterildiği gibi Python veya CLI komutlarını kullanabilirsiniz:

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

    Doğrulamayla ilgili tüm ayrıntıları Val bölümünde bulabilirsiniz.

Yorumlar