رؤية YOLO 2026:

التصنيف الموجه للإطارات المحيطة Object Detection#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

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

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

نصيحة

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



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

نماذج مرئية#

اكتشاف السفن باستخدام OBBاكتشاف المركبات باستخدام OBB
Ships Detection using OBBVehicle Detection using OBB

النماذج#

تُعرض هنا نماذج YOLO26 المدربة مسبقاً لمهام OBB، والتي تم تدريبها مسبقاً على مجموعة بيانات DOTAv1.

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

النموذجالحجم
(بكسل)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
السرعة
CPU ONNX
(ms)
السرعة
T4 TensorRT10
(ms)
المعلمات
(M)
FLOPs
(B)
YOLO26n-obb102452.478.997.7 ± 0.92.8 ± 0.02.514.0
YOLO26s-obb102454.880.9218.0 ± 1.44.9 ± 0.19.855.1
YOLO26m-obb102455.381.0579.2 ± 3.810.2 ± 0.321.2183.3
YOLO26l-obb102456.281.6735.6 ± 3.113.0 ± 0.225.6230.0
YOLO26x-obb102456.781.71485.7 ± 11.530.5 ± 0.957.6516.5
  • قيم mAPtest هي لمقياس متعدد المقاييس بنموذج واحد على مجموعة بيانات DOTAv1.
    قم بإعادة الإنتاج باستخدام yolo val obb data=DOTAv1.yaml device=0 split=test وأرسل النتائج المدمجة إلى DOTA evaluation.
  • السرعة (Speed) محسوبة كمتوسط على صور التحقق لـ DOTAv1 باستخدام مثيل Amazon EC2 P4d.
    قم بإعادة الإنتاج باستخدام yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu
  • قيم Params و FLOPs هي للنموذج المدمج بعد model.fuse()، والذي يدمج طبقات Conv و BatchNorm، وبالنسبة للنماذج من طرف إلى طرف (end2end)، يزيل رأس الكشف الإضافي من واحد إلى متعدد. تحتفظ نقاط التحقق المدربة مسبقاً ببنية التدريب الكاملة وقد تُظهر أعداداً أعلى.

التدريب#

قم بتدريب YOLO26n-obb على مجموعة بيانات DOTA8 لمدة 100 عصر (epoch) بحجم صورة 640. للحصول على قائمة كاملة بالمعاملات المتاحة، راجع صفحة Configuration.

ملاحظة

تكون الإطارات المحيطة الموجهة (OBB) ودورانها بمقدار 180 درجة متطابقين، لذا يُعرف الدوران بوحدة مقياس 180 درجة ولا يملك الإطار اتجاهًا محددًا. تُقعدن تسميات التدريب إلى صيغة الحافة الطويلة: عرض الإطار w هو الضلع الأطول، ويُقاس الزاوية في اتجاه عقارب الساعة من محور x الموجب إلى اتجاه حافة w، ويتم تخزينها بالراديان في [-π/4, 3π/4) ([-45°, 135°)). لا يتم تقعيد التنبؤات، لذا قد يُبلغ الإطار المتنبأ به عن الضلع القصير كـ w؛ انظر Results Output. صيغة [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 في Dataset Guide. يحدد تنسيق YOLO OBB الإطارات المحيطة بنقاطها الأربع الزاوية بإحداثيات مسواة بين 0 و1، متبعاً هذا الهيكل. يدعم Ultralytics Platform annotation تسميات OBB باستخدام أداة رسم إطارات محيطة موجهة مخصصة:

class_index x1 y1 x2 y2 x3 y3 x4 y4

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

التحقق#

تحقق من دقة (accuracy) نموذج 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")  # no arguments needed, dataset and settings remembered
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 box


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

راجع تفاصيل وضع predict الكاملة في صفحة التنبؤ (Predict).

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

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

السمة (Attribute)النوعالشكلالوصف
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, rotation in [-pi/4, 3pi/4)

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

التصدير#

قم بتصدير نموذج 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النموذجالبيانات الوصفيةالوسائط (Arguments)
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

راجع تفاصيل export الكاملة في صفحة التصدير (Export).

تطبيقات العالم الحقيقي#

لاكتشاف OBB باستخدام YOLO26 تطبيقات عملية عديدة عبر مختلف الصناعات:

  • إدارة الموانئ والشحن البحري: اكتشاف السفن والمركبات بمختلف الزوايا لـ fleet management والمراقبة.
  • التخطيط الحضري: تحليل المباني والبنية التحتية من الصور الجوية.
  • الزراعة: مراقبة المحاصيل والمعدات الزراعية من لقطات الطائرات بدون طيار (الدرون).
  • قطاع الطاقة: فحص الألواح الشمسية وتوربينات الرياح في اتجاهات مختلفة.
  • النقل: تتبع المركبات على الطرق وفي مواقف السيارات من منظورات مختلفة.

تستفيد هذه التطبيقات من قدرة OBB على ملاءمة الأشياء بدقة في أي زاوية، مما يوفر اكتشافًا أكثر دقة من صناديق التحديد التقليدية.

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

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

  • لتدريب نموذج 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)

    لمزيد من معاملات التدريب، تحقق من قسم Configuration.

  • تم تدريب نماذج YOLO26-OBB مسبقاً على مجموعات بيانات مثل DOTAv1 ولكن يمكنك استخدام أي مجموعة بيانات منسقة لـ OBB. يمكن العثور على معلومات مفصلة حول تنسيقات بيانات OBB في Dataset Guide.

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

    مثال
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-obb.pt")
    
    # Export the model
    model.export(format="onnx")

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

  • للتحقق من نموذج 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.

التعليقات