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

شبكات المحوِّل المكاني

Spatial Transformer Networks

Jaderberg, M. · Simonyan, K. · Zisserman, A. · Kavukcuoglu, K. — NeurIPS

المشكلة

الشبكات الالتفافية تعتمد على نوافذ تجميع أقصى صغيرة (عادةً 2×2) لتتحمّل الإزاحات المكانية البسيطة. المشكلة أنّ رقماً مكتوباً بزاوية 45 درجة أو مُنزاحاً إلى ركن الصورة يظهر للشبكة وكأنه مُدخل مختلف كلياً. ولكي تتعامل الشبكة مع تحويلات كبيرة كهذه، نحتاج إلى تكديس طبقات تجميع كثيرة، وهذا يستنزف عمق الشبكة وطاقتها في معالجة مشكلة لا تمتّ للتعرّف بصلة.

الإسهام

: وحدة قابلة للاشتقاق من ثلاثة أجزاء — تتنبّأ بمعاملات التحويل انطلاقاً من المُدخل، ومولّد شبكة يُسقط إحداثيات المخرج على إحداثيات المُدخل، وأداة اعتيان قابلة للاشتقاق تقرأ قيم البكسلات بالاستكمال ثنائي الخطية. الوحدة تُدرَّب من البداية إلى النهاية بالانتشار الخلفي، ولا تحتاج أي إشراف إضافي، ويمكن إدراجها في أي موضع داخل شبكة التفافية.

الأثر

المحوِّل المكاني أسّس لفكرة أنّ الشبكة العصبية تستطيع أن تتعلّم كيف تتلاعب مكانياً بخرائط سماتها الداخلية. هذه الفكرة أثّرت مباشرة في الالتفافات القابلة للتشوُّه، وآليات الانتباه في كشف الكائنات (DETR)، في الرؤية ثلاثية الأبعاد. الرسالة المركزية: الاستدلال الهندسي يمكن تعلُّمه بدلاً من برمجته يدوياً.

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

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

اللافت هنا أنّ اليد لا تعمل بقواعد مُعلَّبة، بل تنظر إلى كل مغلّف على حدة، وتُقرّر التعديل المناسب له، وتتصرّف بشكل مختلف مع كل واحد.

المشكلة: التجميع لا يمنح إلا ثباتاً محلياً

الشبكات الالتفافية تستخدم طبقات لتتحمّل الإزاحات المكانية الصغيرة. نافذة تجميع بحجم 2×2 تعني أنّ يمكن أن تنزاح ببكسل واحد دون أن يتغيّر الخرج. لكن حين نتكلّم عن تحويلات كبيرة — دوران بمقدار 30 درجة، أو تكبير بمعامل 2، أو إزاحات واسعة — فتكديس بضع طبقات تجميع لن يفي بالغرض.

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

افتح في المختبر
يساراً: التجميع الأقصى يستوعب إزاحة بكسل واحد لكنه يعجز أمام الدوران. يميناً: المحوِّل المكاني يُدير المُدخل بالكامل إلى وضعية قياسية مستقيمة.
تستيقظ التجربة عند وصولك…

البنية: ثلاثة أجزاء تعمل معاً

المحوِّل المكاني يتكوّن من ثلاثة أجزاء تعمل بالتتابع، مثل خطّ إنتاج من ثلاث مراحل:

1. شبكة تحديد الموقع — تنظر إلى المُدخلة وتُقرّر ما التحويل الذي ينبغي تطبيقه. يمكن أن تكون أي شبكة التفافية صغيرة أو حتى . طبقتها الأخيرة تُخرج المتجه θ الذي يحتوي معاملات التحويل (6 أرقام في حالة ). فكّر فيها بوصفها «العينين» اللتين تفحصان اتجاه الصورة.

