Meet YOLO26: next-gen vision AI.

Link to this sectionشرح بنية YOLO: من YOLOv3 إلى YOLO26#

يتكون كل نموذج Ultralytics YOLO من ثلاث مراحل: backbone لاستخراج الميزات، و neck لدمجها عبر مقاييس مختلفة، و head للتنبؤ بالمربعات والفئات. يوثق هذا الدليل الوحدات التي تشكل كل مرحلة وكيف تغيرت من YOLOv3 إلى YOLO26، مع تتبع كل مكون إلى تعريفه في ملفات التكوين الموجودة في ultralytics/cfg/models/ وفئات الوحدات في ultralytics/nn/modules/.

يتم تعريف كل نموذج بشكل تصريحي في ملف YAML كقائمة مرتبة من الطبقات، حيث تتبع كل طبقة تنسيق [from, repeats, module, args]: الطبقة (أو الطبقات) التي تغذيها، وعدد مرات تكرار الوحدة، وفئة الطبقة (Conv, C3k2, SPPF, Detect, …)، ووسائط المُنشئ الخاصة بها. يوثق دليل تكوين نموذج YAML هذا التنسيق - بما في ذلك كيفية قياس repeats و args مع مضاعفات العمق والعرض للمتغير - جنبًا إلى جنب مع نظام تحليل الوحدة بالكامل. يركز هذا الدليل على الوحدات نفسها وكيف تغيرت من إصدار إلى آخر.

Link to this sectionالمراحل الثلاث#

يوجه كل نموذج Ultralytics YOLO الصورة عبر ثلاث مراحل متسلسلة، كل منها له وظيفة متميزة:

المرحلةالوظيفةالمخرجات
Backboneاستخراج الميزات من صورة الإدخال بدقة متعددةخرائط الميزات عند الخطوات 8، 16، و 32 (P3، P4، P5)
Neckدمج الميزات عبر المقاييس بحيث يكون للأجسام الصغيرة والكبيرة سياقخرائط الميزات المدمجة متعددة المقاييس
Headالتنبؤ بمربعات الإحاطة ونتائج الفئات من الميزات المدمجةالاكتشافات لكل نقطة ارساء

الوحدة الأساسية هي كتلة Conv (المحددة في conv.py): التفاف ثنائي الأبعاد، batch normalization، وتنشيط SiLU، مطبقة بالتسلسل. يتم بناء كل وحدة أكبر أدناه من خلال تكوين كتل Conv.

Link to this sectionمخططات البنية#

يحتفظ كل إصدار بنفس هيكل backbone → neck → head ويغير مراحل محددة. تظهر علامات التبويب أدناه البنية لكل إصدار: تتبع مراحل backbone و neck التكوينات في ultralytics/cfg/models/، بينما يتم رسم رؤوس YOLOv3 و YOLOv5 في شكلها الأصلي المستند إلى الارتساء بدلاً من رأس u-variant الخالي من الارتساء الذي تشحنه تكوينات الحزمة الخاصة بهم بالفعل. يوضح التنقل عبر علامات التبويب ما أضافه كل جيل. باختصار، التطور هو: YOLOv3 هو كاشف يعتمد على الارتساء ويقتصر على FPN فقط؛ يضيف YOLOv5 مسار PAN السفلي و SPPF؛ يتحول YOLOv8 إلى كتلة C2f مع رأس خالي من الارتساء DFL؛ يدرج YOLO11 انتباه C2PSA وكتلة C3k2؛ ويضيف YOLO26 بقايا SPPF ويجعل الرأس خاليًا من NMS وخاليًا من DFL. تتبع ألوان العقدة اتفاقية مخطط التوثيق: إدخال أخضر، backbone أزرق، تجميع مكاني وانتباه رمادي، neck برتقالي، رأس ومخرج بنفسجي.

