二维高斯涂抹进行几何准确的辐射场
项目页面 | 论文 | 视频 | Surfel 光栅化 (CUDA) | Surfel 光栅化 (Python) | DTU+COLMAP (3.5GB) | 适用于Windows的SIBR查看器预构建版本
本仓库包含了"二维高斯涂抹以获得几何准确的辐射场"论文的官方实现。我们的工作用一组二维定向圆盘(表面元素)表示场景,并使用视角正确的可微分光栅化对surfels进行光栅化。我们的工作还开发了增强重建质量的正则化。我们还为高斯涂抹设计了网格化方法。
⭐ 新功能
- 2024/07/19: 新增Colab Notebook支持! 感谢atakan-topaloglu
- 2024/06/10: 新增SIBR查看器支持!
- 2024/06/05: 新增基于Viser的远程查看器支持! 感谢HwanHeo。
- 2024/05/30: 修复了与无界网格化相关的一个错误。前景网格质量现在应该与有界网格一致了。
- 2024/05/17: 通过CUDA算子融合将训练速度提高了30%-40%。如果您已经安装了它,请更新diff-surfel-rasterization子模块。
git submodule update --remote pip install submodules/diff-surfel-rasterization
- 2024/05/05: 重要更新 - 现在我们的算法支持无界网格提取!我们的关键想法是将空间收缩成一个球,然后执行自适应TSDF截断。
SIBR查看器
适用于Windows的预构建查看器可在此处找到。如果您使用Ubuntu或想检查查看器的使用,请参考GS Monitor。
如何使用
首先打开查看器,
<下载/编译查看器的路径>/bin/SIBR_remoteGaussian_app_rwdi
然后
# 监控训练过程
python train.py -s <COLMAP或NeRF合成数据集的路径>
# 查看训练好的模型
python view.py -s <COLMAP或NeRF合成数据集的路径> -m <训练好的模型路径>
安装
# 下载
git clone https://github.com/hbb1/2d-gaussian-splatting.git --recursive
# 如果您有用于3dgs的环境,请使用它
# 如果没有,请创建一个新环境
conda env create --file environment.yml
conda activate surfel_splatting
训练
要训练一个场景,只需使用
python train.py -s <COLMAP或NeRF合成数据集的路径>
用于正则化的命令行参数
--lambda_normal # 法线一致性的超参数
--lambda_distortion # 深度失真的超参数
--depth_ratio # 0表示平均深度,1表示中位数深度,0对大多数情况都有效
调整参数的小贴士:
- 对于无界/大场景,我们建议使用平均深度,即
depth_ratio=0
,以减少"盘状失真"伪影。
测试
有界网格提取
要导出一个在有界体积内的网格,只需使用
python render.py -m <预训练模型路径> -s <COLMAP数据集路径>
您应该为有界TSDF融合调整以下命令行参数:
--depth_ratio # 0表示平均深度,1表示中位数深度
--voxel_size # 体素大小
--depth_trunc # 深度截断
如果未指定这些参数,该脚本将自动使用相机信息来估算它们。
无界网格提取
要导出任意大小的网格,我们设计了一种无界TSDF融合,具有空间收缩和自适应截断。
python render.py -m <预训练模型路径> -s <COLMAP数据集路径> --mesh_res 1024
快速示例
假设您已经下载了MipNeRF360,只需使用
python train.py -s <m360的路径>/<garden> -m output/m360/garden
# 使用我们的无界网格提取!!
python render.py -s <m360的路径>/<garden> -m output/m360/garden --unbounded --skip_test --skip_train --mesh_res 1024
# 或者使用有界网格提取,如果您关注前景
python render.py -s <m360的路径>/<garden> -m output/m360/garden --skip_test --skip_train --mesh_res 1024
如果您已经下载了DTU数据集,您可以使用
python train.py -s <dtu的路径>/<scan105> -m output/date/scan105 -r 2 --depth_ratio 1
python render.py -r 2 --depth_ratio 1 --skip_test --skip_train
自定义数据集: 我们使用与3DGS相同的COLMAP加载器,您可以按照此处的说明准备您的数据。
全面评估
我们提供了脚本来评估我们在新视图合成和几何重建方面的方法。
解释与论文中性能差异的原因
我们已经重新实现了这个仓库,以提高效率,这对性能产生了一些影响。主要有两个因素造成了这种变化:
-
📈 我们修复了一些小错误,如TSDF融合中的半像素偏移,从而改善了几何重建。
-
📉 我们删除了用于密集化的低通滤波器的梯度,这减少了高斯的数量。因此,PSNR略有下降,但我们认为这种权衡对于实际应用来说是值得的。
您可以报告论文中的数字或本实现中的数字,只要它们在可比的设置中讨论。
新视图合成
对于MipNeRF360上的新视图合成(也适用于其他COLMAP数据集),使用
python scripts/mipnerf_eval.py -m60 <MipNeRF360数据集的路径>
我们提供了预训练模型的评估结果(图像)。
表格结果
几何重建
对于DTU数据集的几何重建,请下载预处理后的数据。您还需要下载ground truth DTU点云。
python scripts/dtu_eval.py --dtu <预处理后的DTU数据集路径> \
--DTU_Official <官方DTU数据集路径>
我们提供了预训练模型的评估结果(网格)。
表格结果
DTU数据集上的Chamfer距离(越小越好)
24 | 37 | 40 | 55 | 63 | 65 | 69 | 83 | 97 | 105 | 106 | 110 | 114 | 118 | 122 | Mean | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
论文 | 0.48 | 0.91 | 0.39 | 0.39 | 1.01 | 0.83 | 0.81 | 1.36 | 1.27 | 0.76 | 0.70 | 1.40 | 0.40 | 0.76 | 0.52 | 0.80 |
重现 | 0.46 | 0.80 | 0.33 | 0.37 | 0.95 | 0.86 | 0.80 | 1.25 | 1.24 | 0.67 | 0.67 | 1.24 | 0.39 | 0.64 | 0.47 | 0.74 |
对于TnT数据集上的几何重建,请下载预处理过的TnT_data。您还需要下载地面真实TnT_GT,包括地面真实点云、对齐和裁剪文件。
python scripts/tnt_eval.py --TNT_data <预处理的TNT数据集路径> \
--TNT_GT <official TNT评估数据集路径>
我们提供评估结果(预训练,网格)。
F1分数在TnT数据集上(越高越好)
Barn | Caterpillar | Ignatius | Truck | Meetingroom | Courthouse | Mean | |
---|---|---|---|---|---|---|---|
重现 | 0.41 | 0.23 | 0.51 | 0.45 | 0.17 | 0.15 | 0.32 |