Dynamic Resolution Scaling
Dinamik çözünürlük ölçekleme, kare süresi bütçesini korumak için her karedeki işlem çözünürlüğünü anlık olarak değiştirir; oyunlarda ve gerçek zamanlı görsel yapay zekâda kullanılır.
Dinamik çözünürlük ölçekleme (DRS), kare başına işlem çözünürlüğünü kare kare ayarlayarak kare başına süreyi sabit bir bütçede tutan bir tekniktir. Sahne maliyetli hâle geldiğinde işleyici veya model daha az piksel üzerinde çalışır; kullanılabilir kapasite arttığında çözünürlüğü yeniden yükseltir ve çıktı genellikle sabit bir ekran boyutuna geri ölçeklenir. Video oyunları, konsollarda ve bilgisayarlarda istikrarlı bir kare hızını korumak için bu tekniği yaygınlaştırdı. Aynı fikir, yoğun kullanılan veya termal kısıtlamaya uğrayan donanımlarda bilgisayarlı görü modellerinin gecikme bütçesi içinde kalmak için girdilerini küçültebildiği gerçek zamanlı çıkarım için de geçerlidir.
Dinamik Çözünürlük Ölçekleme Nasıl Çalışır#
DRS bir geri bildirim döngüsüdür. Sistem her karede, son karelerin GPU üzerinde ne kadar sürdüğünü ölçer, bu süreyi bütçeyle karşılaştırır ve sonraki kare için sabit sınırlar içinde bir çözünürlük ölçeği seçer:
"Aşırı" ile "çok altında" arasındaki fark, çözünürlüğün iki seviye arasında titreyip durmasını önler. Örneğin Unreal Engine'de varsayılan bütçe kare başına 33,3 ms, yani saniyede 30 karedir. Ekran yüzdesi, her eksende çıktı çözünürlüğünün %50'si ile %100'ü arasında değişir; böylece en düşük ayar piksellerin dörtte birini işler.
Düşük çözünürlüğün kaliteye ne ölçüde mal olacağını yükseltme adımı belirler. Basit uzamsal ölçekleme görüntüyü bulanıklaştırır; bu nedenle modern oyunlarda DRS, NVIDIA DLSS, AMD FSR, Intel XeSS ve Sony'nin PlayStation Spectral Super Resolution gibi öğrenmeye dayalı veya zamansal yükselticilerle birlikte kullanılır. Bu yöntemler önceki kareleri ve güncel sürümlerin çoğunda ayrıntıları yeniden oluşturmak için derin öğrenmeyi birleştirir. Bu yeniden oluşturma, süper çözünürlük yöntemlerinden biridir ve oyunun, görünür kalite kaybı çok az olacak şekilde çıktı çözünürlüğünün oldukça altında görüntü oluşturmasını sağlar.
Görüntü İşleme Yapay Zekâsında Dinamik Çözünürlük#
Evrişimli sinir ağlarında işlem miktarı ve çıkarım gecikmesi, girdi piksel sayısıyla kabaca orantılı olarak artar; bu nedenle girdi boyutunu her kenarda 320 piksele indirmek, 640 piksellik bir modelin FLOPs değerini yaklaşık dörtte bire düşürür. Dolayısıyla bir denetleyici; NVIDIA Jetson gibi bir uç yapay zekâ cihazı ısınarak saat hızını düşürdüğünde, bir sunucu daha fazla kamera akışını işlemeye başladığında veya bir drone'un gezinme için ek işlem gücüne ihtiyacı olduğunda hız uğruna çözünürlükten ödün verebilir. Bunun bedeli, düşük çözünürlükte çok az piksel kaplayan küçük ve uzaktaki nesnelerde doğruluk kaybıdır; bu nedenle nesne algılama sistemleri girdi boyutu için bir alt sınır belirler.
Ultralytics YOLO26 bu özelliği doğrudan tahmin modunda destekler: PyTorch modeli, yeniden yükleme gerektirmeden her çağrıda farklı bir imgsz kabul eder; her karenin uzun kenarını imgsz boyutuna getirir ve kısa kenarını yalnızca 32 piksellik adımın bir sonraki katına tamamlayacak şekilde doldurur. Sabit şekilli biçimlere dışa aktarılan modeller ise dynamic=True ayarlanmadığı sürece dışa aktarıldıkları boyutu korur. Basit bir denetleyici, ölçülen çıkarım süresine göre izin verilen boyutlar arasında geçiş yapar:
import cv2
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/decelera_portrait_min.mov")
sizes = [320, 416, 512, 640] # izin verilen girdi boyutları, 32 piksellik adımın katları
level, budget_ms = len(sizes) - 1, 15.0 # 15 ms çıkarım bütçesiyle tam boyutta başla
frames_at = dict.fromkeys(sizes, 0)
while True:
ok, frame = cap.read()
if not ok:
break
result = model(frame, imgsz=sizes[level], verbose=False)[0]
frames_at[sizes[level]] += 1
# Titremeyi önlemek için bütçe aşıldığında bir alt boyuta in, yalnızca sürenin bütçenin epey altında kaldığı durumlarda yeniden yüksel
if result.speed["inference"] > budget_ms and level > 0:
level -= 1
elif result.speed["inference"] < 0.6 * budget_ms and level < len(sizes) - 1:
level += 1
print("Frames processed at each input size:", frames_at)Çıktı, her boyutta işlenen kare sayısını gösterir; daha yavaş donanımlar videonun daha büyük bölümünü küçük boyutlarda işler.
İlgili Terimler#
- Süper çözünürlük: Düşük çözünürlüklü bir görüntüden daha yüksek çözünürlüklü bir görüntü oluşturur ve çoğu zaman DRS iş akışının ikinci aşamasıdır.
- Uyarlanabilir bit hızı akışı: Video kalitesini işlem süresine değil, ağ bant genişliğine göre değiştirir.
- Değişken hız gölgelendirme: Tüm kareyi ölçeklendirmek yerine karenin seçili bölgelerindeki gölgelendirme ayrıntısını azaltır.
- Çok ölçekli eğitim: Çıkarım çözünürlüğü değiştiğinde doğruluğunu koruması için modeli farklı girdi boyutlarında eğitir.
- Görsel-dil modellerinde doğal dinamik çözünürlük: Ayrıntıları korumak için her görüntüyü kendi çözünürlüğünde değişken sayıda belirtece dönüştürür. Alibaba'nın, sürümüne Naive Dynamic Resolution adını verdiği Qwen2-VL bu yaklaşımı kullanır.










