本代码库是 2D Gaussian Splatting 的修改版本,集成了 单目深度先验 (Monocular Depth Priors)(来自 Depth Anything V3),旨在提升几何重建质量,特别是在弱纹理或稀疏视角区域。
- 单目深度监督:引入皮尔逊相关系数损失 (Pearson Correlation Loss),使渲染深度与单目深度先验对齐。
- Depth Anything V3 集成:包含自动为您的数据集生成高质量深度图的脚本。
- 无缝流程:修改后的数据加载器会自动检测并加载深度图(如果存在)。
请遵循原始安装步骤,然后安装 Depth Anything 的额外依赖项:
# 1. 克隆并安装环境(与原版相同)
git clone --recursive <this-repo-url>
conda env create --file environment.yml
conda activate surfel_splatting
# 2. 安装 Depth Anything 依赖
pip install opencv-python matplotlib huggingface_hub
cd Depth-Anything-3
pip install -e .
cd ..按照标准 COLMAP 格式组织数据(images, sparse/0 等),与原版 2DGS 相同。
使用提供的脚本为 DTU(或其他)场景生成深度图。该脚本将深度图作为 .npy 文件保存在 images 旁边的 depths_anything 文件夹中。
# 为 DTU 数据集中的所有扫描生成深度
python Depth-Anything-3/run_dtu_depth.py \
--dtu_root /path/to/your/DTU/dataset \
--checkpoint /path/to/DA3/checkpoint生成后的目录结构:
scan105/
├── images/
│ ├── 000001.jpg
│ └── ...
├── depths_anything/ <-- 已生成
│ ├── 000001.npy
│ └── ...
├── sparse/
└── ...
我们引入了一个新参数 --lambda_mono_depth 来控制深度损失的权重。
python train.py -s <path/to/scan105> \
-m <output/path> \
-r 2 \
--depth_ratio 1 \
--lambda_mono_depth 0.1 # 启用深度监督--lambda_mono_depth: 皮尔逊相关深度损失的权重。- 设置为
0.0(默认值)以运行原始基线。 - 建议起始值:
0.05或0.1。
- 设置为
训练期间,您可以在进度条或 TensorBoard 中监控新的深度损失:
depth: 当前的深度相关性损失值。
对于 MipNeRF360 的新视角合成(也适用于其他 COLMAP 数据集),请使用:
python scripts/m360_eval.py -m60 <path to the MipNeRF360 dataset> --skip_training该脚本对 Mip-NeRF 360 (m360) 数据集的渲染结果进行自动统计分析。它计算 室内 和 室外 场景类别的平均 SSIM、PSNR 和 LPIPS 指标。
从项目根目录运行以下命令:
python scripts/m360_cal.py 该脚本将自动打印每个场景类别的平均指标,并在以下位置生成摘要文件:
/eval/mipnerf360_eval_summary.json
对于 DTU 数据集的几何重建,请从 Drive 或 Hugging Face 下载预处理数据。您还需要下载 DTU 点云 真值 (Ground Truth)。
python scripts/dtu_eval.py --dtu <path to the preprocessed DTU dataset> \
--DTU_Official <path to the official DTU dataset>由于您已经使用深度图训练了模型,请务必使用以下参数:
--skip_training
该脚本将自动收集所有可用的 results.json 文件,读取其指标,并计算所有子目录下每个指标的平均值。
python scripts/dtu_cal.py此脚本对存储在以下目录的子目录中的评估指标执行自动聚合:
/scripts/tmp/
执行后,脚本将打印平均指标并在以下位置生成摘要文件:
/scripts/tmp/eval_summary.json
- Accuracy:重建点->最近参考点的距离 | 取平均
- Completeness:参考点->最近重建点的距离 | 取平均
- CD(Chamfer Distance)越小越好
$Chamfer ; Distance = (Accuracy + Completeness) / 2$
- PSNR(重建图像与训练视角的峰值信噪比)越高越好
$PSNR=10 \log_{10}{(\frac{MAX^2}{MSE})}$ - MAX 最大像素值 1 或 255
- MSE 图像之间的均方误差
F1-score =
- Ground Truth(激光扫描结果)
- P 重建点云
找到最近的 GT 距离小于阈值就认为正确(一般10mm)
对所有的G,找到最近的重建点,如果距离小于阈值,则认为被重建,这里的TP直接用Precision中计算的就行
- SSIM : 它把图像对比分解成三个部分:亮度 (luminance)、对比度 (contrast)、结构 (structure),并将它们组合成一个相似度分数(越大越相似)
- LPIPS 通过标准的预训练神经网络来对图像相似性做对比
- 原始 2DGS: 2d-gaussian-splatting
- Depth Anything V3: Depth-Anything-3