Ultralytics YOLO ile Yönlendirilmiş Sınırlayıcı Kutu Tespiti#
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.
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ılama | OBB 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.
| Model | boyut (piksel) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | Hız CPU ONNX (ms) | Hız T4 TensorRT10 (ms) | parametre (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-obb | 1024 | 52.4 | 78.9 | 97.7 ± 0.9 | 2.8 ± 0.0 | 2.4 | 14.8 |
| YOLO26s-obb | 1024 | 54.8 | 80.9 | 218.0 ± 1.4 | 4.9 ± 0.1 | 9.8 | 56.7 |
| YOLO26m-obb | 1024 | 55.3 | 81.0 | 579.2 ± 3.8 | 10.2 ± 0.3 | 21.2 | 184.9 |
| YOLO26l-obb | 1024 | 56.2 | 81.6 | 735.6 ± 3.1 | 13.0 ± 0.2 | 25.6 | 232.4 |
| YOLO26x-obb | 1024 | 56.7 | 81.7 | 1485.7 ± 11.5 | 30.5 ± 0.9 | 57.6 | 520.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=Falseile 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=Falseile 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.
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.
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 y4YOLO, 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.
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 FNTahmin#
Görüntüler üzerinde tahminler çalıştırmak için eğitilmiş bir YOLO26n-obb modeli kullanın.
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
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.
| Öznitelik | Tür | Şekil | Açıklama |
|---|---|---|---|
result.obb | OBB | (N) | Yönlendirilmiş kutular. |
result.obb.data | torch.float32 | (N,7/8) | Güven/sınıf bilgisine sahip ham döndürülmüş kutular. |
result.obb.xywhr | torch.float32 | (N,5) | xywhr döndürülmüş kutular. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | Dört köşe noktası. |
result.obb.conf | torch.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.
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çim | format bağımsız değişkeni | Model | Meta veriler | Bağımsız değişkenler |
|---|---|---|---|---|
| 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 |
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:
Örnekfrom 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:
Örnekfrom 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:
Örnekfrom 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.

