الرؤية الحاسوبية2017متوسط10 دقيقة قراءة

شبكات هرم السِّمات لكشف الأجسام

Feature Pyramid Networks for Object Detection

Lin, T.-Y. · Dollár, P. · Girshick, R. · He, K. · Hariharan, B. · Belongie, S. — CVPR

المشكلة

كواشف الأجسام مثل Faster R-CNN تعتمد على خريطة سمات واحدة مأخوذة من آخر طبقة التفافية. هذه الطبقة تفهم المحتوى جيداً — تُميّز أن «هذه قطة» مثلاً — لكن دقتها المكانية أصغر بـ32 مرة من الصورة الأصلية، وبالتالي الأجسام الصغيرة تضيع تماماً. الحل الكلاسيكي كان هرم الصور: شغّل الكاشف على نُسَخ مُصغَّرة ومُكبَّرة من الصورة نفسها. النتائج جيدة لكن الكلفة الحسابية تتضاعف عدة مرات. فتخلّت كواشف التعلم العميق عن هذا الأسلوب سعياً وراء السرعة، لكنها دفعت الثمن: أداء ضعيف على الأجسام الصغيرة.

الإسهام

الفكرة الأساسية أن أي شبكة التفافية تبني هرماً داخلياً بطبيعتها أثناء التمرير الأمامي. شبكة هرم السِّمات تستغلّ هذا الهرم الموجود فعلاً بدل بنائه من الصفر. المسار التصاعدي يُنتج خرائط سمات بأحجام 1/4 و1/8 و1/16 و1/32 من المدخل — كلّما تعمّقنا زادت قوة الفهم الدلالي وقلّت الدقة المكانية. ثم يأتي المسار التنازلي ليأخذ القمّة الغنية دلالياً ويرفع دقتها ويدمجها مع الطبقات الأدنى الغنية بالتفاصيل، عبر وصلات جانبية (التفاف 1×1 ثم جمع عنصري). النتيجة: كل مستوى في الهرم يجمع بين القوة الدلالية والدقة المكانية معاً. وحين أُدمجت مع Faster R-CNN، حققت أفضل النتائج على معيار COCO بدون أي إضافات أو حِيَل.

الأثر

صارت شبكة هرم السِّمات المكوّن المعياري الذي يتوسّط كل كاشف حديث تقريباً: Mask R-CNN وRetinaNet وYOLOv3 وما تلاه وFCOS وكاشف Swin Transformer كلها تعتمد عليها. أثبتت هذه البنية أن دمج السِّمات عبر مقاييس متعددة ممكن بكلفة قليلة وبفاعلية عالية ودون ارتباط بعمود فقري معيّن — فكرة نجحت لدرجة أنها صارت بديهية لا يُستغنى عنها. كل نظام تصدّر لائحة COCO منذ 2017 يستخدم شكلاً من أشكال هرم السِّمات.

تخيّل حارس أمن يراقب موقف سيارات بكاميرا واحدة مثبّتة على عمود مرتفع. السيارات واضحة من هذا الارتفاع، لكن لوحات الأرقام مجرد بُقع لا تُقرأ — الكاميرا بعيدة جداً عن هذه التفاصيل الصغيرة.

الحل البديهي: ركّب كاميرات عند ارتفاعات مختلفة. ستقرأ اللوحات وترى السيارات كاملة، لكنك ستحتاج أربعة أضعاف المعدّات والمعالجة.

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

المشكلة: مقياس واحد لا يكفي الجميع

تخيّل مشهد شارع فيه مشاة بارتفاع 300 بكسل وإشارة مرور بعرض 20 بكسل فقط — فارق مقياس يصل إلى 15 ضعفاً. الكاشف الذي يعمل على واحدة يقع في مأزق لا مخرج منه:

  • الخرائط عالية (الطبقات المبكرة) تلتقط الأجسام الصغيرة لكنها لا تفهم ما تراه — ترصد حوافّاً دون أن تعرف أنها «إشارة قف».
  • الخرائط منخفضة الدقة (الطبقات العميقة) تفهم الفئات لكنها تُذيب التفاصيل المكانية — تعرف أن هناك «شخصاً» لكنها لا تستطيع تحديد موقعه إن كان بحجم 20 بكسل.

قبل شبكة هرم السِّمات، كان أمام الباحثين حلّان وكلاهما ناقص. أهرام الصور — أي تشغيل على نسخ مُعاد تحجيمها من الصورة — تُعطي سمات متعددة المقاييس لكن بكلفة حسابية هائلة. أما مثل SSD فكانت تتنبأ من طبقات مختلفة، لكنها لم تُثرِ الطبقات المبكرة بأيّ فهم دلالي عميق.