2. مولّد الشبكة (Grid Generator) — يأخذ θ ويبني شبكة اعتيان: لكل بكسل في المخرج يحسب من أين يجب أن نقرأ في المُدخل. هذه هي «الخطة» — خريطة تربط إحداثيات الهدف بإحداثيات المصدر. في حالة التحويل التآلفي، العملية مجرد ضرب مصفوفات.

3. أداة الاعتيان (Sampler) — تُنفّذ الخطة فعلياً. لكل بكسل في المخرج، تقرأ قيمة المُدخل عند الموقع المحسوب باستخدام . ولأنّ هذا الاستكمال قابل للاشتقاق، تستطيع التدفق رجوعاً عبر أداة الاعتيان وصولاً إلى شبكة تحديد الموقع، فيتعلّم النظام بأكمله .

افتح في المختبر
اضغط «حوِّل» لمشاهدة المراحل الثلاث بالتتابع: شبكة تحديد الموقع تقرأ المُدخل، ومولّد الشبكة يبني خريطة الاعتيان، ثم أداة الاعتيان تُنتج المخرج المُصحَّح.
تستيقظ التجربة عند وصولك…

التحويل التآلفي: 6 أرقام تُعيد تشكيل الصورة

جوهر عمل مولّد الشبكة هو ربط الإحداثيات. لكل موضع بكسل (xit,yit)(x^t_i, y^t_i) في المخرج (الهدف)، نُحدّد من أين نقرأ في المُدخل (المصدر). في حالة التحويل التآلفي، العملية ضرب في مصفوفة بحجم 2×3.

قبل أن نصل إلى الصيغة الرياضية، تخيّل الأمر هكذا: لديك ورقة مُربّعات تمثّل المخرج. لكل مربّع في ورقتك، المصفوفة التآلفية تقول لك: «اذهب واقرأ من هذه النقطة في الصورة الأصلية». التقريب يُقلّص الشبكة أو يمدّدها، والدوران يُلفّها، والإزاحة تُحرّكها. وكل ذلك مُرمَّز في 6 أرقام فحسب.

(xisyis)=(θ11θ12θ13θ21θ22θ23)(xityit1)\begin{pmatrix} x^s_i \\ y^s_i \end{pmatrix} = \begin{pmatrix} \theta_{11} & \theta_{12} & \theta_{13} \\ \theta_{21} & \theta_{22} & \theta_{23} \end{pmatrix} \begin{pmatrix} x^t_i \\ y^t_i \\ 1 \end{pmatrix}
الربط التآلفي للشبكة — من إحداثيات المخرج إلى إحداثيات المُدخل(xit,yit)(x^t_i, y^t_i) = بكسل الهدف في المخرج · (xis,yis)(x^s_i, y^s_i) = موقع القراءة من المُدخل · θ₁₃, θ₂₃ = الإزاحة · θ₁₁, θ₂₂ = المقياس · θ₁₂, θ₂₁ = الدوران والقصّ · شبكة تحديد الموقع تتنبّأ بالقيم الست جميعها.
افتح في المختبر
اسحب المنزلقات لتغيير المعاملات التآلفية الستة وراقب كيف تتشوّه شبكة الاعتيان. المخرج يعرض دائماً ما «تراه» الشبكة بعد التحويل.
تستيقظ التجربة عند وصولك…

الاعتيان القابل للاشتقاق: الفكرة المحورية

مولّد الشبكة يُعطينا إحداثيات المصدر (xis,yis)(x^s_i, y^s_i)، لكن هذه الإحداثيات غالباً تقع بين مواقع البكسلات وليس عند مواضع صحيحة تماماً. السؤال: كيف تقرأ قيمة بكسل عند الموضع (3.7, 5.2)؟

الجواب هو الاستكمال ثنائي الخطية: ننظر إلى أقرب أربعة بكسلات صحيحة ونمزجها بأوزان تتناسب مع قُرب كل منها. مثلاً، الموضع (3.7, 5.2) يأخذ 70% من قيمة العمود 4 و30% من العمود 3، ويمزج الصفّين 5 و6 بالمنطق ذاته.