flowchart TD
    IN[Input 640x640]:::start --> ST[Conv stem<br/>5x stride-2 down to P1-P5]:::proc
    ST --> BB[Darknet-53 backbone<br/>stacked Bottleneck]:::proc
    BB --> FPN[Neck FPN only<br/>top-down Upsample + Concat]:::decide
    FPN --> HD[Detect head<br/>3 scales, anchor-based]:::out
    HD --> O[Predictions + NMS]:::out
    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef decide fill:#FF9800,color:#fff
    classDef out fill:#9C27B0,color:#fff

تُظهر مخططات YOLOv3 و YOLOv5 الرأس الأصلي المستند إلى الارتساء. تشحن حزمة ultralytics تكوينات YOLOv3u و YOLOv5u الخالية من الارتساء — نفس بنيات Darknet-53 و C3 مع رأس Detect الخاص بـ YOLOv8 — الموصوفة تحت رأس الاكتشاف.

Link to this sectionكتل Backbone: Bottleneck → C3 → C2f → C3k2#

يقوم الـ backbone بتكديس كتلة CSP (جزئية عبر المرحلة) متكررة بين طبقات أخذ العينات الفرعية Conv ذات الخطوة 2. تلك الكتلة المتكررة هي التي تغيرت أكثر عبر الإصدارات. تعيش جميع الكتل أدناه في block.py; c1/c2 هي قنوات الإدخال/الإخراج و c = 0.5 * c2 هو العرض المخفي.

Link to this sectionBottleneck (YOLOv3)#

الوحدة الأساسية هي Bottleneck: طبقتان Conv (نواة افتراضية (3, 3)) مع إضافة بقايا اختيارية عندما يكون shortcut=True و c1 == c2. يقوم backbone Darknet-53 الخاص بـ YOLOv3 بتكديس هذه مباشرة، بدون تقسيم CSP، ويكتشف على ثلاثة مقاييس (خطوات 8، 16، 32).

Link to this sectionC3 (YOLOv5)#

YOLOv5's C3 splits the input across two 1x1 convolutions: cv1 feeds n sequential Bottleneck blocks (kernels (1, 1) then (3, 3)), cv2 bypasses them. The two paths are concatenated and fused by a third 1x1 Conv:

def forward(self, x):
    # C3: bottleneck path m(cv1(x)) concatenated with bypass cv2(x), then fused by cv3
    return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))

فقط مخرج الـ bottleneck النهائي يصل إلى التفاف الدمج، لذا يرى cv3 خرائط ميزتين.

Link to this sectionC2f (YOLOv8)#

YOLOv8's C2f ("CSP Bottleneck with 2 convolutions, faster") changes which features reach the fusion conv:

  1. cv1 = Conv(c1, 2 * c, 1)، ثم تقوم chunk(2) بتقسيم المخرج إلى اثنين من موترات القنوات c.
  2. تعمل n من كتل Bottleneck(c, c) (نواة (3, 3), (3, 3)) بالتسلسل، حيث يتم تغذية كل منها بمخرج الكتلة السابقة.
  3. يتم ربط جميع الموترات الوسيطة n + 2 ودمجها بواسطة cv2 = Conv((2 + n) * c, c2, 1).

حيث يمرر C3 خرائط ميزتين إلى التفاف الدمج الخاص به، يمرر C2f عدد n + 2 — يتم إعادة استخدام كل مخرج bottleneck وسيط.

Link to this sectionC3k2 (YOLO11 و YOLO26)#

يستخدم YOLO11 و YOLO26 الوحدة C3k2، وهي فئة فرعية من C2f تتبادل الوحدة المتكررة. كل واحدة من الكتل n تصبح، اعتمادًا على أعلام المُنشئ:

  • Bottleneck عادي (افتراضي، c3k=False
  • كتلة C3k (c3k=True) — متغير C3 مع حجم نواة قابل للتكوين، أو
  • زوج Bottleneck + PSABlock (attn=True).

يضبط وسيط YAML الثاني c3k؛ على سبيل المثال [-1, 2, C3k2, [512, True]] يبني وحدة C3k2 واحدة عند 512 قناة إخراج تكون كتلها الداخلية C3k (بما أن c3k=True). بالنسبة لوحدات CSP، يصبح حقل repeats - هنا 2، قبل أن يتم قياسه بواسطة مضاعف عمق المتغير - هو عدد التكرار الداخلي للكتلة بدلاً من تكديس وحدات منفصلة.

Link to this sectionالتجميع المكاني: SPP → SPPF#

At the end of the backbone, a spatial-pyramid-pooling block widens the receptive field. YOLOv5 replaced the original multi-kernel SPP with SPPF (Spatial Pyramid Pooling - Fast): a single MaxPool2d(kernel_size=5, stride=1, padding=2) applied n = 3 times in sequence, with the input and all three pooled outputs concatenated and fused by a 1x1 Conv. This is mathematically equivalent to SPP(k=(5, 9, 13)) but cheaper, because the chained 5x5 pools cover the larger kernels' receptive fields.

يمرر YOLO26 علم اختصار (SPPF, [1024, 5, 3, True]); نظرًا لأن c1 == c2 == 1024 في الطبقة الأكثر عمقًا، يضيف SPPF اتصال بقايا (return y + x).

Link to this sectionالانتباه المكاني: C2PSA (YOLO11+)#

أضاف YOLO11 وحدة C2PSA بعد SPPF. إنها كتلة CSP فرعها النشط عبارة عن كومة من n وحدات PSABlock (انتباه حساس للموقع): cv1 = Conv(c1, 2 * c, 1) تقسم الميزات، يمر نصفها عبر كومة PSABlock، ويقوم cv2 = Conv(2 * c, c1, 1) بدمج الربط. يطبق كل PSABlock انتباه متعدد الرؤوس متبوعًا بشبكة تغذية أمامية من طبقتين (Conv(c, 2 * c, 1)Conv(2 * c, c, 1))، كل منها مع اتصال بقايا. يحتفظ YOLO26 بنفس backbone C3k2 + C2PSA.

Link to this sectionNeck: FPN + PAN#

يقوم الـ neck بدمج خرائط ميزات P3/P4/P5 الخاصة بـ backbone مع شبكة هرمية للميزات (FPN) من الأعلى إلى الأسفل متبوعة بشبكة تجميع مسار (PAN) من الأسفل إلى الأعلى. في قسم رأس YAML، FPN هو nn.Upsample + Concat (نقل المعلومات الدلالية إلى دقة أعلى) و PAN هو Conv خطوة 2 + Concat (نقل معلومات التوطين مرة أخرى إلى الأعلى):

# YOLO11 head (FPN top-down, then PAN bottom-up)
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, C3k2, [512, False]] # 13
# ... second upsample + concat to P3 ...
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 13], 1, Concat, [1]] # cat head P4 (PAN)
- [-1, 2, C3k2, [512, False]] # 19

يعيد الـ neck استخدام كتلة backbone الخاصة بجيله - C3 في YOLOv5، C2f في YOLOv8، C3k2 في YOLO11 و YOLO26 - لذا تعمل كل نقطة دمج بنفس الوحدة التي يستخدمها backbone. تغذي المخرجات المدمجة الثلاثة الرأس. YOLOv3 هو الاستثناء: الـ neck الخاص به هو FPN من الأعلى إلى الأسفل فقط (رأس YAML الخاص به لا يحتوي على أخذ عينات فرعية خطوة 2)، بدون مسار PAN من الأسفل إلى الأعلى الذي قدمه YOLOv5.

Link to this sectionرأس الاكتشاف: مستند إلى الارتساء → خالي من الارتساء → خالي من NMS#

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

Link to this sectionرأس Detect منفصل وخالي من الارتساء#

