ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

DepthSplat 实战指南:如何用 12 张照片跑通高斯溅射场景重建与深度估计

2026/8/14 19:34:33 拓冰建站 浏览量
DepthSplat 实战指南:如何用 12 张照片跑通高斯溅射场景重建与深度估计

DepthSplat 实战指南:如何用 12 张照片跑通高斯溅射场景重建与深度估计

【免费下载链接】depthsplat[CVPR'25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplat

想象这样一个场景:你在装修前给客厅拍了 12 张照片,想生成一个可以"走进去"看的新视角视频。传统三维重建要么需要 GPU 渲染数小时,要么对拍摄角度要求苛刻。DepthSplat,这个来自 CVPR 2025 的模型,把这一切压缩到了0.6 秒——在单张 A100 上,从 12 张 512x960 的输入图像直接重建出可自由漫游的 3D 场景,同时还能顺手输出每一帧的精准深度图。更特别的是,它让"深度估计"和"高斯溅射渲染"这对曾经的上下游任务,第一次互相喂饭。

一句话说清:它解决什么问题

DepthSplat(连接高斯溅射与深度估计)的核心价值只有一句:用深度图帮高斯溅射渲染更准,再用渲染重建帮深度估计学得更好

  • 如果你在做新视角合成(NVS):输入 2~12 张带位姿的图像,就能实时渲染新视角。
  • 如果你在做多视图深度估计:它提供一个开箱即用的深度预测模型,输出尺度与相机平移对齐的稠密深度。
  • 适用人群:计算机视觉研究者、3D 内容创作者、想快速搭一个三维重建 Demo 的工程师。

原理白话化:像"量房子"一样理解它

先忘掉高斯溅射,把它想成给场景"贴 3D 光点"。每一个像素投影到三维空间,变成一个带颜色、大小和透明度的微小椭球(Gaussian)。成百上千个椭球叠加在一起,就拼出了完整的场景。渲染时只需把椭球按深度排序投影到新视角,就能得到画面。

那深度有什么用?渲染新视角最大的敌人是"边缘穿帮"和"重影"——比如桌子和墙壁交界处,椭球分不清谁在前谁在后。如果模型先预测出每帧的深度,就能给椭球"排好队",渲染立刻清晰起来。这是"深度帮渲染"。

反向看:模型先在大量视频数据集上做无监督的新视角重建训练,中间被迫学出的深度表示,再拿到 ScanNet、TartanAir 等带真值的深度数据上微调,就能变成高精度深度估计器。这是"渲染帮深度"。论文里把这个互相促进的闭环叫作跨任务交互(cross-task interaction),而 DepthSplat 正是第一个把这个闭环完整跑通并开源的工作。

它在代码里如何分工?深度与匹配由 src/model/encoder/encoder_depthsplat.py 完成,其中多视图匹配模块在 src/model/encoder/unimatch/mv_unimatch.py,单目特征来自 ViT 骨干;3D 高斯则由 src/model/decoder/decoder_splatting_cuda.py 里的 CUDA 光栅化器渲染,真正做到了毫秒级。

最短路径上手:跑通第一次推理

目标是:克隆仓库 → 装环境 → 下载预训练模型 → 用现成测试子集跑出新视角视频。全程约 30 分钟。

第 1 步:克隆并创建虚拟环境

git clone https://gitcode.com/gh_mirrors/de/depthsplat cd depthsplat conda create -y -n depthsplat python=3.10 conda activate depthsplat

官方开发环境为 PyTorch 2.4.0 + CUDA 12.4 + Python 3.10,照此配置最省心。

第 2 步:安装依赖

pip install torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu124 pip install -r requirements.txt

注意 requirements.txt 里包含自定义的 diff-gaussian-rasterization 扩展,首次安装会编译 CUDA 算子,等待 5~10 分钟属正常。

第 3 步:准备模型与测试数据

把权重放在pretrained/目录下,官方权重托管在 Hugging Face 的haofeixu/depthsplat仓库。推荐创建软链接:

ln -s /你的模型存放路径 pretrained

同时准备官方提供的预处理好测试子集re10k_720p_test_subset.zipdl3dv_960p_test_subset.zip,各含两个场景),无需下载完整数据集即可体验。

第 4 步:跑出第一段视频

CUDA_VISIBLE_DEVICES=0 python -m src.main +experiment=dl3dv \ dataset.test_chunk_interval=1 \ dataset.roots=[datasets/dl3dv_960p] \ dataset.image_shape=[512,960] \ dataset.ori_image_shape=[540,960] \ model.encoder.upsample_factor=8 \ model.encoder.lowest_feature_resolution=8 \ model.encoder.gaussian_adapter.gaussian_scale_max=0.1 \ checkpointing.pretrained_model=pretrained/depthsplat-gs-small-re10kdl3dv-448x768-randview4-10-c08188db.pth \ mode=test \ dataset/view_sampler=evaluation \ dataset.view_sampler.num_context_views=12 \ dataset.view_sampler.index_path=assets/dl3dv_start_0_distance_100_ctx_12v_video.json \ test.save_video=true \ test.stablize_camera=true \ test.compute_scores=false \ output_dir=outputs/depthsplat-dl3dv-512x960

