Frame Interpolation
Kare enterpolasyonu, kare hızını artırmak veya ağır çekim oluşturmak için mevcut karelerin arasına yeni kareler sentezler. Akış tabanlı, çekirdek tabanlı ve üretici yöntemler.
Video kare enterpolasyonu (VFI) olarak da adlandırılan kare enterpolasyonu, bir videodaki mevcut iki kare arasına yeni kareler sentezleme bilgisayarlı görü görevidir. Her kare çiftinin arasına bir kare eklemek kare hızını ikiye katlayarak 30 FPS'lik görüntüyü 60 FPS'ye çıkarır; birkaç kare eklemek ise sıradan görüntülerden ağır çekim oluşturur. Bu işlem, videonun zamansal çözünürlüğünü, süper çözünürlüğün zaman açısından karşılığını artırır ve son kareden sonraki kareleri tahmin eden video öngörüsünden farklı olarak yalnızca mevcut kareler arasındaki boşlukları doldurur.
Kare Enterpolasyonu Nasıl Çalışır#
İki karenin ortalamasını almak, hareket eden her şeyin çift görüntüsü olan gölgelenmeye yol açar. Akış tabanlı yöntemler bunun yerine iki kare arasındaki her pikselin hareketi olan optik akışı tahmin eder, her kareyi bu hareket boyunca hedef zamana kadar taşır ve iki sonucu harmanlar. Örtülme, işin zor kısmıdır: yürüyen bir kişinin arkasından açığa çıkan arka plan bölgesi karelerden yalnızca birinde bulunur; bu nedenle derin öğrenme modelleri, örneğin Super SloMo, her çıktı pikselinin hangi kareden alınacağını belirleyen görünürlük haritalarını da tahmin eder.
OpenCV'nin Farneback optik akışı, gerçek görüntülerdeki etkiyi göstermek için yeterlidir. Kod parçası, üç karenin ortasındakini ayırır, komşularından yeniden oluşturur ve her iki yöntemi tepe sinyal-gürültü oranıyla (PSNR) puanlar:
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")Kod Blend: 22.3 dB, flow interpolation: 29.5 dB çıktısını verir: her kareyi hareketi boyunca yarı yola taşımak, ayrılan kareyi ortalama almaya kıyasla 7,2 dB daha doğru biçimde yeniden oluşturur. Kıyaslamalar da modelleri aynı şekilde puanlar: Vimeo-90K üçlü kümesinde, modelin ortadaki kareyi tahmin etmesi gereken 73.171 üç karelik klip bulunur; başarı PSNR ve SSIM ile ölçülür.
Öğrenilmiş Enterpolasyon Yöntemleri#
- Akış tabanlı ağlar: Super SloMo (2018), iki kare arasındaki herhangi bir zaman noktası için akışı ve görünürlüğü tahmin eder; RIFE (2022) ise ara zamandaki akışı doğrudan tahmin ederek Super SloMo ve DAIN'den 4 ila 27 kat daha hızlı çalışır.
- Çekirdek tabanlı ağlar: SepConv (2017), her çıktı pikseli için ayrıştırılabilir evrişim çekirdeklerini tahmin eder ve bunları iki giriş karesinin parçalarına uygular; böylece hareket tahmini ve harmanlama tek adımda birleştirilir.
- Büyük hareket modelleri: Google'ın FILM (2022) modeli, özellik piramidinin ölçekleri arasında ağırlıkları paylaşır; böylece ince ölçekteki büyük bir hareket, daha kaba ölçeklerde öğrendiği küçük hareketler gibi ele alınır ve model yalnızca kare üçlüleriyle eğitilir.
- Üretici modeller: LDMVFI (2024) gibi difüzyon tabanlı enterpolasyon modelleri, pikselleri çarpıtmak yerine iki giriş koşuluna bağlı gizil bir temsili gürültüden arındırarak ortadaki kareyi üretir.
- Olay tabanlı enterpolasyon: Time Lens (2021), olay kamerasının iki kare arasında kaydettiği ve boşluk boyunca gerçek hareketi gösteren parlaklık değişikliklerini ekler.
Gerçek Dünya Uygulamaları#
- Oyunlarda kare üretimi: NVIDIA DLSS Multi Frame Generation, GeForce RTX 50 Series GPU'larda işlenen her kare için en fazla beş üretilmiş kare ekler; her üretilen kare bir sonraki işlenmiş kareyi gerektirdiğinden gecikme artar.
- Video düzenleme: Düzenleme yazılımları, standart görüntülerden ağır çekim oluşturur ve 24 ya da 30 FPS videoyu 60 Hz ve 120 Hz ekranlara uyarlar; bu, TV'lerin hareket yumuşatma olarak uyguladığı hareket enterpolasyonuyla aynıdır.
- Animasyon: Enterpolasyon modelleri, elle çizilmiş ana kareler arasındaki çizimleri üretir; video üreticileri ise verilen iki karede başlayıp biten tüm klipleri oluşturabilir.
Nesne takibi, aynı fikri pikseller yerine konumlara uygular. Birkaç kare boyunca gizlenen bir nesne yeniden göründüğünde, Ultralytics takip modu içindeki OC-SORT takipçisi kaçırılan kareler için sanal kutuları doğrusal olarak enterpole eder ve bunları Kalman filtresinden yeniden geçirerek nesneyi sonraki YOLO26 tespitiyle eşleştirmek için kullandığı hız tahminini düzeltir (tracker="ocsort.yaml").