استخدم كل من YOLOv3 و YOLOv5 الأصلي رأسًا مستندًا إلى الارتساء ومقترنًا: مربعات ارتساء محددة مسبقًا وفرع مشترك لتنبؤات المربعات والفئات. تحتفظ مستودعات ultralytics/yolov3 و ultralytics/yolov5 المستقلة بهذا التصميم المستند إلى الارتساء. بدلاً من ذلك، تشحن حزمة ultralytics الرئيسية متغيرات YOLOv3u و YOLOv5u الخالية من الارتساء - نفس بنيات Darknet-53 و C3 مع رأس Detect الخالي من الارتساء الخاص بـ YOLOv8 - وتكوينات yolov3.yaml و yolov5.yaml الموثقة هنا هي هذه المتغيرات u، وليس التصميم التاريخي.

رأس Detect (head.py) خالي من الارتساء ومنفصل: لكل مستوى هرمي يقوم بتشغيل فرعين متوازيين، ويتنبأ مباشرة على نقاط الشبكة بدلاً من مربعات الارتساء.

  • فرع المربع (cv2): Conv(x, c2, 3)Conv(c2, c2, 3)Conv2d(c2, 4 * reg_max, 1).
  • فرع الفئة (cv3): في YOLO11 و YOLO26، كتلتان منفصلتان بالعمق (DWConv + 1x1 Conv) → Conv2d(c3, nc, 1); يستخدم YOLOv8 المتغير القديم، طبقتان 3x3 ConvConv2d(c3, nc, 1).

لذا تصدر كل نقطة ارتساء no = nc + 4 * reg_max مخرجًا. تؤدي إزالة الارتساء المحددة مسبقًا إلى إسقاط أحجام ونسب مربعات الارتساء من المعلمات الفائقة التي يجب ضبطها.

Link to this sectionخسارة التنسيق التوزيعي (DFL)#

يقوم YOLOv8 و YOLO11 بتنظيم كل من إحداثيات المربع الأربعة كتوزيع عبر reg_max = 16 حاوية بدلاً من قياس واحد (الشكل التكاملي من Generalized Focal Loss). تعيد وحدة DFL تشكيل قنوات المربع 4 * reg_max إلى (4, reg_max)، وتطبق softmax عبر حاويات reg_max، وتأخذ فهرس الحاوية المتوقع - كل فهرس حاوية مرجح باحتمالية softmax الخاصة به، ثم مجموعها - كإحداثي متوقع. يتم تنفيذ هذا كتفافة 1x1 ثابتة أوزانها هي فهارس الحاوية arange(reg_max)، لذا فإن المجموع المرجح هو ناتج نقطي واحد.

Link to this sectionYOLO26: خالي من NMS، خالي من DFL#

يضبط YOLO26 معلمتي YAML يقرأهما الرأس مباشرة:

  • end2end: True - ينسخ Detect فروعه بعمق إلى رأس واحد لواحد (one2one_cv2/one2one_cv3) ينتج تنبؤًا واحدًا لكل كائن، مما يزيل خطوة المعالجة اللاحقة Non-Maximum Suppression (NMS). راجع دليل الاكتشاف الشامل للحصول على تفاصيل التصدير والترحيل.
  • reg_max: 1 - مع حاوية واحدة، تصبح self.dfl عبارة عن nn.Identity() و no = nc + 4; ينظم الرأس الإحداثيات مباشرة ولا تظهر عملية DFL في مخطط ONNX المُصدر.

عبر أحجام نماذجها الخمسة (n/s/m/l/x)، يصل YOLO26 إلى 40.9-57.5 mAP على COCO عند 1.7-11.8 مللي ثانية T4 TensorRT زمن الوصول، كما هو مذكور في ورقة YOLO26.

Link to this sectionملخص إصدار تلو الآخر#

