別及3DGS優(yōu)化全流程詳解)
1. 3DGS與NeRF的區(qū)別NeRFNeural Radiance Fields和3DGS3D Gaussian Splatting是當(dāng)前三維場景重建與渲染領(lǐng)域的兩大主流技術(shù)它們在表示方式、渲染流程、性能和應(yīng)用場景上存在顯著差異。1.1 表示方式NeRF采用隱式神經(jīng)表示。場景被建模為一個連續(xù)函數(shù)輸入空間位置和觀察方向輸出該點的顏色和體密度。# NeRF隱式函數(shù)表示 (F_{\theta}(\mathbf{x}, \mathbfjycny1n) \rightarrow (\mathbf{c}, \sigma))3DGS采用顯式3D高斯表示。場景由一組離散的、可學(xué)習(xí)的3D高斯橢球構(gòu)成。每個高斯橢球由以下參數(shù)定義位置均值協(xié)方差矩陣控制橢球的形狀和方向不透明度顏色通過球諧函數(shù)SH系數(shù)表示1.2 渲染流程NeRF基于體渲染Volume Rendering。沿相機光線采樣多個點通過神經(jīng)網(wǎng)絡(luò)查詢每個點的顏色和密度然后通過數(shù)值積分如分層采樣合成最終像素顏色。體渲染公式其中為透射率。3DGS基于可微光柵化Differentiable Rasterization。將每個3D高斯橢球投影到2D圖像平面形成2D高斯核然后通過alpha-blending按深度排序合成像素顏色。投影后的2D協(xié)方差矩陣其中為視圖變換矩陣為投影雅可比矩陣。像素顏色合成公式alpha-blending其中為按深度排序后覆蓋該像素的高斯集合。1.3 性能與特性對比特性NeRF3DGS表示方式隱式神經(jīng)網(wǎng)絡(luò)顯式3D高斯集合渲染速度慢需多次網(wǎng)絡(luò)前向快可微光柵化實時訓(xùn)練速度慢數(shù)小時至數(shù)天快數(shù)分鐘至數(shù)小時顯存占用較低網(wǎng)絡(luò)參數(shù)較高存儲大量高斯參數(shù)編輯性困難隱式表示容易顯式可增刪改高斯壓縮性一般網(wǎng)絡(luò)權(quán)重較好可量化、剪枝質(zhì)量高連續(xù)細節(jié)好高近年已接近NeRF2. 3DGS優(yōu)化全流程3DGS的優(yōu)化是一個從稀疏點云初始化為起點通過可微渲染、損失計算、參數(shù)更新、自適應(yīng)密度控制等步驟迭代優(yōu)化的過程。2.1 初始化通常從運動恢復(fù)結(jié)構(gòu)SfM得到的稀疏點云開始。每個點云點被初始化為一個各向同性的3D高斯位置點云坐標(biāo)協(xié)方差初始為球體不透明度顏色SH系數(shù)初始為視圖無關(guān)的漫反射顏色2.2 可微渲染與損失函數(shù)每一輪迭代對訓(xùn)練視圖進行可微渲染得到預(yù)測圖像并與真實圖像比較計算損失。常用損失函數(shù)為L1損失與SSIM損失的加權(quán)和其中。2.3 參數(shù)優(yōu)化使用梯度下降法如Adam更新所有高斯的參數(shù)位置協(xié)方差矩陣實際優(yōu)化縮放和旋轉(zhuǎn)四元數(shù)不透明度球諧系數(shù)協(xié)方差矩陣由縮放和旋轉(zhuǎn)參數(shù)重建其中為由四元數(shù)轉(zhuǎn)換的旋轉(zhuǎn)矩陣。2.4 自適應(yīng)密度控制這是3DGS優(yōu)化的核心機制用于動態(tài)增加克隆/分裂或刪除修剪高斯以更好地覆蓋場景幾何。克隆對于位置梯度大的高斯位于重建不足區(qū)域?qū)⑵鋸?fù)制一份并沿位置梯度方向輕微擾動。分裂對于尺度過大協(xié)方差矩陣特征值過大的高斯將其分裂為兩個更小的高斯以增加局部細節(jié)。修剪定期移除不透明度低于閾值如0.005或體積過小的高斯以控制總數(shù)。2.5 優(yōu)化流程偽代碼# 初始化 gaussians initialize_from_sfm(point_cloud) optimizer Adam(gaussians.parameters()) for iteration in range(max_iterations): # 1. 可微渲染 rendered_image differentiable_rasterization(gaussians, camera_pose) # 2. 計算損失 loss (1 - lambda) * L1_loss(rendered_image, gt_image) lambda * (1 - SSIM(rendered_image, gt_image)) # 3. 反向傳播 loss.backward() optimizer.step() optimizer.zero_grad() # 4. 自適應(yīng)密度控制每N次迭代執(zhí)行 if iteration % density_control_interval 0: # 克隆梯度大的高斯 clone_gaussians_with_large_gradients(gaussians) # 分裂尺度過大的高斯 split_large_gaussians(gaussians) # 修剪不透明度過低的高斯 prune_opaque_gaussians(gaussians, threshold0.005) # 5. 重置不透明度可選避免飽和 reset_opacity(gaussians)2.6 收斂與輸出優(yōu)化完成后得到一組優(yōu)化的3D高斯集合可用于實時渲染在新視角下通過光柵化快速生成圖像。場景編輯直接修改、添加或刪除特定高斯。壓縮與傳輸對高斯參數(shù)