这条命令来自 README.md,输入 12 张图,输出新视角视频。把dataset.image_shape调小、dataset.test_chunk_interval调大(如 10)可以显著降低显存占用,先验证流程。

第 5 步:顺带输出深度图

使用深度模型(如depthsplat-depth-base-352x640-randview2-8)并开启深度保存开关:

python -m src.main +experiment=re10k \ mode=test \ dataset/view_sampler=evaluation \ dataset.image_shape=[352,640] \ model.encoder.monodepth_vit_type=vitb \ train.forward_depth_only=true \ checkpointing.pretrained_depth=pretrained/depthsplat-depth-base-352x640-randview2-8-65a892c5.pth \ test.save_depth=true \ test.save_depth_concat_img=true \ output_dir=outputs/depthsplat-depth-base-re10k

这组参数摘录自 scripts/inference_depth.sh,2 张输入即可输出尺度一致的稠密深度图。

踩坑避雷:新手常见问题清单

症状原因解决办法
装依赖时 CUDA 算子编译失败显卡驱动与 PyTorch 的 CUDA 版本不匹配严格使用 README 指定的 cu124 版本安装 torch
报错缺少pretrained/权重模型文件未放置或文件名不匹配ln -s建立软链接,并核对权重的 sha256sum 前缀
显存不足(OOM)全测试集场景太多、分辨率太高dataset.test_chunk_interval设为 10,或调小dataset.image_shape
渲染视频黑屏或闪烁缺少 ffmpegapt install ffmpegconda install -c conda-forge ffmpeg
深度尺度不对没意识到输出与相机平移尺度对齐保持dataset.ori_image_shape与训练一致,避免只改一处
相机内参换算混乱不理解项目相机约定内参矩阵按宽高归一化,外参遵循 OpenCV camera-to-world 约定,见 README 的 Camera Conventions

最容易被忽视的坑:训练脚本scripts/dl3dv_depthsplat_train.sh默认用 8 节点、每卡 80GB 显存,个人显卡直接跑必炸。不要照搬,把trainer.num_nodes改为 1,并缩小data_loader.train.batch_size

效果验证:为什么值得信任

DepthSplat 的能力都有硬指标背书,全部来自论文与官方模型库 MODEL_ZOO.md:

  • 速度:12 视角(512x960)前馈重建 0.6 秒,单卡 A100 完成,达到实时级。
  • 新视角质量:提供 small(37M)/ base(117M)/ large(360M)三档模型,在 RealEstate10K 与 DL3DV 上均可复现论文表 1、表 7 的指标。
  • 零样本泛化:用 RealEstate10K 训练的模型直接迁移到 ACID 和 DL3DV,无需重新训练,这是前馈式模型(feed-forward)最大的价值。
  • 深度质量:在 ScanNet、TartanAir、VKITTI2 上微调后的深度模型,其预训练方式本身就来自高斯渲染的"无监督特训",论文展示了渲染预训练能让深度误差显著下降。
  • 可复用资产:开启test.save_gaussian=true即可导出.ply格式的点云,配合在线查看器直接看 3D 重建结果。

换句话说,你不需要 8 卡集群也能验证效果——用预训练权重跑推理,单张 24GB 显存的消费级显卡就足够,官方也确认了在 RTX 4090 上训练结果与 A100 相差不超过 0.1dB。

延伸学习:下一步去哪里

  • 论文精读:arXiv: 2410.13862(CVPR 2025),重点读方法部分的两阶段流程与跨任务交互机制。
  • 预训练模型清单:MODEL_ZOO.md 列出了全部 9 个权重,含训练数据、分辨率、参数量和 sha256sum。
  • 数据集准备:DATASETS.md 详细说明 RealEstate10K、DL3DV、ACID 的下载与转换流程,预处理脚本在 src/scripts/convert_dl3dv_train.py 等文件中。
  • 配置体系:入口是 config/main.yaml,实验配置在 config/experiment/re10k.yaml 与dl3dv.yaml,编码器参数在 config/model/encoder/depthsplat.yaml。
  • 训练参考:官方提供了 4×GH200 的训练脚本 scripts/dl3dv_depthsplat_train.sh 和re10k_depthsplat_train.sh,并明确说明了如何在更小显存上复现。
  • 最新进展:论文作者后续发布的 ReSplat 在更紧凑、更鲁棒的前馈高斯溅射方向继续迭代,值得跟进。

收尾:动手,比围观更有价值

从克隆仓库到跑出第一段漫游视频,你离"用几张照片重建整个场景"只差一次pip install。DepthSplat 已经把最难的深度—渲染耦合、CUDA 光栅化、数据管线全部封装好,剩下的就是把命令跑起来,然后替换成你自己的照片。

不用等 8 卡服务器,不用读完整篇论文。现在就去 clone 仓库,跑通第一个推理脚本,你会在outputs/目录里看到一个属于你的 3D 世界——而这,只是开始。

【免费下载链接】depthsplat[CVPR'25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplat

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考