الإصداركتلة Backboneالتجميع المكانيالانتباهرأس الاكتشافDFL
YOLOv3Darknet-53 (Bottleneck)لا شيء في التكوين الأساسيلا شيءأصلي: مستند إلى الارتساء; متغير u: خالي من الارتساءلا / نعم (u)
YOLOv5C3 (CSP)SPPFلا شيءأصلي: مستند إلى الارتساء; متغير u: خالي من الارتساءلا / نعم (u)
YOLOv8C2fSPPFلا شيءخالي من الارتساء، منفصلنعم (reg_max=16)
YOLO11C3k2SPPFC2PSAخالي من الارتساء، منفصلنعم (reg_max=16)
YOLO26C3k2SPPF + اختصارC2PSAخالي من الارتساء، خالي من NMS (end2end)تمت إزالته (reg_max=1)

للحصول على تفاصيل كل نموذج، وجداول الأداء، وأمثلة الاستخدام، راجع الصفحات الفردية لـ YOLOv3, YOLOv5, YOLOv8, YOLO11, و YOLO26.

Link to this sectionافحص البنية بنفسك#

تطبع طريقة model.info() ملخصًا للطبقة، والمعلمة، و FLOPs، وقائمة الوحدات المحللة متاحة على model.model.model.

افحص بنية نموذج YOLO
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo11n.pt")

# Fuse Conv + BatchNorm layers so counts match the published specs
model.fuse()

# Print a summary: layers, parameters, gradients, GFLOPs
model.info()

# Inspect the detection head (the last module in the network)
head = model.model.model[-1]
print(type(head).__name__, "| reg_max:", head.reg_max, "| end2end:", head.end2end)

يُظهر تشغيل المقتطف عبر ثلاثة أجيال التغييرات عدديًا. هذه هي مخرجات نماذج مدمجة حقيقية من حزمة ultralytics، تطابق أعداد المعلمات و FLOPs المنشورة على كل صفحة نموذج:

النموذجالطبقاتالمعاملاتGFLOPsreg_maxend2endطبقة DFL
YOLOv8n723,151,9048.716FalseDFL
YOLO11n1002,616,2486.516FalseDFL
YOLO26n1222,408,9325.41TrueIdentity

يُبلغ YOLO26n عن reg_max=1, end2end=True, وطبقة DFL Identity — التوقيع المعماري لرأسه الخالي من NMS والخالي من DFL.

أعداد مدمجة مقابل غير مدمجة

يتم الإبلاغ عن قيم المعلمات وFLOPs للنموذج المدمج (model.fuse())، الذي يدمج كل طبقة Conv مع طبقة التسوية الدفعية الخاصة بها. يتطابق هذا مع المواصفات المنشورة؛ حيث يبلغ نقطة الفحص المحملة حديثًا عن أعداد أعلى قليلاً قبل الدمج.

Link to this sectionالخلاصة#

عبر الإصدارات، تغيرت بنية YOLO مرحلة تلو الأخرى: انتقل العمود الفقري (backbone) من Darknet-53 إلى كتل C3 وC2f وC3k2 القائمة على CSP مع آلية الانتباه C2PSA؛ احتفظ الرقبة (neck) بهيكلها FPN + PAN بينما تحول SPP إلى SPPF؛ وانتقل الرأس (head) من الاعتماد على المرساة (anchor-based) إلى كونه خالٍ من المرساة، ثم إلى تصميم YOLO26 المتكامل الخالي من NMS والخالي من DFL.

لتحديد بنيات مخصصة، راجع دليل تكوين YAML للنموذج، أو قارن النماذج في صفحات النماذج. للاستفسارات، تواصل معنا على GitHub أو Discord.

Link to this sectionالأسئلة الشائعة#

Link to this sectionما هي المراحل الثلاث لبنية YOLO؟#

يحتوي نموذج YOLO على عمود فقري (backbone) يستخرج الميزات من الصورة بخطوات 8 و16 و32، ورقبة (neck) تدمج تلك الميزات عبر المقاييس باستخدام FPN وPAN، ورأس (head) يتنبأ بصناديق الإحاطة (bounding boxes) ونتائج التصنيف. يتبع كل نموذج Ultralytics YOLO من YOLOv3 إلى YOLO26 هذا التصميم المكون من ثلاث مراحل.

