Mip-splatting


3D高斯展开(3DGS)展示了令人印象深刻的新视图合成结果,达到了高保真度和高效率。 然而,在改变采样率时,例如通过改变焦距或相机距离(3DGS由于使用膨胀而产生膨胀和侵蚀伪影。 当放大或靠近相机时,它会产生侵蚀效果。 这是因为膨胀的 2D 高斯在屏幕空间中变小,使对象结构比实际看起来更薄。 相反,屏幕空间膨胀在缩小或远离场景时会产生膨胀伪影。 在这种情况下,膨胀的 2D 高斯在屏幕空间中变得更大,使对象结构比实际看起来更厚。)。 我们发现,这种现象的根源可以归因于缺乏3D频率约束和使用2D膨胀滤波器。 为了解决这个问题,我们引入了一个 3D 平滑滤波器,该滤波器根据输入视图引起的最大采样频率来约束 3D 高斯基元的大小(将3D表示的频率限制在训练图像确定的最大采样率的一半以下),从而消除了放大时的高频伪影。 此外,用模拟 2D 盒式滤波器的 2D Mip滤波器代替 2D 膨胀,可有效缓解混叠和膨胀问题。 我们的综合评估,包括单尺度图像训练和多尺度测试等场景,验证了我们方法的有效性。

3D 高斯展开通过将 3D 对象表示为高斯投影到图像平面上,然后在屏幕空间中进行 2D 膨胀来渲染图像,如 (a) 所示。 该方法的固有收缩偏差导致退化的 3D 高斯超过了采样极限,如 (b) 中的 δ 函数所示,同时由于膨胀操作而呈现类似于 2D。 然而,当改变采样率(通过焦距或相机距离)时,我们观察到强烈的膨胀效应(c)和高频伪像(d)。

一句话总结:Mip-Splatting为3D GS引入了3D平滑滤波器和2D Mip滤波器,消除了多个伪影。

多尺度训练测试

Blender数据集上的多尺度训练和多尺度测试,Mip-Splatting在大多数指标上都达到了最优性能,显著优于3DGS和3DGS+EWA(椭圆加权平均滤波器)。

单尺度训练测试

在Blender数据集上进行单尺度训练和多尺度测试,所有方法都在全分辨率下训练,然后在较小分辨率下进行评估,以模拟放大效果。Mip-Splatting在低分辨率下优于3DGS和3DGS+EWA。

本文提出了Mip-Splatting,这是对3D高斯Splatting的修改,引入了两个新颖的滤波器,即3D平滑滤波器和2D Mip滤波器,以在任意尺度实现无混叠的渲染。我们的3D平滑滤波器有效地限制了高斯原语的最大频率,以匹配训练图像施加的采样约束,而2D Mip滤波器则近似盒滤波器以模拟物理成像过程。实验结果表明,在相同的尺度/采样率下进行训练和测试时,Mip-Splatting在性能上可与最先进的方法相竞争。重要的是,在分布不一致的情境下,即在不同于训练的采样率下进行测试时,它在超出分布的摄像机姿势和缩放因子的情况下表现显著优越,实现了更好的泛化效果。

缺陷:该方法使用高斯滤波器作为盒状滤波器的高效近似。然而,这种近似引入了误差,特别是当高斯在屏幕空间中很小时,增大缩小导致了较大的误差,如表2所示。此外,由于每个3D高斯的采样率必须每m = 100次迭代计算一次,训练开销略有增加。

复现过程

1
2
3
4
5
conda create -y -n mip-splatting python=3.8
conda activate mip-splatting
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
conda install cudatoolkit-dev=11.3 -c conda-forge
# 使用 Conda 包管理器安装 CUDA 工具包的开发版本(cudatoolkit-dev),并指定安装版本为 11.3

conda init bash 是指运行 conda init 命令,以初始化您的 Bash shell(是 Bourne Again SHell 的缩写,是一个流行的 Unix/Linux 环境中常见的命令行解释器。) 以便与 Conda 兼容。这个命令的目的是配置您的 shell(命令解释器,允许用户与操作系统进行交互),以便能够正确使用 conda activate 等 Conda 命令。

激活环境

1
2
3
pip install -r requirements.txt
pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn/

清华大学的 PyPI 镜像,可以使用 -i 参数指定镜像地址:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

对于Blender数据集从https://drive.google.com/drive/folders/128yBriW1IG_3NJ5Rp7APSTZsJqdJdfc1下载,仅保留ship数据集,运行

1
python convert_blender_data.py --blender_dir nerf_synthetic/ --object_name ship --out_dir multi-scale

得到multi-scale,

运行多尺度评估和测试,单尺度评估和测试,这里仅使用ship数据集,所以scenes需要修改

single-scale training and single-scale testing on NeRF-synthetic dataset

1
python scripts/run_nerf_synthetic_stmt.py 

multi-scale training and multi-scale testing on NeRF-synthetic dataset

1
python scripts/run_nerf_synthetic_mtmt.py

Online viewer: After training, you can fuse the 3D smoothing filter to the Gaussian parameters with

1
python create_fused_ply.py -m {model_dir}/{scene} --output_ply fused/{scene}_fused.ply

Then use our online viewer to visualize the trained model.

修改ship

运行

1
python create_fused_ply.py -m benchmark_nerf_synthetic_ours_mtmt/ship --output_ply fused/ship_fused.ply

得到fused中.plt,可在https://niujinshuchong.github.io/mip-splatting-demo/导入查看。

对于mip-nerf 360数据集,先将文件夹名修改为360_v2,代码中默认文件名为360_v2,同样只使用flowers数据集,scenes仅保留flowers,之后同上

  • single-scale training and single-scale testing on the mip-nerf 360 dataset
1
python scripts/run_mipnerf360.py 
  • single-scale training and multi-scale testing on the mip-nerf 360 dataset
1
python scripts/run_mipnerf360_stmt.py


文章作者: 小九九
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小九九 !
  目录