افتح في المختبر
بدّل بين الاستراتيجيات لتقارن كيف تتعامل كلٌّ منها مع الكشف على مقاييس متعددة. شبكة هرم السِّمات تمنح كل مستوى التفاصيل والفهم الدلالي في آنٍ واحد.
تستيقظ التجربة عند وصولك…

المسار التصاعدي: الهرم الموجود أصلاً

أي تبني هرماً بطبيعتها أثناء التمرير الأمامي، دون أن تطلب ذلك منها صراحةً. في ResNet مثلاً، مخرَج كل مرحلة (conv2 وconv3 وconv4 وconv5) يكون بنصف الدقة المكانية للمرحلة السابقة وضعف عدد . نُسمّي هذه المخرجات (C₂, C₃, C₄, C₅)، وتبتعد عن حجم المدخل بخطوات مكانية (4, 8, 16, 32).

هذا هو المسار التصاعدي. فكّر فيه كتسلّق جبل: كلّما صعدت رأيت مساحة أوسع من المشهد — أي سياقاً دلالياً أغنى — لكن التفاصيل الصغيرة تحت قدميك تتلاشى. المستوى C₅ هو قمّة الجبل: أعمق فهم دلالي وأقل دقة مكانية.

المسار التنازلي والوصلات الجانبية: وصفة شبكة هرم السِّمات

جوهر الابتكار عملية دمج من ثلاث خطوات تتكرر عند كل مستوى هرمي، بدءاً من الأعلى نزولاً إلى الأسفل:

الخطوة 1 — رفع الدقة. نأخذ خريطة السمات من المستوى الأعلى (أخشن مكانياً لكن أغنى دلالياً) ونرفع دقتها ضعفين باستيفاء أقرب جار، حتى يتطابق حجمها مع المستوى الذي تحتها.

الخطوة 2 — توحيد القنوات. نُطبّق بحجم 1×1 على الخريطة التصاعدية المقابلة (Cₙ) لاختزال قنواتها إلى عرض ثابت d = 256. هذه هي الوصلة الجانبية، وتعمل كمُترجم يجعل السمات التصاعدية والتنازلية تتحدث «اللغة» نفسها — أي بُعد القنوات ذاته.

الخطوة 3 — الدمج. نجمع الخريطتين عنصرياً (element-wise addition)، ثم نُمرّر الناتج عبر التفاف 3×3 لتنعيم التشوّهات الناجمة عن رفع الدقة. الناتج هو Pₙ — مستوى هرمي يجمع بين الدلالات العميقة القادمة من الأعلى والدقة المكانية من مستواه الأصلي.

تبدأ العملية من P₅ (وهو ببساطة C₅ بعد التفاف 1×1) ثم تتسلسل نزولاً إلى P₂. الهرم النهائي (P₂, P₃, P₄, P₅) يحتفظ بالأحجام المكانية ذاتها لـ(C₂, C₃, C₄, C₅) لكن كل مستوى فيه أصبح يحمل سمات دلالية قوية.

افتح في المختبر
تابع العمليات الثلاث التي تُنشئ كل مستوى في الهرم خطوة بخطوة. الوصلة الجانبية هي الابتكار المحوري.
تستيقظ التجربة عند وصولك…
Pn=Conv3×3 ⁣(  Upsample(Pn+1)+Conv1×1(Cn)  )P_n = \text{Conv}_{3\times3}\!\Big(\;\text{Upsample}(P_{n+1}) + \text{Conv}_{1\times1}(C_n)\;\Big)
معادلة الدمج في شبكة هرم السِّمات — سطر واحد يبني كل مستوى هرميارفع دقة المستوى الأغنى من الأعلى · اجمعه مع الخريطة التصاعدية المقابلة (بعد اختزال القنوات بالتفاف 1×1) · نعّم النتيجة بالتفاف 3×3. كرّر من الأعلى إلى الأسفل.

البنية الكاملة لشبكة هرم السِّمات

حين نجمع كل ما سبق نرى أن شبكة هرم السِّمات تلعب دور العنق — تقع بين العمود الفقري (مثل ResNet أو VGG) ورأس الكشف ( أو مُصنّفات Fast R-CNN). وظيفتها أن تأخذ السمات الخام من العمود الفقري وتحوّلها إلى هرم يكون كل مستوى فيه مُشبَعاً بالمعنى الدلالي.

ميزة مهمة: البنية لا تتقيّد بعمود فقري معيّن. استبدل ResNet-50 بـResNet-101 أو بأي شبكة التفافية أخرى، وستجد أن شبكة هرم السِّمات تعمل كما هي. هذه المرونة هي ما جعلها اللبنة المعمارية المعيارية في عالم الكشف.

افتح في المختبر
استكشف البنية الكاملة لشبكة هرم السِّمات. انقر على أي مستوى لرؤية دوره ودقته. فعّل أو أوقف مراحل العمود الفقري.
تستيقظ التجربة عند وصولك…

شبكة هرم السِّمات مع شبكة اقتراح المناطق: مقترحات عند كل مقياس

في Faster R-CNN الأصلي، تمرّ شبكة اقتراح المناطق (RPN) على خريطة سمات واحدة وتستخدم بأحجام ونسب أبعاد متعددة لاقتراح مناطق قد تحتوي أجساماً. لكن محاولة كشف جسم صغير من خريطة خشنة بمقياس 1/32 أشبه بمحاولة قراءة نصّ دقيق من الطرف الآخر للغرفة.

ما تفعله شبكة هرم السِّمات هو إلحاق رأس RPN نفسه — التفاف 3×3 صغير يليه فرعا تصنيف وانحدار — بـكل مستوى هرمي على حدة. وهنا يأتي التبسيط الأنيق: بما أن كل مستوى يُغطّي مقياساً مكانياً مختلفاً بطبيعته، فلم تعد المربعات الإرسائية بحاجة للتنوّع في الحجم — يكفي أن تتنوّع في فقط (1:1 و1:2 و2:1). P₂ يتكفّل بالأجسام الأصغر (مساحة إرساء 32²)، وP₃ بـ64²، وP₄ بـ128²، وP₅ بـ256². المقياس مُرمَّز في بنية الهرم نفسه، لا في المربعات الإرسائية.

هذا التغيير وحده رفع بـ8 نقاط فوق Faster R-CNN الأصلي على معيار COCO — تحسّن ضخم مصدره بصيرة معمارية وليس حيلة في التدريب.

k=k0+log2(wh/224)k = \lfloor k_0 + \log_2(\sqrt{wh}/224) \rfloor
تعيين منطقة الاهتمام إلى مستوى الهرم في Fast R-CNN المبني على شبكة هرم السِّماتكل منطقة اهتمام (RoI) بعرض w وارتفاع h تُعيَّن إلى المستوى الهرمي Pₖ. المناطق الصغيرة تذهب إلى المستويات الدقيقة (P₂)، والمناطق الكبيرة إلى المستويات الخشنة (P₅). القيمة k₀ = 4 تعني أن منطقة بحجم 224×224 تُعيَّن إلى P₄ — المقياس المرجعي لـImageNet.

توزيع المربعات الإرسائية عبر المستويات الهرمية

من أكثر الجوانب أناقةً في شبكة هرم السِّمات طريقتها في توزيع مهمّة الكشف على المستويات الهرمية. بدلاً من إثقال خريطة سمات واحدة بـمربعات إرسائية من كل الأحجام — كما كان الحال في Faster R-CNN — يُسنَد كل مقياس إلى المستوى الذي يتناسب معه بشكل طبيعي. الأجسام الصغيرة تُكشف في P₂ عالي الدقة، والأجسام الكبيرة في P₅ منخفض الدقة. رأس الكشف واحد ومُشترك بين جميع المستويات — الأوزان نفسها تُطبَّق على سمات مناسبة لكل مقياس.

افتح في المختبر
انقر على أجسام بأحجام مختلفة لترى أي مستوى هرمي يكشفها. صغير → P₂، كبير → P₅.
تستيقظ التجربة عند وصولك…

شبكة هرم السِّمات في شيفرة برمجية

المسار التنازلي لشبكة هرم السِّمات — تطبيق مُبسَّطpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import torch
import torch.nn as nn
import torch.nn.functional as F

class FPN(nn.Module):
    """شبكة هرم سِمات مبسّطة فوق عمود فقري ResNet."""

    def __init__(self, in_channels_list, out_channels=256):
        super().__init__()
        # الوصلات الجانبية: التفاف 1×1 لتوحيد أبعاد القنوات
        self.laterals = nn.ModuleList([
            nn.Conv2d(in_ch, out_channels, 1)
            for in_ch in in_channels_list        # مثلاً [256, 512, 1024, 2048]
        ])
        # التفافات التنعيم: تقليل التشوّهات بعد الجمع
        self.smooths = nn.ModuleList([
            nn.Conv2d(out_channels, out_channels, 3, padding=1)
            for _ in in_channels_list
        ])

    def forward(self, features):
        """features: [C2, C3, C4, C5] من ResNet."""
        # 1. تطبيق الالتفافات الجانبية 1×1
        laterals = [l(f) for l, f in zip(self.laterals, features)]

        # 2. المسار التنازلي: ابدأ من الأعمق واجمع عند كل مستوى
        for i in range(len(laterals) - 1, 0, -1):
            upsampled = F.interpolate(
                laterals[i], scale_factor=2, mode='nearest'
            )
            laterals[i - 1] = laterals[i - 1] + upsampled

        # 3. نعّم كل خريطة مدمجة
        pyramid = [s(l) for s, l in zip(self.smooths, laterals)]
        return pyramid  # [P2, P3, P4, P5]

التجارب: ماذا يُساهم كل مكوّن

أجرى المؤلفون دراسة استئصالية مُحكمة على معيار COCO لقياس أثر كل مكوّن بمعزل عن غيره:

  • الوصلات الجانبية فقط (بدون مسار تنازلي): AR₁₀₀ = 44.9. توحيد القنوات يُفيد، لكن لا يصل أي إثراء دلالي من الأعلى.
  • المسار التنازلي فقط (بدون وصلات جانبية): AR₁₀₀ = 44.1. الدلالات تنزل من القمة، لكنها تفقد التثبيت المكاني الذي توفّره الخرائط التصاعدية.
  • النظام الكامل (المسار التنازلي + الوصلات الجانبية): AR₁₀₀ = 56.3 — قفزة بـ8 نقاط كاملة فوق خط الأساس أحادي المقياس (AR₁₀₀ = 48.3 على C₅ وحده).

وحين أُضيف Fast R-CNN فوق الهرم لمهمة ، تحسّنت الدقة المتوسطة (AP) بـ2.3 نقطة على COCO وبـ3.8 نقطة على PASCAL مقارنة بخط أساس قوي أحادي المقياس. النظام النهائي وصل إلى 59.1% في AP₅₀ على COCO test-dev، متفوّقاً على جميع الأنظمة الفردية بما فيها الفائزون بتحدّي COCO 2016.

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

ما وراء المستطيلات: شبكة هرم السِّمات للتجزئة

لم تقتصر فائدة شبكة هرم السِّمات على كشف الأجسام بالمستطيلات، بل أثبت المؤلفون أنها قادرة أيضاً على توليد مقترحات . بإضافة رأس التفافي صغير (شبكة 5×5 تتنبأ بأقنعة بحجم 14×14) إلى كل مستوى هرمي، أنتج النظام مقترحات أقنعة تفوّقت على DeepMask وSharpMask. هذه القدرة مهّدت الطريق مباشرة لـMask R-CNN الذي استبدل رأس المقترحات بفرع تنبؤ أقنعة كامل، وأصبح أول نظام عملي لتجزئة النسخ.

مبادئ التصميم التي جعلت شبكة هرم السِّمات تدوم

الأثر: أحفاد شبكة هرم السِّمات

  1. 2017

    نشر شبكة هرم السِّمات (CVPR)

    قدّم Lin وزملاؤه شبكة هرم السِّمات وحققوا بها أفضل أداء على معيار COCO للكشف، ببنية بسيطة قائمة على مسار تنازلي ووصلات جانبية فوق ResNet.

  2. 2017

    RetinaNet

    استخدم Lin وزملاؤه شبكة هرم السِّمات عنقاً في كاشف أحادي المرحلة، وأقرنوها بدالة الخسارة البؤرية لمعالجة اختلال توازن الفئات. بذلك ردموا الفجوة بين الكواشف أحادية المرحلة وثنائيّتها.

  3. 2017

    Mask R-CNN

    بنى He وزملاؤه على شبكة هرم السِّمات + Faster R-CNN وأضافوا فرعاً للتنبؤ بالأقنعة، فجمعوا كشف الأجسام وتجزئة النسخ في نموذج واحد.

  4. 2018

    YOLOv3 يتبنّى عنقاً شبيهاً بشبكة هرم السِّمات

    أدخل Redmon وFarhadi التنبؤ متعدد المقاييس مع دمج السمات على طريقة شبكة هرم السِّمات في YOLO، فتحسّن كشف الأجسام الصغيرة تحسّناً كبيراً.

  5. 2019

    PANet وNAS-FPN وBiFPN

    بدأ الباحثون بتكديس الأهرام والبحث المعماري عن بنى هرمية مثلى وجعل تدفق المعلومات ثنائي الاتجاه — كلها تطويرات انبثقت من الفكرة الأساسية لشبكة هرم السِّمات.

  6. 2021

    كاشف Swin Transformer

    أثبت Liu وزملاؤه أنه حتى عند استبدال الشبكات الالتفافية بعمود فقري من نوع Transformer، يبقى عنق شبكة هرم السِّمات ضرورياً للكشف متعدد المقاييس.

ما تركته شبكة هرم السِّمات ليس كاشفاً بعينه، بل نمطاً معمارياً: أثرِ السمات متعددة المقاييس بتمرير المعلومات صعوداً ونزولاً. كل مرة ترى كاشفاً حديثاً يحتوي «عنقاً» — سواء PANet أو BiFPN أو NAS-FPN — فأنت تنظر إلى امتداد مباشر لفكرة شبكة هرم السِّمات.

المرجعLin, Dollár, Girshick, He, Hariharan, Belongie. Feature Pyramid Networks for Object Detection. CVPR, 2017.

مصطلحات هذه الورقة