Skip to content

About

ZJU CV course project

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

结合单目深度监督的 2D Gaussian Splatting (2D Gaussian Splatting with Monocular Depth Supervision)

本代码库是 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 ..

📊 数据准备

1. 准备 COLMAP 数据

按照标准 COLMAP 格式组织数据(images, sparse/0 等),与原版 2DGS 相同。

2. 生成单目深度

使用提供的脚本为 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: 当前的深度相关性损失值。

评估

新视角合成 (Novel View Synthesis)

对于 MipNeRF360 的新视角合成(也适用于其他 COLMAP 数据集),请使用:

python scripts/m360_eval.py -m60 <path to the MipNeRF360 dataset> --skip_training

📊 Mip-NeRF 360 数据集评估摘要

该脚本对 Mip-NeRF 360 (m360) 数据集的渲染结果进行自动统计分析。它计算 室内 和 室外 场景类别的平均 SSIM、PSNR 和 LPIPS 指标。

🛠 用法

从项目根目录运行以下命令:

python scripts/m360_cal.py 

该脚本将自动打印每个场景类别的平均指标,并在以下位置生成摘要文件:

/eval/mipnerf360_eval_summary.json

几何重建 (Geometry reconstruction)

对于 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:参考点->最近重建点的距离 | 取平均

DTU 数据集

  • CD(Chamfer Distance)越小越好
    • $Chamfer ; Distance = (Accuracy + Completeness) / 2$
  • PSNR(重建图像与训练视角的峰值信噪比)越高越好
    • $PSNR=10 \log_{10}{(\frac{MAX^2}{MSE})}$
    • MAX 最大像素值 1 或 255
    • MSE 图像之间的均方误差

TnT(Tanks and Temples)数据集

F1-score = $\frac{2 \times Precision \times Recal}{Precision + Recall}$ | 越大越好

  • Ground Truth(激光扫描结果)
  • P 重建点云

$Precision = \frac{TP}{TP+FP}$

找到最近的 GT 距离小于阈值就认为正确(一般10mm)

$Recall = \frac{TP}{Total; GT ; Points}$ | 越大越好

对所有的G,找到最近的重建点,如果距离小于阈值,则认为被重建,这里的TP直接用Precision中计算的就行

Mip-nerf 360

  • SSIM : 它把图像对比分解成三个部分:亮度 (luminance)、对比度 (contrast)、结构 (structure),并将它们组合成一个相似度分数(越大越相似)
  • LPIPS 通过标准的预训练神经网络来对图像相似性做对比

📝 致谢

About

ZJU CV course project

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages