Ultralytics YOLO27:
Get Started

فهم الكشف الشامل من البداية إلى النهاية في Ultralytics YOLO26#

يدرّب YOLO26 رأس واحد إلى متعدد ورأسًا واحدًا إلى واحد. يستخدم التنبؤ والتحقق افتراضيًا الرأس واحد إلى متعدد مع كبت غير القيم العظمى (NMS). وهذا يفضّل الدقة باستخدام الأوزان المدرّبة نفسها. اضبط nms=False لاستخدام الرأس الأسرع، واحد إلى واحد، والخالي من NMS بدلًا منه.

تتحكم وسيطة واحدة في الاختيار عبر التنبؤ والتحقق والتتبّع والتصدير وقياس الأداء:

nmsالتنبؤ والتحققالتصدير
None (افتراضي)رأس واحد إلى متعدد؛ تشغّل Ultralytics عملية NMSمخرجات خام لرأس واحد إلى متعدد؛ يتولى المستهلك تشغيل NMS
Trueمثل Noneرأس واحد إلى متعدد مع تضمين NMS حيثما كان ذلك مدعومًا
Falseرأس واحد إلى واحد دون كبت IoUمخرجات رأس واحد إلى واحد خالية من NMS حيثما كان ذلك مدعومًا

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

اختيار مسار المخرجات
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
results = model.predict("image.jpg")  # ⁨واحد إلى متعدد + NMS⁩
metrics = model.val(data="coco.yaml")  # ⁨واحد إلى متعدد + NMS⁩
results = model.predict("image.jpg", nms=False)  # ⁨تفعيل الاستدلال الخالي من NMS⁩
results = model.predict("image.jpg", nms=None)  # ⁨العودة إلى واحد إلى متعدد + NMS⁩

model.export(format="onnx")  # ⁨مخرجات خام لواحد إلى متعدد⁩
model.export(format="onnx", nms=True)  # ⁨تضمين NMS⁩
model.export(format="onnx", nms=False)  # ⁨مخرجات رأس واحد إلى واحد خالية من NMS⁩

آلية عمل الكشف الشامل من البداية إلى النهاية#

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

الرأسمخرجات الكشف قبل المعالجة الخارجيةالمعالجة
واحد إلى متعدد (افتراضي)(N, nc + 4, 8400)تصفية الثقة وNMS
واحد إلى واحد(N, 300, 6)تصفية الثقة؛ دون كبت IoU

هنا، N هو حجم الدفعة، وnc هو عدد الفئات، و8400 هو عدد العناصر المرشحة عند imgsz=640. تحتوي صفوف اكتشاف واحد إلى واحد على [x1, y1, x2, y2, confidence, class_id]. وتتضمن مهام الكشف الأخرى مخرجات إضافية:

المهمةمخرجات شاملة من البداية إلى النهايةبيانات إضافية
الكشف(N, 300, 6)—
تقسيم الكائنات(N, 300, 6 + nm) و(N, nm, H, W)معاملات القناع والنماذج الأولية
الوضعية(N, 300, 57)17 نقطة مفتاحية × 3 قيم
OBB(N, 300, 7)زاوية الدوران

يزيل الدمج فروع الاستدلال غير المستخدمة، كما يدمج طبقتَي Conv وBatchNorm. احتفظ بنقطة التحقق الأصلية للتدريب إذا كنت بحاجة إلى التبديل بين الرؤوس؛ إذ لا يمكن للدمج إعادة إنشاء فرع أُزيل بالفعل. ويحتفظ النموذج الذي لم يتبقَّ فيه سوى رأس one-to-one بهذا المسار المتاح.

المخرجات المُصدَّرة#

تُصدّر نماذج الكشف YOLOv8 وYOLO11 وYOLO26 تنبؤات one-to-many الخام افتراضيًا. صدّر YOLO26 باستخدام nms=False للحصول على اكتشافات بلا NMS.

nms=Nonenms=False
مخرجات الكشف(N, nc + 4, 8400)(N, 300, 6)
تنسيق الصندوقxywhxyxy
الدرجاتدرجة واحدة لكل فئة ولكل مرشحالثقة ومعرّف الفئة لكل اكتشاف
المعالجة الخارجيةتصفية الثقة وNMSتصفية الثقة

ينتج nms=True أيضًا اكتشافات معالجة، لكنه يستخدم رأس one-to-many ويضمّن NMS التقليدي. ويفيد ذلك عندما تريد أن تتلقى بيئة التشغيل المنشورة الاكتشافات دون تنفيذ الإخماد بنفسها.

