Gaussian Splatting
Gaussian splatting, fotoğraflardan gerçekçi 3B sahneleri, gerçek zamanlı işlenen milyonlarca 3B Gauss noktası olarak yeniden oluşturur. Eğitim, NeRF ve görüntü yakalama ele alınır.
3B Gaussian püskürtme olarak da adlandırılan Gaussian püskürtme (3DGS), sıradan fotoğraflardan fotogerçekçi bir 3B sahne oluşturma ve bu sahnenin yeni görünümlerini gerçek zamanlı olarak işleme tekniğidir. Sahneyi, her birinin konumu, şekli, opaklığı ve bakış açısına bağlı rengi olan milyonlarca 3B Gaussian'dan, yani yumuşak elipsoitlerden oluşan bir yapı olarak temsil eder; görüntüyü de bunları ekrana yansıtıp ("püskürtüp") harmanlayarak çizer. SIGGRAPH 2023'te tanıtılan Gerçek Zamanlı Işınım Alanı İşleme için 3B Gaussian Püskürtme, en iyi sinirsel ışınım alanlarının (NeRF) görüntü kalitesini yakalarken, 1080p'de saniyede 30 veya daha fazla kare işledi; daha önce büyük ve sınırsız sahnelerde hiçbir yöntem bunu başaramamıştı. Bu, yeni görünüm sentezi ve 3B yeniden yapılandırma yöntemidir.
Gaussian Splatting Nasıl Çalışır?#
Her Gaussian 59 öğrenilebilir sayı tutar: ortaklaşa kovaryansını (şeklini ve yönelimini) tanımlayan bir 3B konum, bir 3B ölçek ve 4 sayılı bir dönüş kuaterniyonu; bir opaklık; ayrıca her renk kanalı için 16 olmak üzere 48 küresel harmonik katsayısı. Bu katsayılar, yansımaları ve parlaklığı yakalamak için rengin bakış yönüyle değişmesini sağlar. Eğitim, kameraları kalibre ederken Hareketten Yapı (SfM) yönteminin ürettiği seyrek nokta bulutuyla başlar ve her noktaya bir Gaussian yerleştirilir. Her yinelemede bir eğitim görünümü işlenir, L1 ve D-SSIM kayıplarının ağırlıklı bileşimiyle gerçek fotoğrafla karşılaştırılır ve türevlenebilir işleyici üzerinden gradyan inişi kullanılarak her Gaussian güncellenir. Her 100 yinelemede uyarlamalı yoğunluk denetimi, yeterince yeniden yapılandırılmamış bölgelerde küçük Gaussian'ları kopyalar, fazla ayrıntıyı kaplayan büyük Gaussian'ları böler ve neredeyse saydam olanları kaldırır; makaledeki her sahnedeki Gaussian sayısını 1 ila 5 milyona çıkarır.
Bir kare oluşturmak için renderleyici her bir 3B Gaussian'ı görüntü düzleminde 2B bir elips olarak projekte eder, ekranı 16×16 piksellik karolara böler, her karoyla örtüşen Gaussian'ları derinliğe göre tek bir GPU radix sıralamasıyla sıralar ve her pikselde bunları önden arkaya doğru alfa harmanlamasıyla birleştirir. Sahne, ilkel öğelerin açıkça belirtilmiş bir listesinden oluştuğundan render işlemi bir oyun motorunun rasterleştiricisi gibi çalışır ve piksel başına sinir ağı çalıştırmaz.
Gaussian Püskürtme, NeRF ve Ağlarla Karşılaştırıldığında#
NeRF bir sahneyi örtük olarak bir sinir ağının ağırlıklarında saklar ve her kamera ışını üzerindeki birçok noktada bu ağı sorgulayarak görüntü oluşturur. Gaussian püskürtme sahneyi açıkça saklar; bu nedenle görüntü oluşturma sıralama ve harmanlamadan ibarettir. Özgün makaledeki aynı donanımda Mip-NeRF360'ın ortalama eğitim süresi 48 saat, işlenen kare başına süresi yaklaşık 10 saniyeydi. Tam eğitilmiş Gaussian püskürtme modelleri ise 35–45 dakikalık eğitimin ardından benzer veya biraz daha iyi kalite sunarken gerçek zamanlı çalışıyordu. Açık temsil bellek gerektirir: Gaussian başına 59 sayıyla, 3 milyon Gaussian içeren bir sahne yaklaşık 700 MB 32 bit kayan noktalı sayı tutar; özgün uygulamada büyük sahnelerin eğitimi sırasında tepe GPU belleği 20 GB'ı aşabiliyordu. Püskürtme öğelerinin tanımlı bir yüzeyi de yoktur; bu nedenle çarpışma geometrisine veya CAD tarzı düzenlemelere ihtiyaç duyan uygulamalar, ek yöntemlerle bunları hâlâ ağlara dönüştürür. Hareketli sahneler için 4B Gaussian püskürtme gibi genişletmeler gerekir.
Gaussian Püskürtme İçin Veri Yakalama#
Bir yakalama, sabit bir sahnenin çevresinde hareket ederken çekilmiş, örtüşen fotoğraflar veya video karelerinden oluşur. Yakalama sırasında hareket eden bir yoldan geçen kişi veya araba gibi nesneler bazı karelerde görünürken bazılarında görünmez; optimizasyon da bu nesneleri, süzülenler olarak bilinen yarı saydam bozulmalarla açıklamaya çalışır. Bu nedenle eğitim işlem hatları, hareketli nesneleri dışarıda bırakan maskeleri kabul eder; Nerfstudio'nun veri biçimi, siyah piksellerin yok sayılacak alanları işaretlediği siyah beyaz maskeler kullanır. YOLO26 örnek bölütleme modelleri, her karedeki tüm kişileri bölütleyerek bu maskeleri otomatik oluşturur.
import cv2
from ultralytics import YOLO
# YOLO26 örnek segmentasyon modelini yükle
model = YOLO("yolo26n-seg.pt")
# Yalnızca kişileri bölütle (COCO sınıfı 0); yakalamada süzülenlere sıkça neden olurlar
results = model("https://ultralytics.com/images/bus.jpg", classes=[0], retina_masks=True)
result = results[0]
# Beyaz, eğitilecek sabit sahneyi; siyah, yok sayılacak kişileri gösterir
people = result.masks.data.sum(dim=0) > 0
keep_mask = (~people).cpu().numpy().astype("uint8") * 255
cv2.imwrite("bus_mask.png", keep_mask)Kaydedilen bus_mask.png, fotoğrafın tam çözünürlüğündedir; çünkü retina_masks=True maskeleri özgün görüntü boyutunda döndürür ve karedeki her kişi siyah renktedir.
Uygulamalar#
- Gayrimenkul ve sanal turlar: Bir evin, müzenin veya tarihî alanın telefonla ya da drone ile çekimi, ziyaretçilerin tarayıcıda veya VR başlığında özgürce gezebileceği bir sahneye dönüşür; zemin ve pencerelerdeki yansımalar korunur.
- Görsel efektler ve sanal prodüksiyon: Film ve oyun ekipleri gerçek mekânları Gaussian püskürtme yöntemiyle yakalayarak fotogerçekçi arka planlar ve set referansları olarak kullanır.
- Dijital ikizler ve haritalama: Jeo-uzamsal platformlar şehirlerin, inşaat sahalarının ve altyapının büyük ölçekli Gaussian püskürtme yeniden yapılandırmalarını geleneksel 3B karolarla birlikte akış olarak sunar.
- Sürüş ve robotik simülasyonu: Gerçek sürüşlerin yeniden yapılandırmaları, otonom araç ekiplerinin algı modellerini test etmek için kaydedilmiş sahneleri yeni kamera konumlarından yeniden işlemesini sağlar.
gsplat gibi açık kaynaklı kitaplıklar, Gaussian püskürtme modellerini eğitmek için CUDA tarayıcıları sunar. Khronos Group ise Cesium, Esri, Niantic Spatial, NVIDIA, Huawei ve Autodesk'ten katkı verenlerle geliştirilen, Gaussian püskürtme öğelerini saklamaya yönelik glTF 2.0 uzantısı KHR_gaussian_splatting standardını onayladı.










