DepthSplat 实战入门:如何用十几张照片快速重建出可漫游的 3D 场景
DepthSplat 实战入门如何用十几张照片快速重建出可漫游的 3D 场景【免费下载链接】depthsplat[CVPR25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplatDepthSplat 是 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 张都可以模型在 RealEstate10Kre10k和 DL3DV 两个数据集上训练相关配置都预置在config/dataset/目录下。第一次跑通推理跟着这 5 步走接下来进入正题。假设你已经把仓库 clone 到了本地开始配置环境。第一步装环境。官方开发环境是 Python 3.10、PyTorch 2.4.0、CUDA 12.4。建议先建一个干净的虚拟环境然后依次执行pip install torch2.4.0 torchvision0.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_DEVICES0 python -m src.main experimentdl3dv \ dataset.test_chunk_interval1 \ dataset.roots[datasets/re10k_720p] \ dataset.image_shape[512,960] \ checkpointing.pretrained_modelpretrained/你的权重.pth \ modetest \ dataset/view_samplerevaluation \ dataset.view_sampler.num_context_views6 \ test.save_videotrue \ output_diroutputs/depthsplat-re10k注意输出视频需要系统里装了 ffmpeg。如果你只想快速验证可以只测少量场景把dataset.test_chunk_interval调大即可比如设为 10就只跑全量测试集的十分之一。第五步把重建出的高斯导出看看。在测试命令里加上test.save_gaussiantrue模型会把重建结果保存成.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[CVPR25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考