اكتشاف مربع الانعكاس الموجه باستخدام Ultralytics YOLO#
يتجاوز كشف الكائنات الموجّه خطوةً إضافية مقارنةً بكشف الكائنات القياسي، إذ يضيف زاويةً إضافية لتحديد مواقع الكائنات بدقة أكبر في الصورة.
تتمثل مخرجات كاشف الكائنات الموجّه في مجموعة من مربعات الإحاطة المدارة التي تحيط بالكائنات في الصورة بدقة، إلى جانب تسميات الفئات ودرجات الثقة لكل مربع. وتكون مربعات الإحاطة الموجّهة مفيدةً بوجه خاص عندما تظهر الكائنات بزوايا مختلفة، كما في الصور الجوية، حيث قد تتضمن مربعات الإحاطة التقليدية المحاذية للمحاور خلفيةً غير ضرورية.
تستخدم نماذج YOLO26 OBB اللاحقة -obb، أي yolo26n-obb.pt، ومدرّبة مسبقًا على DOTAv1.
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
عينات مرئية#
| كشف السفن باستخدام OBB | كشف المركبات باستخدام OBB |
|---|---|
![]() | ![]() |
النماذج#
تظهر هنا نماذج OBB مدرّبة مسبقًا من YOLO26، وهي مدرّبة مسبقًا على مجموعة بيانات DOTAv1.
تُنزل النماذج تلقائيًا من أحدث إصدار من Ultralytics عند الاستخدام الأول.
| النموذج | الحجم (بكسل) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | السرعة CPU ONNX (مللي ثانية) | السرعة T4 TensorRT10 (مللي ثانية) | المعاملات (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 مخصّصة للتقييم متعدد المقاييس لنموذج واحد على مجموعة بيانات DOTAv1.
أعد الإنتاج باستخدامyolo val obb data=DOTAv1.yaml device=0 split=test nms=Falseوأرسل النتائج المدمجة إلى تقييم DOTA. - تمثل السرعة متوسطًا محسوبًا على صور التحقق من DOTAv1 باستخدام مثيل Amazon EC2 P4d.
أعد الإنتاج باستخدامyolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=False - Params and FLOPs values are for fused models after Conv/BatchNorm folding and removal of the unused detection branch. Pretrained checkpoints retain the full training architecture and may show higher counts.
راجع معاينة YOLO27 غير المُصدرة للحصول على نتائج DOTAv1 الأولية.
التدريب#
درّب YOLO26n-obb على مجموعة بيانات DOTA8 لمدة 100 حقبة وبحجم صورة 640. للحصول على قائمة كاملة بالوسائط المتاحة، راجع صفحة الإعدادات.
إن OBB ودورانه بمقدار 180° متطابقان، لذا تُعرَّف الدوران بترديد 180° ولا يكون للمربع اتجاه. وتُوحَّد تسميات التدريب وفق صيغة الحافة الطويلة: عرض المربع w هو الضلع الأطول، وتُقاس الزاوية باتجاه عقارب الساعة من المحور x الموجب إلى اتجاه الحافة w، وتُخزَّن بالراديان في [-π/4, 3π/4) ([-45°, 135°)). لا تُوحَّد التنبؤات، لذا قد يُبلغ مربع متنبأ به عن الحافة القصيرة باعتبارها w؛ راجع مخرجات النتائج. وتُعد صيغة [0°, 90°) اصطلاح DOTA المنتظم، ولا تُطبَّق أثناء التدريب أو الاستدلال.
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
تنسيق مجموعة البيانات#
يمكن العثور على تفاصيل تنسيق مجموعة بيانات OBB في دليل مجموعات البيانات. يحدد تنسيق YOLO لـ OBB مربعات الإحاطة بواسطة نقاط زواياها الأربع، مع تطبيع الإحداثيات بين 0 و1، وفق البنية التالية. تدعم تعليقات Ultralytics Platform التوضيحية تسميات OBB باستخدام أداة مخصصة لرسم مربعات الإحاطة الموجّهة:
class_index x1 y1 x2 y2 x3 y3 x4 y4يعالج YOLO داخليًا الخسائر والمخرجات بتنسيق xywhr، الذي يمثّل نقطة مركز الصندوق المحيط (xy) وعرضه وارتفاعه ودورانه.
التحقق#
تحقّق من دقة النموذج المدرّب YOLO26n-obb على مجموعة بيانات DOTA8. لا حاجة إلى أي وسائط، لأن model يحتفظ بـ data الخاص بالتدريب وبالوسائط باعتبارها سمات للنموذج.
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التنبؤ#
استخدم نموذج YOLO26n-obb مدرّبًا لإجراء التنبؤات على الصور.
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 الكاملة في صفحة التنبؤ.
مخرجات النتائج#
يعيد كشف مربعات الإحاطة الموجّهة كائن Results واحدًا لكل صورة. وحقل التنبؤ الأساسي هو result.obb،
الذي يحتوي على المربعات المدارة ومعرّفات الفئات ودرجات الثقة لكل كائن مكتشف.
| السمة | النوع | الشكل | الوصف |
|---|---|---|---|
result.obb | OBB | (N) | المربعات الموجّهة. |
result.obb.data | torch.float32 | (N,7/8) | المربعات المُدارة الخام مع الثقة والفئة. |
result.obb.xywhr | torch.float32 | (N,5) | مربعات xywhr المُدارة. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | أربع نقاط زاوية. |
result.obb.conf | torch.float32 | (N,) | درجات الثقة. |
تُوحَّد التسميات وفق اصطلاح الحافة الطويلة، لكن التنبؤات لا تُوحَّد، لذا قد يُبلغ result.obb.xywhr عن أن w أصغر من h مع قياس الدوران من الحافة القصيرة. تصف الصيغتان المستطيل نفسه، لذا يكون result.obb.xyxyxyxy صحيحًا في كلتا الحالتين. حوّل الزوايا مرة أخرى عند حاجة الشفرة اللاحقة إلى صيغة الحافة الطويلة، مع مراعاة أن إعادة كتابة معلمات المربع قد تؤدي إلى إزاحة ترتيب الزوايا دوريًا:
from ultralytics.utils.ops import xyxyxyxy2xywhr
xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy) # w >= h, rotation in [-pi/4, 3pi/4)للاطلاع على حقول Results الخاصة بالمهمة عبر جميع المهام، راجع قسم نتائج التنبؤ حسب المهمة.
التصدير#
صدّر نموذج YOLO26n-obb إلى تنسيق مختلف مثل ONNX أو CoreML أو غيرهما.
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")تظهر تنسيقات التصدير المتاحة لـ YOLO26-obb في الجدول أدناه. يمكنك التصدير إلى أي تنسيق باستخدام الوسيط format، أي format='onnx' أو format='engine'. ويمكنك إجراء التنبؤ أو التحقق مباشرةً على النماذج المصدّرة، أي yolo predict model=yolo26n-obb.onnx. وتظهر أمثلة الاستخدام لنموذجك بعد اكتمال التصدير.
| التنسيق | وسيط format | النموذج | البيانات الوصفية | الوسائط |
|---|---|---|---|---|
| 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 المخرجات الخام لـ NMS الخارجي. قم بتعيين nms=False لتحديد رأس متاح خالٍ من NMS؛ وتتراجع التنسيقات غير المدعومة إلى مسار إخراجها الأصلي. وتحدد مُدخلات nms أعلاه التنسيقات التي يمكنها تضمين NMS باستخدام nms=True.
راجع تفاصيل export الكاملة في صفحة التصدير.
التطبيقات الواقعية#
يوفر كشف OBB باستخدام YOLO26 العديد من التطبيقات العملية في مختلف القطاعات:
- الإدارة البحرية وإدارة الموانئ: كشف السفن والمراكب بزوايا مختلفة من أجل إدارة الأسطول والمراقبة.
- التخطيط الحضري: تحليل المباني والبنية التحتية من الصور الجوية.
- الزراعة: مراقبة المحاصيل والمعدات الزراعية من لقطات الطائرات المسيّرة.
- قطاع الطاقة: فحص الألواح الشمسية وتوربينات الرياح في اتجاهات مختلفة.
- النقل: تتبّع المركبات على الطرق وفي مواقف السيارات من منظورات مختلفة.
تستفيد هذه التطبيقات من قدرة OBB على ملاءمة الكائنات بدقة مهما كانت زاويتها، مما يوفر كشفًا أدق من مربعات الإحاطة التقليدية.
الأسئلة الشائعة#
تتضمن مربعات الإحاطة الموجّهة (OBB) زاويةً إضافية لتحسين دقة تحديد مواقع الكائنات في الصور. وعلى خلاف مربعات الإحاطة العادية، وهي مستطيلات محاذية للمحاور، يمكن تدوير مربعات OBB لتلائم اتجاه الكائن بصورة أفضل. ويكون ذلك مفيدًا بوجه خاص للتطبيقات التي تتطلب تحديدًا دقيقًا لموضع الكائن، مثل الصور الجوية أو صور الأقمار الصناعية (دليل مجموعات البيانات).
لتدريب نموذج YOLO26n-obb باستخدام مجموعة بيانات مخصصة، اتبع المثال أدناه باستخدام Python أو CLI:
مثال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)لمزيد من وسائط التدريب، راجع قسم الإعدادات.
تُدرَّب نماذج YOLO26-OBB مسبقًا على مجموعات بيانات مثل DOTAv1، لكن يمكنك استخدام أي مجموعة بيانات منسّقة بتنسيق OBB. ويمكن العثور على معلومات تفصيلية حول تنسيقات مجموعات بيانات OBB في دليل مجموعات البيانات.
يُعد تصدير نموذج YOLO26-OBB إلى تنسيق ONNX أمرًا مباشرًا باستخدام Python أو CLI:
مثالfrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Export the model model.export(format="onnx")لمزيد من تنسيقات التصدير والتفاصيل، راجع صفحة التصدير.
للتحقق من نموذج YOLO26n-obb، يمكنك استخدام أوامر Python أو CLI كما هو موضح أدناه:
مثالfrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Validate the model metrics = model.val(data="dota8.yaml")راجع تفاصيل التحقق الكاملة في قسم Val.