Link to this sectionما الفرق بين كتل C2f وC3k2؟#

C2f (في YOLOv8) هي كتلة CSP تقوم بدمج مخرجات كل Bottleneck داخلي — n + 2 من خرائط الميزات — قبل عملية الالتفاف (convolution) الخاصة بالدمج، حيث تمرر C3 الأقدم 2 فقط. C3k2 (في YOLO11 وYOLO26) هي فئة فرعية من C2f يمكنها استبدال كل Bottleneck بكتلة C3k (متغير من C3 مع حجم نواة قابل للتكوين) عندما يتم ضبط علامة c3k الخاصة بها. كلاهما محدد في block.py.

Link to this sectionما الذي تغير في البنية بين YOLOv8 وYOLO11؟#

أجرت YOLO11 ثلاثة تغييرات هيكلية على YOLOv8: استبدلت كتلة العمود الفقري والرقبة C2f بـ C3k2، وأدرجت كتلة الانتباه الذاتي C2PSA بعد SPPF، وحولت فرع التصنيف في الرأس إلى التفاتات أخف قابلة للفصل بعمق (depthwise-separable). كلاهما يحتفظ بنفس الرأس Detect غير المعتمد على المرساة والمفكك مع انحدار reg_max=16 DFL، لذا فإن التغييرات تقلل من أعداد المعلمات وFLOPs مع زيادة الدقة بدلاً من إعادة تصميم واجهة الكشف.

Link to this sectionهل YOLO خالية من المرساة (anchor-free)؟#

نماذج Ultralytics YOLO الحديثة خالية من المرساة. تستخدم YOLOv8 وYOLO11 وYOLO26 رأس Detect غير معتمد على المرساة ومفكك مع فروع منفصلة لانحدار الصندوق والتصنيف. كانت نماذج YOLOv3 وYOLOv5 الأصلية تعتمد على المرساة، لكن Ultralytics توفرها كإصدارات YOLOv3u وYOLOv5u، والتي تستخدم ملفات تكوينها نفس الرأس الخالي من المرساة مثل YOLOv8.

Link to this sectionهل أزالت YOLO26 خاصية NMS؟#

نعم — تقوم YOLO26 بضبط end2end=True، مما يمنح Detect رأساً من واحد إلى واحد ينتج تنبؤاً واحداً لكل كائن ويزيل خطوة المعالجة اللاحقة غير القصوى (Non-Maximum Suppression) المطلوبة من قبل النماذج السابقة. راجع دليل الكشف المتكامل (End-to-End) للحصول على التفاصيل.

Link to this sectionما هو فقدان التوزيع البؤري (DFL) ولماذا أزالته YOLO26؟#

يقوم DFL بانحدار كل إحداثي صندوق كتوزيع softmax عبر صناديق reg_max (16 افتراضياً في YOLOv8 وYOLO11) ويأخذ القيمة المتوقعة كإحداثي، بدلاً من التنبؤ بعدد عددي واحد. تضبط YOLO26 قيمة reg_max=1، لذا تصبح طبقة DFL عملية هوية، ويقوم الرأس بانحدار الإحداثيات مباشرة، ولا تظهر أي عملية DFL في رسوم ONNX أو TensorRT المصدرة.

Link to this sectionكيف يمكنني رؤية بنية نموذج YOLO معين؟#

قم بتحميل النموذج في Python واستدعِ model.info() للحصول على ملخص للطبقة والمعلمات وGFLOPs. توجد الطبقات التي تم تحليلها في model.model.model — على سبيل المثال، model.model.model[-1] هو رأس Detect، الذي يكشف عن سمات مثل reg_max وend2end. البنية الكاملة محددة في ملف تكوين YAML الخاص بالنموذج.

المساهمون

التعليقات