Ultralytics YOLO27:
Get Started

اكتشاف مربعات الإحاطة الموجّهة باستخدام Ultralytics YOLO#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

يتجاوز اكتشاف الكائنات الموجّه خطوةً إضافيةً مقارنةً باكتشاف الكائنات القياسي، إذ يضيف زاويةً لتحديد مواقع الكائنات في الصورة بدقة أكبر.

تتمثل مخرجات كاشف الكائنات الموجّه في مجموعة من مربعات الإحاطة المستديرة التي تحيط بدقة بالكائنات في الصورة، إلى جانب تسميات الفئات ودرجات الثقة لكل مربع. وتفيد مربعات الإحاطة الموجّهة خصوصًا عندما تظهر الكائنات بزوايا مختلفة، مثل الصور الجوية، حيث قد تتضمن مربعات الإحاطة التقليدية المحاذية للمحاور خلفية غير ضرورية. ومن الاستخدامات الشائعة اكتشاف السفن والمركبات من الأقمار الصناعية والطائرات المسيّرة، وتحليل المباني والبنية التحتية للتخطيط الحضري، ومراقبة المحاصيل، وفحص الألواح الشمسية أو توربينات الرياح.



شاهد: كيفية اكتشاف الكائنات وتتبعها باستخدام مربعات الإحاطة الموجّهة (OBB) في Ultralytics YOLO26 | تتبع السفن 🚢
نصيحة

تستخدم نماذج YOLO26 OBB اللاحقة -obb، أي yolo26n-obb.pt، وتُدرَّب مسبقًا على DOTAv1.

اكتشاف السفن باستخدام OBBاكتشاف المركبات باستخدام OBB
اكتشاف السفن باستخدام OBBاكتشاف المركبات باستخدام OBB

النماذج#

تظهر أدناه نماذج YOLO26 OBB المدرّبة مسبقًا على مجموعة بيانات DOTAv1.

تُنزّل النماذج تلقائيًا من أحدث إصدار من Ultralytics عند استخدامها لأول مرة.

النموذجالحجم
(بكسل)
mAPالاختبار
50-95(e2e)
mAPالاختبار
50(e2e)
السرعة
CPU ONNX
(مللي ثانية)
السرعة
T4 TensorRT10
(ms)
المعاملات
(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 محسوبة لنموذج واحد وبمقاييس متعددة على مجموعة بيانات DOTAv1.
    أعِد إنتاج النتائج باستخدام yolo obb val data=DOTAv1.yaml device=0 split=test nms=False وقدّم النتائج المدمجة إلى تقييم DOTA.
  • السرعة هي متوسط الأداء على صور التحقق DOTAv1 باستخدام ONNX على CPU وTensorRT10 على وحدة معالجة الرسوميات NVIDIA T4.
    أعِد إنتاج النتائج باستخدام yolo obb val data=DOTAv1.yaml batch=1 device=0|cpu nms=False
  • قيم المعلمات وFLOPs خاصة بالنماذج المدمجة بعد طي Conv/BatchNorm وإزالة فرع الاكتشاف غير المستخدم. تحتفظ نقاط التحقق المدرّبة مسبقًا ببنية التدريب الكاملة، وقد تُظهر أعدادًا أعلى.

اطّلع على معاينة 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

# ⁨تحميل نموذج⁩
model = YOLO("yolo26n-obb.yaml")  # ⁨إنشاء نموذج جديد من YAML⁩
model = YOLO("yolo26n-obb.pt")  # ⁨تحميل نموذج مدرّب مسبقًا (موصى به للتدريب)⁩
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt")  # ⁨الإنشاء من YAML ونقل الأوزان⁩

# ⁨تدريب النموذج⁩
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)


شاهد: كيفية تدريب نماذج Ultralytics YOLO-OBB (مربعات الإحاطة الموجّهة) على مجموعة بيانات DOTA باستخدام منصة Ultralytics

راجع التفاصيل الكاملة لوضع train في صفحة التدريب. ويمكن أيضًا تدريب نماذج OBB باستخدام التدريب السحابي على منصة Ultralytics.

تنسيق مجموعة البيانات#

