فهم الكشف الشامل من البداية إلى النهاية في 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=None | nms=False | |
|---|---|---|
| مخرجات الكشف | (N, nc + 4, 8400) | (N, 300, 6) |
| تنسيق الصندوق | xywh | xyxy |
| الدرجات | درجة واحدة لكل فئة ولكل مرشح | الثقة ومعرّف الفئة لكل اكتشاف |
| المعالجة الخارجية | تصفية الثقة و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. لكنها لا تحل محل إعادة بناء القناع أو فك ترميز النقاط المفتاحية أو معالجة الصناديق المدارة أو احتمالات التصنيف أو خرائط الفئات الدلالية أو فك ترميز العمق.