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.zip或dl3dv_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 |
| 渲染视频黑屏或闪烁 | 缺少 ffmpeg | apt install ffmpeg或conda 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),仅供参考