الخاصية الجوهرية هنا: هذا المزج قابل للاشتقاق. نستطيع حساب V/xis\partial V / \partial x^s_i — أي كيف يتغيّر المخرج إذا حرّكنا نقطة القراءة قليلاً — ثم نُمرّر هذا التدرج عبر مولّد الشبكة رجوعاً إلى شبكة تحديد الموقع. هذا بالتحديد ما يُمكّن الشبكة من أن تتعلّم أين تنظر، معتمدةً فقط على التصنيف النهائية.

Vic=nHmWUnmcmax(0,1xism)max(0,1yisn)V^c_i = \sum_n^H \sum_m^W U^c_{nm} \max(0, 1 - |x^s_i - m|) \, \max(0, 1 - |y^s_i - n|)
الاعتيان ثنائي الخطية — قراءة بكسلات قابلة للاشتقاقلكل بكسل مخرج VicV^c_i، نجمع مساهمات بكسلات المُدخل UnmcU^c_{nm} مُرجَّحة بقُربها من نقطة القراءة. عملياً، أربعة بكسلات فقط هي التي تُسهم لأنّ دالة max تُصفّر الباقي. هذه الصيغة قابلة للاشتقاق بالنسبة لكلٍّ من UU و(xis,yis)(x^s_i, y^s_i).
افتح في المختبر
اسحب نقطة القراءة (النقطة الحمراء) فوق شبكة المُدخل. راقب كيف تُسهم البكسلات الأربعة المجاورة في قيمة المخرج، مع ظهور الأوزان على شكل أعمدة.
تستيقظ التجربة عند وصولك…

كيف تتدفق التدرجات: التعلّم من البداية إلى النهاية

سلسلة التدرجات هي ما يجعل المحوِّل المكاني يتعلّم بلا إشراف مباشر. لا أحد يُخبر الشبكة كيف تُحوّل المُدخل — بل دالة خسارة التصنيف نفسها هي التي تُوجّه شبكة تحديد الموقع نحو التحويل الذي يُحسّن التعرّف.

السلسلة تعمل بالاتجاه العكسي: خسارة التصنيف تُولّد تدرجاً على خريطة سمات المخرج V. صيغة أداة الاعتيان قابلة للاشتقاق بالنسبة لخريطة سمات المُدخل U ولإحداثيات الشبكة (xs,ys)(x^s, y^s) معاً. وهذه الإحداثيات بدورها دالة قابلة للاشتقاق في θ (مجرد ضرب مصفوفات). وθ هو ببساطة مخرج شبكة تحديد الموقع — شبكة عصبية عادية يتعامل معها بشكل طبيعي.

Lθ=LVV(xs,ys)(xs,ys)θ\frac{\partial \mathcal{L}}{\partial \theta} = \frac{\partial \mathcal{L}}{\partial V} \cdot \frac{\partial V}{\partial (x^s, y^s)} \cdot \frac{\partial (x^s, y^s)}{\partial \theta}
سلسلة التدرجات عبر المحوِّل المكانيالخسارة → خريطة سمات المخرج → إحداثيات القراءة → معاملات التحويل. كل حلقة قابلة للاشتقاق، فيُدرِّب الانتشار الخلفي المعتاد الوحدة بأكملها. لا تعلّم معزَّز ولا إشراف منفصل — فقط دالة خسارة المهمة.
افتح في المختبر
اضغط «انشر التدرجات» لتشاهد حركة التدرج وهو يتدفّق من خسارة التصنيف عبر أداة الاعتيان ومولّد الشبكة وشبكة تحديد الموقع بالترتيب العكسي.
تستيقظ التجربة عند وصولك…

ما وراء التآلفي: التحويلات الإسقاطية والشريحة الرقيقة

