Frame Interpolation
يُنشئ استيفاء الإطارات إطارات جديدة بين الإطارات الموجودة لزيادة معدل الإطارات أو إنشاء حركة بطيئة. يتناول الأساليب المعتمدة على التدفق والنواة والتوليد.
استيفاء الإطارات، ويُسمى أيضًا استيفاء إطارات الفيديو (VFI)، هو مهمة في الرؤية الحاسوبية تهدف إلى إنشاء إطارات جديدة بين إطارين موجودين في مقطع فيديو. تؤدي إضافة إطار بين كل زوج من الإطارات إلى مضاعفة معدل الإطارات، فتحوّل لقطات بمعدل 30 FPS إلى 60 FPS، كما أن إضافة عدة إطارات تُنشئ حركة بطيئة من لقطات عادية. وترفع هذه العملية الدقة الزمنية للفيديو، وهي النظير الزمني لمهمة الدقة الفائقة، ولا تملأ إلا الفجوات بين الإطارات الموجودة، بخلاف التنبؤ بالفيديو الذي يستقرئ الإطارات بعد الإطار الأخير.
آلية عمل استيفاء الإطارات#
تنتج عملية حساب متوسط إطارين أثرًا شبحيًا، أي صورة مزدوجة لكل ما تحرّك. أما الأساليب المعتمدة على التدفق، فتقدّر التدفق البصري، أي حركة كل بكسل بين الإطارين، وتحرك كل إطار جزئيًا وفق تلك الحركة نحو الزمن المستهدف، ثم تمزج النتيجتين. وتكمن الصعوبة في حالات الحجب: فالمنطقة الخلفية التي يكشفها شخص يمشي لا توجد إلا في أحد الإطارين، لذا تتنبأ نماذج التعلم العميق مثل Super SloMo أيضًا بخرائط الرؤية التي تحدد الإطار الذي يأتي منه كل بكسل في الناتج.
يكفي التدفق البصري Farneback في OpenCV لإظهار التأثير على لقطات حقيقية. يحجب المقتطف الإطار الأوسط من ثلاثة إطارات، ثم يعيد بناءه من الإطارين المجاورين ويقيّم الطريقتين باستخدام نسبة الذروة للإشارة إلى الضوضاء (PSNR):
import cv2
import numpy as np
# Read three consecutive frames of people walking and hold out the middle one
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/decelera_portrait_min.mov")
f0, f1, f2 = (cap.read()[1] for _ in range(3))
g0, g2 = (cv2.cvtColor(f, cv2.COLOR_BGR2GRAY) for f in (f0, f2))
# Estimate dense optical flow in both directions between the outer frames
flow02 = cv2.calcOpticalFlowFarneback(g0, g2, None, 0.5, 3, 15, 3, 5, 1.2, 0)
flow20 = cv2.calcOpticalFlowFarneback(g2, g0, None, 0.5, 3, 15, 3, 5, 1.2, 0)
# Warp each outer frame halfway along its flow, then average the two warps
h, w = g0.shape
grid = np.dstack(np.meshgrid(np.arange(w), np.arange(h))).astype(np.float32)
warp0 = cv2.remap(f0, grid - 0.5 * flow02, None, cv2.INTER_LINEAR)
warp2 = cv2.remap(f2, grid - 0.5 * flow20, None, cv2.INTER_LINEAR)
middle = cv2.addWeighted(warp0, 0.5, warp2, 0.5, 0)
# Score both against the real middle frame: flow interpolation vs. plain blending
blend = cv2.addWeighted(f0, 0.5, f2, 0.5, 0)
print(f"Blend: {cv2.PSNR(blend, f1):.1f} dB, flow interpolation: {cv2.PSNR(middle, f1):.1f} dB")يطبع Blend: 22.3 dB, flow interpolation: 29.5 dB: إعادة بناء الإطار المحجوب بتحريك كل إطار إلى منتصف مسار حركته أدق بمقدار 7.2 dB من حساب المتوسط. وتقيّم المعايير النماذج بالطريقة نفسها: تحتوي مجموعة المقاطع الثلاثية Vimeo-90K على 73,171 مقطعًا من ثلاثة إطارات، يتعين على النموذج التنبؤ بإطارها الأوسط، ويُقاس الأداء باستخدام PSNR وSSIM.
أساليب الاستيفاء المعتمدة على التعلم#
- الشبكات القائمة على التدفق: يتنبأ Super SloMo (2018) بالتدفق والرؤية لأي زمن بين إطارين، بينما يقدّر RIFE (2022) التدفق عند الزمن الوسيط مباشرة، ويعمل أسرع من Super SloMo وDAIN بمقدار يتراوح بين 4 و27 مرة.
- الشبكات القائمة على النواة: يتنبأ SepConv (2017) بنوى التفاف قابلة للفصل لكل بكسل في الناتج، ويطبقها على رقع من إطاري الإدخال، جامعًا بين تقدير الحركة والمزج في خطوة واحدة.
- نماذج الحركة الكبيرة: يشارك FILM من Google (2022) الأوزان بين مقاييس هرم السمات، لذا تُعالج الحركة الكبيرة في مقياس دقيق كما لو كانت الحركات الصغيرة التي يتعلمها في المقاييس الأكثر خشونة، ويتدرب اعتمادًا على ثلاثيات الإطارات وحدها.
- النماذج التوليدية: تنشئ نماذج الاستيفاء القائمة على الانتشار، مثل LDMVFI (2024)، الإطار الأوسط من خلال إزالة الضوضاء من تمثيل كامن مشروط بإطاري الإدخال، بدلًا من تشويه بكسلاتهما.
- الاستيفاء القائم على الأحداث: يضيف Time Lens (2021) تغيرات السطوع التي تسجلها كاميرا الأحداث بين إطارين، وهي تغيرات تكشف الحركة الفعلية خلال الفجوة.
تطبيقات عملية#
- توليد إطارات الألعاب: تُدرج تقنية NVIDIA DLSS Multi Frame Generation ما يصل إلى خمسة إطارات مُولّدة لكل إطار مُصيّر على وحدات GPU من سلسلة GeForce RTX 50؛ ويتطلب كل إطار مُولّد الإطار المُصيّر التالي، ما يزيد زمن الاستجابة.
- تحرير الفيديو: ينشئ المحررون حركة بطيئة من اللقطات القياسية، ويحوّلون الفيديو بمعدل 24 أو 30 FPS ليتوافق مع شاشات 60 Hz و120 Hz؛ وهو استيفاء الحركة نفسه الذي تطبقه أجهزة التلفاز لتنعيم الحركة.
- الرسوم المتحركة: تنشئ نماذج الاستيفاء رسومات وسيطة بين الإطارات المفتاحية المرسومة يدويًا، ويمكن لمولدات الفيديو إنتاج مقاطع كاملة تبدأ بإطارين محددين وتنتهي بهما.
تطبق متابعة الأجسام الفكرة نفسها على المواضع بدلًا من البكسلات. عندما يظهر مجددًا جسم كان محجوبًا لعدة إطارات، يستوفي متعقب OC-SORT في وضع التتبع في Ultralytics (tracker="ocsort.yaml") خطيًا صناديق افتراضية للإطارات المفقودة، ثم يعيد تمريرها عبر مرشح كالمان، ليصحح تقدير السرعة الذي يستخدمه لمطابقة الجسم مع اكتشاف YOLO26 التالي.










