DepthSplat 实战入门:如何用十几张照片快速重建出可漫游的 3D 场景
【免费下载链接】depthsplat[CVPR'25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplat
DepthSplat 是 CVPR 2025 收录的开源项目,核心思路是把高斯溅射(Gaussian Splatting)与深度估计"接"进同一个框架,让两项任务互相成就。这篇教程不打算罗列论文术语,而是带着你从"第一次跑通"出发,一步步看懂它内部是怎么干活的,顺便把新手最容易栽的坑提前告诉你。如果你正想尝试多视图 3D 重建或新视角合成,这篇文章应该能帮你省下不少折腾时间。
先问一个问题:一叠照片,能换回一个能转的 3D 场景吗
想象一下这个场景:你手里有十来张从不同角度拍下的照片,目标是得到一个可以自由旋转、从任意视角观看的 3D 场景。放在几年前,这条路并不轻松——要么用 COLMAP 这类传统管线做稠密重建,耗时且容易在弱纹理区域翻车;要么走 NeRF 路线,每个场景都要单独训练几分钟到几十分钟。而 DepthSplat 走的是"前馈式"(feed-forward)路线:模型看过足够多的数据后,拿到新场景的几张图就能直接出结果,不需要针对这个场景做任何额外优化。官方给出的数字是:在单张 A100 上,用 12 张 512x960 分辨率的输入图完成一次前馈重建,只要 0.6 秒。
换句话说,从"输入图片"到"可渲染的 3D 表示",几乎是一眨眼的功夫。
动手之前,先搞清楚它到底擅长什么
DepthSplat 表面上看是一个渲染模型,实际上是"一身两职":
- 新视角合成:用 3D 高斯溅射做渲染,输入 2~12 张带位姿的图片,即可生成任意新视角的画面,还能输出视频。
- 尺度一致的深度估计:模型里那颗"深度大脑"可以单独拿出来用,对多视角图片预测深度图,并且深度的尺度与相机位姿的平移尺度对齐——这点对很多下游任务至关重要。
更妙的是这两个能力不是各自为战。论文里有一句话点出了精髓:更好的深度能带来更好的高斯溅射渲染;反过来,用高斯溅射做无监督深度预训练,又能显著降低深度预测误差。这正是项目名"Connecting"的含义所在。
它支持的输入视角数也很灵活:从 2 张到 12 张都可以,模型在 RealEstate10K(re10k)和 DL3DV 两个数据集上训练,相关配置都预置在config/dataset/目录下。
第一次跑通推理,跟着这 5 步走
接下来进入正题。假设你已经把仓库 clone 到了本地,开始配置环境。
第一步,装环境。官方开发环境是 Python 3.10、PyTorch 2.4.0、CUDA 12.4。建议先建一个干净的虚拟环境,然后依次执行:
pip install torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu124 pip install -r requirements.txt第二步,准备预训练权重。所有模型的下载地址都列在MODEL_ZOO.md里。把下载好的权重统一放进pretrained/目录即可。有个小细节值得注意:每个权重文件名都带了 sha256sum 前缀,下载完可以顺手用sha256sum校验一下完整性,避免"跑起来报错才发现文件坏了"的尴尬。
第三步,先测深度估计。项目直接给了现成脚本scripts/inference_depth.sh,它里面预置了 base 模型在 re10k 和 dl3dv 上做深度预测的多组命令,覆盖 2 视角、6 视角、12 视角三种输入规模。运行后会在output_dir里输出深度图(png)、原始深度(npy)以及拼接可视化图。
第四步,渲染一段视频看看效果。README 里给了一组开箱即用的 re10k 视频渲染命令,核心参数包括:
CUDA_VISIBLE_DEVICES=0 python -m src.main +experiment=dl3dv \ dataset.test_chunk_interval=1 \ dataset.roots=[datasets/re10k_720p] \ dataset.image_shape=[512,960] \ checkpointing.pretrained_model=pretrained/你的权重.pth \ mode=test \ dataset/view_sampler=evaluation \ dataset.view_sampler.num_context_views=6 \ test.save_video=true \ output_dir=outputs/depthsplat-re10k注意,输出视频需要系统里装了 ffmpeg。如果你只想快速验证,可以只测少量场景,把dataset.test_chunk_interval调大即可(比如设为 10,就只跑全量测试集的十分之一)。
第五步,把重建出的高斯导出看看。在测试命令里加上test.save_gaussian=true,模型会把重建结果保存成.ply文件,用在线查看器就能直接打开,360 度拖拽观察重建质量,非常直观。
它内部到底是怎么干活的
跑通之后,不妨再往里看一眼。整条链路其实是一条清晰的生产线,核心逻辑在src/model/encoder/encoder_depthsplat.py和src/model/decoder/decoder_splatting_cuda.py里。
先看编码器(深度从哪来)。深度预测部分由MultiViewUniMatch完成——这是一个多视图匹配网络,继承了 UniMatch 的匹配思路,配合 Depth Anything V2 的单目 ViT 特征做先验,再用 DPT 头把特征上采样回原分辨率。深度出来后,GaussianAdapter会把"图像 + 深度 + 匹配概率 + 特征"一起喂给一个小型卷积回归头,逐像素预测高斯的各项属性:尺度、旋转四元数、球谐系数、偏移和透明度。这一层的关键在于,高斯参数不是凭空乱猜的,而是被深度牢牢约束着。
再看解码器(画面怎么出来)。splatting_cuda解码器负责把这些 3D 高斯投影到目标视角并用 CUDA 光栅化出像素。正是这套并行实现保证了毫秒级的渲染速度。
有一点值得强调:这套"深度预测 → 高斯参数 → 渲染"的流程是端到端可训练的。训练时损失会一路传回编码器,让深度预测器也在学着"怎么预测对渲染最有利的深度"。这就是前文说的双向连接。
新手最常见的几个坑,帮你提前排掉
相机约定别搞反。项目用的是 OpenCV 约定的相机到世界变换(+X 向右、+Y 向下、+Z 指向屏幕内),且内参矩阵做了归一化:第一行除以图像宽度、第二行除以图像高度。自定义数据集时如果这里对不上,画面会歪得离谱。
数据集路径要改对。测试命令里的dataset.roots指向你本地数据集的绝对路径,dataset.image_shape和dataset.ori_image_shape分别指定模型输入尺寸和原始图像尺寸,这两组数字必须和你的数据匹配。
显存不够怎么办。常见做法有三个:调低输入分辨率;在视频渲染时用test.render_chunk_size控制一次渲染的帧数;以及检查解码器配置里的点数上限参数,比如config/model/decoder/splatting_cuda.yaml中的max_points。另外别忘了dataset.test_chunk_interval——想快速调试时它就是你的救星。
想保存中间产物。测试配置里有一组test.save_*开关,save_depth存深度图、save_depth_npy存原始数据、save_gaussian存 ply、save_video存视频。全关的话测试会快很多,需要什么再逐个打开。
再进一步:自己训练一个模型
如果只是想用现成模型,看到这里就够了;想深入调教,那就聊聊训练。项目推荐的流程是"两阶段":
- 先在 re10k 上用 2 视角、256x448 分辨率预训练(参考
scripts/re10k_depthsplat_train.sh); - 再在 dl3dv 上用随机 2~6 视角微调(参考
scripts/dl3dv_depthsplat_train.sh)。
训练前需要准备 UniMatch 和 Depth Anything V2 的预训练权重,并配置好 wandb 日志。硬件门槛没有想象中高——虽然官方默认用 8 张 GH200,但实验表明 4 张 RTX 4090 或单张 A100 也能得到非常接近的结果(PSNR 差距不超过 0.1dB),只要保证"GPU 数 × 单卡 batch size × 训练步数"这个总样本数不变就行。
深度估计模型还有一条额外的微调路线:在 ScanNet、TartanAir、VKITTI2 上用真值深度监督微调,输入视角数随机取 2~8,训练分辨率 352x640。这部分命令同样写在scripts/inference_depth.sh里。
下一步去哪儿
到这里,你已经完成了"跑通推理 → 看懂原理 → 绕开坑 → 尝试训练"的完整闭环。建议的下一步行动是:先用MODEL_ZOO.md里的预训练模型把你的数据跑一遍,再用assets/目录下的视图索引文件做一次完整的定量评估。如果对模型的小型化感兴趣,可以留意项目作者后续推出的更紧凑、更鲁棒的前馈高斯溅射模型;想深入论文细节,也可以对照arxiv 2410.13862的正文和仓库里的DATASETS.md边读边试。
多视图重建这条路,DepthSplat 把门槛拉低了一大截。现在,不妨打开终端跑起第一条命令吧。
【免费下载链接】depthsplat[CVPR'25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考