التحويل التآلفي ليس إلا أبسط الخيارات. الإطار العام للمحوِّل المكاني يدعم أيّ تحويل قابل للاشتقاق:

  • التآلفي (6 معاملات): يشمل الدوران والتقريب والإزاحة والقصّ. الخطوط المتوازية تظلّ متوازية.

  • الإسقاطي (8 معاملات): يُضيف بُعد المنظور. الخطوط المتوازية قد تتلاقى، كما يحدث في صورة مُلتقطة من زاوية.

  • (TPS) (عدد متغيّر من المعاملات): تشوُّه غير جامد تتحكّم فيه مجموعة نقاط ضبط. تستطيع تسوية خطّ اليد المنحني أو تصحيح تشوُّهات موضعية. هذا أقوى الخيارات لكنه يحتاج أكبر عدد من المعاملات.

الاختيار بين هذه التحويلات يعتمد على طبيعة التشوُّهات الموجودة فعلاً في البيانات. إذا كانت المشكلة مجرد أرقام مدوَّرة، فالتحويل التآلفي يكفي. أما إذا كان خطّ اليد يحتوي تشوُّهات مرنة، فالشريحة الرقيقة تتفوّق.

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

أين نضع المحوِّل: عند المدخل أم في العمق أم بالتوازي

المحوِّل المكاني يمكن إدراجه في مواضع مختلفة داخل الشبكة الالتفافية، ولكل موضع دور مختلف:

عند المدخل — يعمل كمعالج مبدئي ذكي. شبكة تحديد الموقع ترى البكسلات الخام وتتعلّم قصّ الصورة وتدويرها وضبط حجمها. هذا الإعداد هو الأبسط والأكثر شيوعاً.

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

عدة محوِّلات بالتوازي — كل محوِّل يُركّز على منطقة مختلفة أو جزء مختلف من الكائن. في تصنيف الطيور مثلاً، محوِّل يتعلّم قصّ الرأس وآخر يقصّ الجسم — كل ذلك بلا أي بيانات توضيحية عن مواقع الأجزاء.

الفكرة ذاتها في شيفرة برمجية

محوِّل مكاني مُبسَّط بمكتبة NumPypython

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

import numpy as np

def affine_grid(theta, H, W):
    """بناء شبكة اعتيان من مصفوفة تآلفية 2×3.
    تُعيد إحداثيات المصدر لكل بكسل في المخرج."""
    # إحداثيات مُقيَّسة: من -1 إلى 1
    yt = np.linspace(-1, 1, H)
    xt = np.linspace(-1, 1, W)
    xt, yt = np.meshgrid(xt, yt)
    ones = np.ones_like(xt)
    # تكديس في إحداثيات متجانسة: (3, H*W)
    grid = np.stack([xt.ravel(), yt.ravel(), ones.ravel()])
    # تطبيق التآلفي: (2, 3) @ (3, H*W) -> (2, H*W)
    source = theta @ grid   # إحداثيات المصدر في فضاء المُدخل
    xs = source[0].reshape(H, W)
    ys = source[1].reshape(H, W)
    return xs, ys

def bilinear_sample(U, xs, ys):
    """اعتيان من الصورة U عند إحداثيات كسرية (xs, ys).
    هذا هو الجزء القابل للاشتقاق — التدرجات تتدفق عبره."""
    H, W = U.shape[:2]
    # تحويل من [-1,1] إلى فهارس بكسلية
    xs = (xs + 1) * 0.5 * (W - 1)
    ys = (ys + 1) * 0.5 * (H - 1)
    x0, y0 = np.floor(xs).astype(int), np.floor(ys).astype(int)
    x1, y1 = x0 + 1, y0 + 1
    # قصّ على حدود الصورة
    x0, x1 = np.clip(x0, 0, W-1), np.clip(x1, 0, W-1)
    y0, y1 = np.clip(y0, 0, H-1), np.clip(y1, 0, H-1)
    # أوزان الاستكمال ثنائي الخطية
    wa = (x1 - xs) * (y1 - ys)
    wb = (xs - x0) * (y1 - ys)
    wc = (x1 - xs) * (ys - y0)
    wd = (xs - x0) * (ys - y0)
    return wa[...,None]*U[y0,x0] + wb[...,None]*U[y0,x1] \
         + wc[...,None]*U[y1,x0] + wd[...,None]*U[y1,x1]

# الاستخدام: شبكة_تحديد_الموقع تتنبأ بـ theta، ثم:
# xs, ys = affine_grid(theta, H_out, W_out)
# output = bilinear_sample(input_image, xs, ys)

النتائج: ماذا يتعلّم المحوِّل المكاني

التجارب كشفت عن ثلاث نتائج أساسية:

  • أرقام MNIST المشوَّهة: حين نُضيف محوِّلاً مكانياً إلى شبكة كاملة الاتصال بسيطة (ST-FCN)، نحصل على تُعادل ما تحقّقه شبكة التفافية مع التجميع الأقصى، وذلك فقط بتعلّم تسوية الأوضاع. وإذا أضفناه إلى شبكة التفافية (ST-CNN) ينخفض الخطأ أكثر — من 0.8% إلى 0.5% على الأرقام المدوَّرة والمُزاحة والمُقرَّبة.

  • أرقام لوحات المنازل (SVHN): أربعة محوِّلات مكانية مُكدَّسة داخل شبكة التفافية حقّقت 3.6% خطأ تسلسلي، متفوّقةً على أفضل نتيجة سابقة (3.9%) التي اعتمدت على ومتوسّط مونت كارلو. المحوِّلات المكانية تعلّمت من تلقاء نفسها قصّ مناطق الأرقام الفردية وتكبيرها.

  • تصنيف الطيور الدقيق (CUB-200): محوِّلان مكانيان متوازيان تعلّما تلقائياً العمل ككاشفَي أجزاء — أحدهما يقصّ الرأس والآخر الجسم — بلا أي بيانات توضيحية عن الأجزاء. النتيجة: ارتفاع الدقة من 82.3% إلى 84.1%.

لماذا غيَّر كل شيء

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

هذا فتح الباب لعائلة كاملة من الأفكار: إذا تعلّمت الشبكة أين تنظر ()، فيمكنها أيضاً تعلُّم كيف تُشوِّه ()، وأيّ منطقة تُركّز عليها (محوِّلات الكشف مثل DETR)، بل وحتى كيف تُصيِّر مشاهد ثلاثية الأبعاد (التصيير القابل للاشتقاق).

  1. 2015

    شبكات المحوِّل المكاني

    قدّم جادربرغ وزملاؤه المحوِّل المكاني — وحدة قابلة للاشتقاق تتعلّم تحويلات مكانية تعتمد على المُدخل، وتُدرَّب من البداية إلى النهاية بلا إشراف إضافي.

  2. 2017

    الشبكات الالتفافية القابلة للتشوُّه

    عمّم داي وزملاؤه الفكرة: بدلاً من تحويل خريطة السمات بالكامل، كل نواة التفافية تتعلّم إزاحات مستقلّة لكل بكسل. هكذا تتكيّف الحقول الاستقبالية مع شكل الكائن بدلاً من التزام الشكل المستطيل.

  3. 2020

    DETR — محوِّل الكشف

    استخدم كاريون وزملاؤه الانتباه كآلية استعلام مكاني مُتعلَّمة لكشف الكائنات، مما استغنى عن المكوّنات المُصمَّمة يدوياً كصناديق الإرساء والكبت غير الأقصى. امتداد مباشر لفلسفة «تعلّم أين تنظر».

  4. 2020

    NeRF — حقول الإشعاع العصبية

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

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

المرجعJaderberg, Simonyan, Zisserman, Kavukcuoglu. Spatial Transformer Networks. NeurIPS, 2015.

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