الرؤية الحاسوبية2020متوسط15 دقيقة قراءة
RAFT: تحويلات الحقل التكرارية لجميع الأزواج للتدفق البصري
RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
Teed, Z. · Deng, J. — ECCV
المشكلة
تقدير التدفق البصري — أي معرفة كيف تحرّك كل بكسل بين إطارين متتاليين — من المهام الأساسية في الرؤية الحاسوبية. بحلول 2020 كانت أساليب التعلّم العميق قد حقّقت نتائج جيّدة، لكنها اعتمدت على أهرامات متدرّجة الدقة تبني مستخلص سمات مستقلاً لكل مستوى. هذا الأسلوب القائم على ثني الصورة عبر مقاييس متعدّدة عانى من ثلاث مشكلات: أخطاء المستويات الخشنة تتراكم وتنتقل إلى المستويات الأدق، والأجسام الصغيرة السريعة تختفي حين تُقلَّص الصورة بشدّة، والبنيات كانت ضخمة وبطيئة وصعبة على بيانات جديدة.
الإسهام
يُقدّم RAFT بنية من ثلاث مراحل — ، ثم حساب بين جميع أزواج البكسلات، ثم تنقيح تكراري عبر وحدة GRU التفافية — لتحلّ محلّ خطوط المعالجة التقليدية متدرّجة الدقة. الفكرة أنه يبني حجم ارتباط رباعي الأبعاد واحداً عند دقة ⅛ ثم يُجمّعه في هرم متعدّد المقاييس، ويستعمل وحدة تكرارية خفيفة لتحسين حقل التدفق بدءاً من الصفر. فاز RAFT بجائزة أفضل ورقة في ECCV 2020، وخفّض الخطأ بنسبة 30% على Sintel (EPE يبلغ 2.855) و16% على KITTI (F1-all يبلغ 5.10%)، مع تعميم قوي عبر مجموعات البيانات وتقارب أسرع 10 مرات.
الأثر
غيّر RAFT ملامح أبحاث التدفق البصري حين أثبت أن التنقيح التكراري على حجم ارتباط بدقة واحدة يتفوّق على الأساليب متدرّجة الدقة. صارت بنيته النموذج الذي تبنّته الأعمال اللاحقة مثل GMA وFlowFormer وSEA-RAFT، وانتقلت فكرة البحث في إلى مطابقة الاستيريو وتدفّق المشهد ثلاثي الأبعاد وتقدير العمق من الفيديو بما فيه Depth Anything. المبدأ العام — «ابنِ حجم تكلفة غنياً مرة واحدة ثم نقّحه تكرارياً» — يُشكّل اليوم أساس عائلة واسعة من أساليب المطابقة الكثيفة.
تخيّل أنك محقّق يفحص صورتين جويتين لنفس المدينة التُقطتا بفارق ثانية. مطلوب منك أن ترسم سهماً على كل مبنى وكل سيارة وكل شجرة يُبيّن إلى أين تحرّكت بالضبط. لو حاولت تخمين كل الأسهم دفعة واحدة ستغرق في التفاصيل. الأسهل أن تبني أولاً دليلاً مرجعياً ضخماً: لكل نقطة في الصورة الأولى تُسجّل مدى شبهها بكل نقطة في الصورة الثانية. بعدها تبدأ بتخمين أوّلي بسيط — «لا شيء تحرّك» — ثم ترجع للدليل وتُعدّل الأسهم. تكرّر العملية — راجِع الدليل ثم عدِّل، راجِع ثم عدِّل — وفي كل جولة تقترب أسهمك من الواقع.
هذا بالضبط ما يفعله RAFT. الدليل المرجعي هو حجم الارتباط. وعملية التعديل المتكرّرة هي مُشغّل التحديث التكراري. والمثير أن هذه الحلقة البسيطة — راجِع التشابه ثم صحّح التدفق — تتفوّق على كل الأساليب السابقة ببنية أبسط بكثير.
ما هو التدفق البصري؟
الفكرة وراء بسيطة: لدينا إطاران متتاليان من فيديو، ونريد أن نعرف لكل بكسل في الإطار الأول أين انتقل في الإطار الثاني. النتيجة متجه إزاحة يقول إن هذا البكسل صار عند . حين نحسب هذا المتجه لكل بكسل في الصورة نحصل على حقل تدفق — خريطة أسهم تصف حركة المشهد بالكامل.
المهم هنا أننا لا نتتبّع بضع نقاط مميّزة فحسب، بل نحسب الحركة لـكل بكسل على حدة. إطار بدقة 1080p فيه أكثر من مليوني بكسل، وكل واحد يحتاج متجه إزاحة خاصاً. تخيّل أنك ترسم سهماً على كل نقطة في لوحة تنقيطية لتُبيّن إلى أين انزاحت بين لحظتين.
التدفق البصري يدخل في تطبيقات كثيرة: تثبيت الفيديو، التعرّف على الأفعال، القيادة الذاتية، تحرير الفيديو، والتصوير الطبي. هو لبنة أساسية لأي نظام يحتاج أن يفهم الحركة في الفيديو.
البنية ذات المراحل الثلاث
تصميم RAFT يتكوّن من ثلاث مراحل واضحة، كل واحدة لها دور محدّد:
المرحلة الأولى — استخلاص السمات. شبكة مشتركة تأخذ الصورتين وتُحوّلهما إلى متجهات سمات مُكثّفة لكل بكسل عند دقة ⅛. وهناك سياق ثانٍ يعالج الصورة الأولى فقط ويُنتج سمات تُوجّه عملية التحديث لاحقاً.
المرحلة الثانية — حجم الارتباط. نأخذ بين كل زوج من متجهات السمات في الصورتين، فنحصل على مصفوفة رباعية الأبعاد بحجم عند دقة ⅛. بعدها نُجمّع هذا الحجم بالتوسيط على البُعدين الأخيرين لنحصل على هرم ارتباط من أربعة مستويات يلتقط التشابه على مقاييس مكانية مختلفة.
المرحلة الثالثة — التحديثات التكرارية. وحدة ConvGRU التفافية تبدأ من تدفق أولي يساوي صفراً. في كل تكرار تبحث في هرم الارتباط عن رقعة محلية حول تقديرها الحالي للتدفق، وتدمج سمات الارتباط مع سمات السياق، ثم تُخرج تصحيحاً يُضاف إلى التدفق. بعد عدّة تكرارات يتقارب التدفق نحو تقدير دقيق.
المراحل الثلاث قابلة للتفاضل وتُدرَّب بشكل .
المرحلة الأولى: استخلاص السمات — الرؤية بعيون مُتعلَّمة
يستخدم RAFT شبكتي ترميز لتحويل الصور الخام إلى تمثيلات مُكثّفة:
مُرمّز السمات () — يعمل على الصورتين و معاً. وهو شبكة التفافية ذات تأخذ كل صورة بأبعاد وتُنتج بأبعاد حيث . النقطة المهمة أن هذا المُرمّز يستعمل التي تعمل على كل صورة بمعزل عن الأخرى، فتصبح السمات غير متأثرة بالفروقات الشاملة في السطوع أو التباين بين الإطارين. الأوزان مشتركة بين الصورتين — كأنك تُعطي الصورتين لنفس المحلّل ليفحصهما بنفس القواعد.
مُرمّز السياق () — يعمل على فقط. بنيته مطابقة لمُرمّز السمات لكنه يستعمل بدلاً من تسوية النسخة، ويُنتج سمات السياق والحالة المخفية الأولية لوحدة GRU. دوره أن يلتقط معلومات خاصة بالصورة المرجعية — الحواف وحدود النسيج والإشارات الدلالية — ليُرشد مشغّل التحديث إلى كيفية تنقيح التدفق في كل موقع. إذا كان مُرمّز السمات يُشبه مترجماً يُحوّل الصورتين إلى لغة مشتركة، فمُرمّز السياق هو المُرشد المحلي الذي يعرف تضاريس الصورة الأولى جيّداً.
المرحلة الثانية: حجم الارتباط — جدول بحث التشابه
حجم الارتباط هو جوهر RAFT. الفكرة أننا نأخذ خريطتي السمات و ونحسب الجداء النقطي بين كل متجه سمات في الصورة الأولى وكل متجه في الصورة الثانية. إذا كان لكلتا الخريطتين أبعاد مكانية (حيث و)، فالناتج مصفوفة رباعية الأبعاد:
فكّر في حجم الارتباط كجدول بحث ضخم. لكل بكسل في الصورة الأولى تستطيع أن تبحث فيه عن مدى تشابهه مع أي بكسل في الصورة الثانية. القيم المرتفعة تعني تطابقاً قوياً والمنخفضة تعني تطابقاً ضعيفاً. لكن بدلاً من تفتيش الجدول بأكمله في كل مرة، يبني RAFT فهرساً متعدّد المقاييس — هرم الارتباط.
هرم الارتباط: رؤية القريب والبعيد معاً
حجم الارتباط الواحد يلتقط التشابه بدقة، لكن محدود — لا يرى إلا التطابقات القريبة. والمشكلة أن الأجسام السريعة تتحرّك مسافات كبيرة بين إطارين. لذلك يبني RAFT هرم ارتباط بتجميع البُعدين الأخيرين من بـ المتكرّر بأحجام نوى 1 و2 و4 و8:
في المستوى 0 يبقى الحجم بالدقة الكاملة على أبعاد الصورة الثانية. في المستوى 3 تنكمش تلك الأبعاد إلى . والنقطة الجوهرية أن البُعدين الأوّلين (أبعاد ) لا يُمسّان أبداً — فيظلّ لكل بكسل في الإطار المرجعي معلومات ارتباطه الخاصة.
لماذا هذا مهم؟ المستويات الخشنة من الهرم ترى مساحة أوسع فتلتقط الحركات الكبيرة، بينما المستويات الدقيقة تحفظ التفاصيل المكانية للحركات الصغيرة. الاثنتان معاً تُغطّيان كل الحالات. وهذا يختلف جذرياً عن الأساليب التقليدية متدرّجة الدقة، لأن الهرم هنا يُبنى من حجم ارتباط واحد بدقة سمات واحدة، لا من عدّة مستخلصات سمات بدقّات مختلفة.
البحث في حجم الارتباط. في كل تكرار يسأل مشغّل التحديث سؤالاً بسيطاً: «بناءً على تقديري الحالي للتدفق، ماذا يقول حجم الارتباط؟» عملياً، لكل بكسل في يحسب التدفق الحالي موقعه المُقدَّر في الصورة الثانية. بعدها يأخذ مُشغّل البحث رقعة بنصف قطر حول في حجم الارتباط ويأخذ عيّنات منها بـ. يتكرّر ذلك عند كل مستوى من الهرم، وتُدمج النتائج في متجه سمات واحد.
الفكرة تُشبه أنك تأخذ تخمينك الحالي وتفحص المنطقة المحيطة به في جدول البحث: «هل الدلائل القريبة تؤكّد تخميني أم تقول إن البكسل ذهب لمكان آخر؟» وبما أن البحث يتمّ على عدّة مستويات في آن واحد — نظرة شاملة من بعيد ونظرة مُفصّلة من قريب — يحصل مشغّل التحديث على سياق واسع ودقة محلية معاً.
المرحلة الثالثة: مُشغّل التحديث — التكرار نحو الحقيقة
مشغّل التحديث هو المحرّك الفعلي لـ RAFT. فكرته مستوحاة من خوارزميات التقليدية: تبدأ من حلّ أولي وتُحسّنه تدريجياً. هنا يبدأ من تدفق صفري ويُنتج سلسلة من التقديرات المتحسّنة حيث كل تحديث عبارة عن:
في كل تكرار ، يمرّ مشغّل التحديث بأربع خطوات:
- البحث في الارتباط — يستعمل التدفق الحالي ليأخذ عيّنة من رقعة محلية عند كل مستوى من هرم الارتباط.
- تجميع المدخلات — يدمج سمات الارتباط مع التدفق الحالي (المُرمَّز عبر طبقتي التفاف) ومع سمات السياق.
- تحديث GRU — يُمرّر المدخلات المُجمَّعة عبر وحدة GRU التفافية تُحدّث الحالة المخفية . الوحدة تستعمل بوابات منفصلة للأنماط الأفقية والعمودية (التفاف و).
- التنبؤ بالتدفق — يُمرَّر عبر طبقتي التفاف لإنتاج التصحيح .
الحالة المخفية تحمل ذاكرة تتراكم عبر التكرارات — الوحدة «تتذكّر» ما تعلّمته في الخطوات السابقة. الأمر يُشبه محقّقاً لا يبدأ من الصفر في كل جولة بل يبني على ما جمعه من أدلّة. والمهم أن أوزان GRU مشتركة عبر كل التكرارات بفضل ، فيبقى النموذج صغيراً (5.3 مليون معامل فقط).
الترقية المحدّبة: من الدقة الخشنة إلى الدقة الكاملة
مشغّل التحديث يعمل بدقة ⅛ فقط. لاستعادة التدفق بالدقة الكاملة يستعمل RAFT أسلوب محدّبة مُتعلَّمة، وهو أذكى بكثير من التقحيم الخطي الثنائي العادي.
الفكرة أنه لكل بكسل في المخرج النهائي، تتنبّأ الشبكة بتسعة أوزان (قناع ) تُشكّل تركيبة محدّبة من أقرب 9 جيران في حقل التدفق الخشن. هذه الأوزان تُحسب من الحالة المخفية النهائية لوحدة GRU وتمرّ عبر softmax لتضمن أن مجموعها 1. النتيجة أن كل بكسل عالي الدقة يصبح متوسطاً مُرجّحاً لجيرانه الخشنين، لكن بأوزان مُتعلَّمة تعرف أين حدود الحركة.
لتوضيح الفرق: التقحيم الثنائي يحسب المتوسط من أقرب أربعة جيران بأوزان ثابتة تعتمد على المسافة فقط — لا يعرف شيئاً عن حدود الأجسام. أما الترقية المحدّبة فتسأل الشبكة: «هذه البلاطات التسع جيرانك — كيف تمزجها؟» والشبكة تتعلّم أن تُعطي الوزن الأكبر للجيران الموجودين على نفس الجانب من حدّ الحركة، وتقريباً صفراً للجيران على الجانب الآخر. هكذا تبقى حواف التدفق حادّة ومطابقة لحدود الأجسام الحقيقية.
التدريب: الإشراف على كل تكرار
نقطة مهمة في تدريب RAFT أن تُشرف على كل تكرار وليس فقط على المخرج النهائي. أي أنه لسلسلة من تدفقاً متنبّأاً وتدفق حقيقي :
لماذا ليس متدرّج الدقة؟ تحوّل النموذج الفكري
قبل RAFT كان الأسلوب السائد في التدفق البصري هو المعالجة متدرّجة الدقة. فكرته بسيطة: قدّر التدفق بدقة منخفضة أولاً حيث تبدو الحركات الكبيرة صغيرة، ثم اثنِ الصورة الثانية بناءً على هذا التقدير وانتقل لدقة أعلى. كرّر الخطوات حتى تصل للدقة الكاملة.
المشكلة أن هذا الأسلوب فيه ثلاث نقاط ضعف جوهرية تجنّبها RAFT:
تراكم الأخطاء. أي خطأ في المستويات الخشنة ينتقل للمستويات الأدقّ ولا يمكن تصحيحه. تقدير خاطئ لحركة كبيرة في الأعلى يُفسد محاذاة الصورة المثنية في كل المستويات التالية.
ضياع الأجسام الصغيرة. تقليص العيّنات الشديد في المستويات الخشنة قد يُصغّر أجساماً صغيرة إلى أقل من بكسل واحد، فتضيع حركتها تماماً.
تعقيد البنية. كل مستوى يحتاج مستخلص سمات خاصاً وحجم تكلفة ومُقدِّراً مستقلاً، فيتضاعف عدد المعاملات وتزداد صعوبة التدريب.
RAFT يتجاوز هذا كله بالعمل عند دقة واحدة فقط (⅛). هرم الارتباط لا يُبنى من دقّات مختلفة بل من تجميع حجم ارتباط واحد. الحركات الكبيرة تُلتقط عبر المستويات الخشنة من الهرم، والتحديثات التكرارية تستطيع تصحيح أي خطأ مبكر لأن كل تكرار يعيد فحص أدلّة الارتباط من جديد.
النتائج: مستوى أداء جديد
سجّل RAFT نتائج قياسية جديدة على عدّة معايير:
على Sintel (المسار النهائي) وصل خطأ النقطة الطرفية (EPE) إلى 2.855 بكسل — أي تخفيض بنسبة 30% مقارنة بأفضل نتيجة سابقة (4.098). وعلى KITTI 2015 بلغ خطأ F1-all نسبة 5.10% — تخفيض بنسبة 16% من النتيجة السابقة (6.10%).
لكن الأرقام ليست القصة الكاملة. ثلاثة جوانب أخرى لفتت الانتباه:
التعميم عبر مجموعات البيانات. حين دُرِّب على بيانات اصطناعية فقط (FlyingChairs + FlyingThings3D) وقُيِّم على KITTI مباشرة بدون ضبط دقيق، حقّق خطأ 5.04 — تحسّن بنسبة 40%. هذا يدلّ على أن البنية تتعلّم تمثيلات حركة قابلة للنقل فعلاً.
كفاءة التدريب. يتقارب RAFT في نحو 100 ألف تكرار فقط — أسرع بنحو 10 مرات من أساليب مثل FlowNet2 وPWC-Net.
نموذج صغير. النموذج الكامل فيه 5.3 مليون معامل فقط. والنسخة المُصغّرة (RAFT-S) بمليون معامل تتفوّق على كل الأساليب السابقة في Sintel، وتعمل بسرعة 20 إطاراً في الثانية على بطاقة 1080Ti.
الشيفرة: حلقة التحديث بشكل شبه برمجي
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
# استخلاص السمات من كلتا الصورتين
fmap1 = feature_encoder(image1) # [B, 256, H/8, W/8]
fmap2 = feature_encoder(image2) # أوزان مشتركة
# استخلاص السياق والحالة المخفية الأولية من الصورة الأولى
cnet, h = context_encoder(image1)
# بناء حجم الارتباط رباعي الأبعاد (الجداء النقطي لجميع الأزواج)
corr_volume = einsum('bchw, bckl -> bhwkl', fmap1, fmap2)
corr_pyramid = build_pyramid(corr_volume) # 4 مستويات
# تهيئة التدفق بالصفر
flow = torch.zeros(B, 2, H//8, W//8)
for k in range(num_iterations): # عادةً 12 تكراراً
# البحث في حجم الارتباط حول تقدير التدفق الحالي
corr_features = corr_lookup(corr_pyramid, flow, radius=4)
# ترميز التدفق الحالي
flow_features = flow_encoder(flow)
# تحديث وحدة البوابات: ارتباط + تدفق + سياق -> حالة مخفية جديدة
h = gru(h, corr_features, flow_features, cnet)
# التنبؤ بتغيّر التدفق من الحالة المخفية
delta_flow = flow_head(h)
flow = flow + delta_flow
# ترقية محدّبة من ⅛ إلى الدقة الكاملة
flow_up = convex_upsample(flow, mask=upsample_head(h))الإرث: ثورة التنقيح التكراري
2015
FlowNet — التعلم العميق يدخل التدفق البصري
أظهر Dosovitskiy وآخرون أن شبكة التفافية واحدة تستطيع تقدير التدفق البصري بشكل شامل، بتدريبها على بيانات اصطناعية. كان هذا العمل بداية دخول التعلّم العميق إلى هذا المجال.
2017
FlowNet2 — تكديس الشبكات للتنقيح
رتّب Ilg وآخرون عدّة شبكات FlowNet على التوالي بحيث تُنقّح كل واحدة مخرجات سابقتها. حقّقوا دقة تنافسية لكن على حساب تكلفة حوسبية عالية ونموذج كبير الحجم.
2018
PWC-Net — الأهرامات والانحناء وأحجام التكلفة
جمع Sun وآخرون بين أهرامات السمات وثني الصورة وأحجام التكلفة في أسلوب واحد أصبح هو السائد. كان سريعاً ودقيقاً، لكنه ظلّ يعاني من تراكم الأخطاء عبر المستويات المتدرّجة.
2020
RAFT — هذه الورقة (جائزة أفضل ورقة، ECCV 2020)
استبدل المعالجة متدرّجة الدقة بحساب ارتباط جميع الأزواج مع تحديثات تكرارية. خفّض الخطأ 30% على Sintel و16% على KITTI، مع تقارب أسرع 10 مرات وتعميم قوي عبر مجموعات بيانات مختلفة.
2021
GMA — تجميع الحركة الشمولي
أضاف Jiang وآخرون آلية الانتباه الذاتي داخل مشغّل التحديث في RAFT لتجميع معلومات الحركة من المشهد كاملاً، فتحسّن الأداء خصوصاً في المناطق المحجوبة.
2022
FlowFormer — المحوِّلات للتدفق البصري
استبدل Huang وآخرون وحدة GRU ببنية قائمة على المحوِّل، مع الإبقاء على حجم ارتباط RAFT لكن باستعمال الانتباه في خطوة التحديث.
2024
SEA-RAFT وDepth Anything
بسّط SEA-RAFT البنية وسرّعها باستعمال دالة خسارة من نوع مزيج لابلاس. أما <NodeLink slug="depth-anything">Depth Anything</NodeLink> فنقل أفكار RAFT القائمة على الارتباط إلى تقدير العمق من كاميرا واحدة، ما يُبيّن تأثير هذه البنية خارج نطاق التدفق البصري.
الدرس الأكبر من RAFT أنك لا تحتاج بنيات معقدة متعددة المقاييس لتقدير المطابقات الكثيفة. حجم ارتباط واحد، ومُحدِّث تكراري خفيف، وتنقيح متكرّر — ثلاث أفكار بسيطة تتضافر بإحكام لتتفوّق على سنوات من الهندسة المعقّدة. وهذا الدرس يتجاوز التدفق البصري: حين تشكّ في التصميم، اختر التنقيح التكراري على التنبؤ بضربة واحدة. دع الشبكة تُصحّح أخطاءها بنفسها.
المرجعTeed, Deng. RAFT: Recurrent All-Pairs Field Transforms for Optical Flow. ECCV, 2020.
مصطلحات هذه الورقة
- الانسياب البصريOptical Flow
- الارتباطCorrelation
- الخوارزمية التكراريةIterative Algorithm
- وحدة البوابات التكرارية (GRU)Gated Recurrent Unit (GRU)
- استخلاص السماتFeature Extraction
- خريطة السماتFeature Map
- هرم السِّماتFeature Pyramid
- المُرمِّزEncoder
- الالتفاف الرقميConvolution
- الاستيفاء الثنائي الخطيBilinear Interpolation
- الوصلة التجاوزيةResidual Connection
- الضرب النقطيDot Product
- التنبؤ الكثيفDense Prediction
- من الخشن إلى الدقيقCoarse-to-Fine
- من طرف إلى طرفend-to-end