للاطلاع على التفاصيل المتعلقة بتنسيق مجموعة بيانات OBB، راجع دليل مجموعة البيانات. يحدد تنسيق YOLO OBB مربعات الإحاطة بنقاط زواياها الأربع، مع تطبيع الإحداثيات بين 0 و1، وفق البنية التالية. وتدعم التعليقات التوضيحية على منصة Ultralytics تسميات OBB باستخدام أداة مخصصة لرسم مربعات الإحاطة الموجّهة:

class_index x1 y1 x2 y2 x3 y3 x4 y4

يعالج YOLO الخسائر والمخرجات داخليًا بتنسيق xywhr، الذي يمثل مركز مربع الإحاطة (xy) وعرضه وارتفاعه ودورانه.

التحقق#

تحقّق من دقة نموذج YOLO26n-obb المدرَّب على مجموعة بيانات DOTA8. مرّر data صراحةً لكي يستخدم التحقق من الصحة ملف YAML لمجموعة البيانات المقصودة.

مثال
from ultralytics import YOLO

# ⁨تحميل نموذج⁩
model = YOLO("yolo26n-obb.pt")  # ⁨حمّل نموذجًا رسميًا⁩
model = YOLO("path/to/best.pt")  # ⁨تحميل نموذج مخصص⁩

# ⁨تحقّق من النموذج⁩
metrics = model.val(data="dota8.yaml")  # ⁨تحقّق من الصحة على مجموعة بيانات DOTA8⁩
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # ⁨قائمة تحتوي على mAP50-95(B) لكل فئة⁩
metrics.box.image_metrics  # ⁨قاموس المقاييس لكل صورة، ويشمل precision وrecall وF1 وTP وFP وFN⁩

التنبؤ#

استخدم نموذج YOLO26n-obb مدرَّبًا لإجراء تنبؤات على الصور.

مثال
from ultralytics import YOLO

# ⁨تحميل نموذج⁩
model = YOLO("yolo26n-obb.pt")  # ⁨حمّل نموذجًا رسميًا⁩
model = YOLO("path/to/best.pt")  # ⁨تحميل نموذج مخصص⁩

# ⁨أجرِ التنبؤ باستخدام النموذج⁩
results = model("https://ultralytics.com/images/boats.jpg")  # ⁨أجرِ التنبؤ على صورة⁩

# ⁨الوصول إلى النتائج⁩
for result in results:
    xywhr = result.obb.xywhr  # ⁨المركز-x، المركز-y، العرض، الارتفاع، الزاوية (بالراديان)⁩
    xyxyxyxy = result.obb.xyxyxyxy  # ⁨تنسيق مضلع بأربع نقاط⁩
    names = [result.names[cls.item()] for cls in result.obb.cls.int()]  # ⁨اسم فئة كل مربع⁩
    confs = result.obb.conf  # ⁨درجة الثقة لكل مربع⁩

اطّلع على التفاصيل الكاملة لوضع predict في صفحة التنبؤ.

مرّر save_crop=True لحفظ قصاصة محاذاة للدوران لكل OBB بحجم صندوقه، كما يفعل ObjectCropper أيضًا.

مخرجات النتائج#

يعيد اكتشاف مربعات الإحاطة الموجّهة كائن Results واحدًا لكل صورة. حقل التنبؤ الأساسي هو result.obb، ويحتوي على المربعات المستديرة ومعرّفات الفئات ودرجات الثقة لكل كائن مكتشف.

السمةالنوعالشكلالوصف
result.obbOBB(N)الصناديق الموجَّهة.
result.obb.datatorch.float32(N,7/8)الصناديق المُدارة الخام مع درجة الثقة/الفئة.
result.obb.xywhrtorch.float32(N,5)الصناديق المُدارة في xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)أربع نقاط زوايا.
result.obb.conftorch.float32(N,)درجات الثقة.

تُوحَّد التسميات وفق اصطلاح الضلع الأطول، أما التنبؤات فلا تُوحَّد بهذه الطريقة، لذا قد يشير result.obb.xywhr إلى أن w أصغر من h، مع قياس الدوران انطلاقًا من الضلع الأقصر. تصف الصيغتان المستطيل نفسه، لذا فإن result.obb.xyxyxyxy صحيح في كلتا الحالتين. أعد تحويل الزوايا عند الحاجة إلى صيغة الضلع الأطول في الشيفرة اللاحقة، مع مراعاة أن إعادة كتابة معلمات المربع قد تؤدي إلى إزاحة ترتيب الزوايا دوريًا:

from ultralytics.utils.ops import xyxyxyxy2xywhr

xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy)  # ⁨w >= h، والدوران في [-pi/4, 3pi/4)⁩

للاطلاع على حقول Results الخاصة بكل مهمة، راجع قسم نتائج التنبؤ حسب المهمة.

التصدير#

صدّر نموذج YOLO26n-obb إلى تنسيق آخر مثل ONNX أو CoreML وغيرها.

مثال
from ultralytics import YOLO

# ⁨تحميل نموذج⁩
model = YOLO("yolo26n-obb.pt")  # ⁨حمّل نموذجًا رسميًا⁩
model = YOLO("path/to/best.pt")  # ⁨تحميل نموذج مخصص⁩

# ⁨صدّر النموذج⁩
model.export(format="onnx")

تتوفر تنسيقات تصدير YOLO26-obb في الجدول أدناه. يمكنك التصدير إلى أي تنسيق باستخدام الوسيطة format، أي format='onnx' أو format='engine'. يمكنك التنبؤ باستخدام النماذج المُصدَّرة أو التحقق من صحتها مباشرةً، أي yolo predict model=yolo26n-obb.onnx. تُعرض أمثلة الاستخدام الخاصة بنموذجك بعد اكتمال التصدير.

التنسيقوسيط formatالنموذجالبيانات الوصفيةالوسيطات
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 على المخرجات الأولية لإجراء NMS خارجي. اضبط nms=False لتحديد رأس متاح خالٍ من NMS؛ وتعود التنسيقات غير المدعومة إلى مسار المخرجات الأصلي الخاص بها. تحدد إدخالات nms أعلاه التنسيقات التي يمكنها تضمين NMS باستخدام nms=True.

اطّلع على التفاصيل الكاملة لـexport في صفحة التصدير.

الأسئلة الشائعة#

  • تتضمن مربعات الإحاطة الموجّهة (OBB) زاوية إضافية لتحسين دقة تحديد مواضع الكائنات في الصور. وعلى عكس مربعات الإحاطة العادية، وهي مستطيلات محاذية للمحاور، يمكن تدوير مربعات الإحاطة الموجّهة لتلائم اتجاه الكائن بشكل أفضل. وهذا مفيد بوجه خاص للتطبيقات التي تتطلب تحديدًا دقيقًا لمواضع الكائنات، مثل الصور الجوية أو صور الأقمار الصناعية (دليل مجموعات البيانات).

  • لتدريب نموذج YOLO26n-obb باستخدام مجموعة بيانات مخصصة، اتبع المثال أدناه باستخدام Python أو CLI:

    مثال
    from ultralytics import YOLO
    
    # ⁨تحميل نموذج مدرَّب مسبقًا⁩
    model = YOLO("yolo26n-obb.pt")
    
    # ⁨تدريب النموذج⁩
    results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)

    لمزيد من وسيطات التدريب، راجع قسم الإعدادات.

  • تُدرَّب نماذج YOLO26-OBB مسبقًا على مجموعات بيانات مثل DOTAv1، لكن يمكنك استخدام أي مجموعة بيانات مُهيأة بتنسيق OBB. تتوفر معلومات تفصيلية عن تنسيقات مجموعات بيانات OBB في دليل مجموعات البيانات.

  • للتحقق من نموذج YOLO26n-obb، يمكنك استخدام أوامر Python أو CLI كما هو موضح أدناه:

    مثال
    from ultralytics import YOLO
    
    # ⁨تحميل نموذج⁩
    model = YOLO("yolo26n-obb.pt")
    
    # ⁨تحقّق من النموذج⁩
    metrics = model.val(data="dota8.yaml")

    اطّلع على تفاصيل التحقق الكاملة في قسم Val.

  • يمكن بسهولة تصدير نموذج YOLO26-OBB إلى تنسيق ONNX باستخدام Python أو CLI:

    مثال
    from ultralytics import YOLO
    
    # ⁨تحميل نموذج⁩
    model = YOLO("yolo26n-obb.pt")
    
    # ⁨صدّر النموذج⁩
    model.export(format="onnx")

    لمزيد من تنسيقات التصدير والتفاصيل، راجع صفحة Export.

التعليقات