يحدد مخطط النموذج المُصدَّر مخرجاته. لا تؤدي عملية تمرير nms عند تحميله إلى إعادة إنشاء المخطط؛ صدّر نقطة تحقق المصدر باستخدام القيمة المطلوبة nms لتحديد مسار المخرجات. تستخدم Ultralytics بيانات تعريف العنصر لتجنب تطبيق NMS مرتين.

التوافق مع تنسيقات التصدير#

تدعم ONNX وTensorRT وCoreML وOpenVINO وعدة تنسيقات أخرى عمليات التصدير الخالية من NMS. ويعود كل من NCNN وRKNN وPaddlePaddle وExecuTorch وIMX وEdge TPU وQualcomm QNN إلى مسار one-to-many عندما لا تدعم معاملاتها المخرجات الشاملة من البداية إلى النهاية. وتوضح تحذيرات التنسيق سبب هذا الرجوع.

  • NMS المضمّن: يخضع nms=True لقيود المهمة والدقة والأشكال الديناميكية الخاصة بكل تنسيق. وتُصدّر التنسيقات التي لا تدعم NMS المضمّن المخرجات الأصلية للمعالجة الخارجية.
  • CoreML: يدعم NMS المضمّن مهام الكشف والتجزئة وتقدير الوضع مع الأشكال الثابتة. استخدم nms=True لنماذج الكشف التي تحتاج إلى مسار NMS في Xcode Preview.
  • MNN: يدعم NMS المضمّن مهام الكشف وتقدير الوضع باستخدام dynamic=False.
  • IMX: يتطلب الكشف وتجزئة المثيلات وتقدير الوضع NMS المضمّن، ويُحدَّد تلقائيًا.
  • Hailo: يستخدم YOLO26 الموترات الخام مع NMS على المضيف افتراضيًا؛ ويحدد nms=False مسار one-to-one. أما الكشف باستخدام YOLOv8/YOLO11 فيستخدم NMS من HailoRT.
  • التكميم: تعود إصدارات TensorRT الأقدم من 8.5.0، وTensorRT 10.3.0 INT8 على JetPack 6، وLiteRT INT8 أو w8a16 إلى مخرجات one-to-many.

راجع أدلة التكامل الفردية لمعرفة متطلبات الأجهزة. للحصول على موترات مخرجات FP16 كاملة، استخدم nms=None؛ إذ يمكن أن تُبقي مؤشرات الفئات في المخرجات الشاملة من البداية إلى النهاية موترات المخرجات بتنسيق FP32 حتى عند تكميم النموذج.

المفاضلة بين الدقة والسرعة#

تُظهر نتائج YOLO26 المنشورة على COCO أن رأس one-to-many يحسّن mAP للكشف بمقدار 0.6–0.8 نقطة عبر المقاييس الخمسة: على سبيل المثال، 40.9 مقابل 40.1 لـ YOLO26n، و57.5 مقابل 56.9 لـ YOLO26x. يتجنب رأس one-to-one مرحلة NMS ويُفضّل زمن الاستجابة المنخفض. تفسر هذه النتائج الإعداد الافتراضي، لكنها لا تضمن تحسنًا على كل مجموعة بيانات.

تستخدم قياسات السرعة المنشورة للاستدلال الخالي من NMS nms=False. قارن الدقة وزمن الاستجابة باستخدام إعداد الرأس نفسه، وحجم الصورة نفسه، والدقة نفسها، والأجهزة نفسها.

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

  • يحد هذا الخيار من الاكتشافات التي يعيدها التنبؤ والتحقق. وفي عمليات التصدير الشاملة من البداية إلى النهاية وذات NMS المضمّن، يكون الحد جزءًا من المخطط، لذا أعد التصدير لتغييره؛ ويُستثنى من ذلك NMS المضمّن لكشف CoreML، إذ لا يفرض حدًا للاكتشافات. وقد يحتوي خرج الاستدلال الشامل من البداية إلى النهاية على مرشحين أقل عندما توفر الصورة عددًا من المراسي يقل عن max_det.

  • نعم، عند استخدام nms=False أو nms=True مع حد الاكتشاف الافتراضي. لا يحدد الشكل وحده أي رأس تم تصديره. أما تصدير الكشف الخام الافتراضي على COCO فعادةً ما يكون شكله (1, 84, 8400) عند imgsz=640.

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

التعليقات