一张照片如何变成能自由旋转的3D世界?DepthSplat新视角合成上手全记录
【免费下载链接】depthsplat[CVPR'25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplat
想象一下这样的场景:你手里只有几张家门口拍的照片,却想让别人"走"进这个场景,从任意角度打量它。这就是3D视觉里常说的新视角合成(Novel View Synthesis)。过去想做到这一点,要么需要几十上百张照片慢慢"喂"给算法,要么渲染结果模糊得像隔着毛玻璃看世界。而 DepthSplat——这个来自 CVPR 2025 的开源项目——把高斯溅射(Gaussian Splatting)和深度估计这两项技术拧成一股绳,用寥寥几张图就能重建出可实时漫游的3D场景。本文不堆术语,带你把原理和玩法一次弄明白。
它解决了什么别的方案没解决的痛点
DepthSplat 的核心贡献,可以用三个"别人做不到"来概括。
第一,一次前馈,秒级重建。传统的 3D 高斯溅射需要针对每个场景做几分钟甚至几十分钟的逐场景优化(也就是反复训练那几万个小椭球)。DepthSplat 换了个思路:模型是"看一眼就懂"的前馈网络,输入 12 张 512×960 的图片,单张 A100 显卡上 0.6 秒就能完成重建。你不需要为每个新场景重新训练,拿来即用。
第二,深度与渲染互相"喂饭"。这是它名字里 "Connecting" 的含义:更准确的深度图能让高斯溅射渲染出更清晰的新视角;反过来,用高斯渲染的损失函数去预训练深度网络,居然能白嫖到无监督的深度信号,让深度预测误差进一步下降。两个任务不是简单拼装,而是形成了正反馈闭环。
第三,一套代码,两种能力。它既能做新视角合成(输出可导入任意查看器的.ply点云),也能做多视角深度估计(输出尺度与相机位姿对齐的深度图)。官方的模型库分了两条线:用于渲染的depthsplat-gs-*系列和用于深度预测的depthsplat-depth-*系列,参数规模从 37M 的小模型到 360M 的大模型任你挑,具体见 MODEL_ZOO.md。
五分钟跑通你的第一条命令
上手之前先说一下环境:项目基于 Python 3.10、PyTorch 2.4.0、CUDA 12.4 开发,建议用 conda 建一个干净的虚拟环境。
# 1. 克隆代码并创建虚拟环境 git clone https://gitcode.com/gh_mirrors/de/depthsplat cd depthsplat conda create -y -n depthsplat python=3.10 && conda activate depthsplat # 2. 安装 PyTorch 和项目依赖 pip install torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu124 pip install -r requirements.txt依赖装完,把预训练权重下载后放到pretrained/目录(官方建议用ln -s软链接指过去),然后就能跑推理了。以 RealEstate10K 上的 2 视角渲染为例:
CUDA_VISIBLE_DEVICES=0 python -m src.main +experiment=re10k \ dataset.test_chunk_interval=100 \ # 先只测1/100的场景,跑通再调回1 model.encoder.monodepth_vit_type=vitb \ # 编码器骨干,可选 vits/vitb/vitl checkpointing.pretrained_model=pretrained/depthsplat-gs-base-re10k-256x256-view2-ca7b6795.pth \ mode=test \ # 测试模式 test.save_video=true \ # 顺便输出一段环绕视频 output_dir=outputs/depthsplat-re10k跑完后打开outputs/depthsplat-re10k,你会看到渲染出的新视角图像、评估分数甚至视频。如果你没有完整数据集,也可以用官方提供的预处理子集(只含两个测试场景)快速验证流程,细节在 DATASETS.md 里有说明。注意dataset.test_chunk_interval这个参数很贴心,设成 10 或 100 就能抽样测试,不用等完整评估集跑完。
核心原理:它到底怎么做到的
我们不讲源码目录,而是按"问题→解法→代码在哪儿"的顺序来拆。
问题一:网络怎么知道每个像素离相机多远?单张图片天然有歧义——远处的小房子和近处的大房子在画面里可能一样大。DepthSplat 的做法是"单目打底,多目校准":先用 Depth Anything V2 这样的单目深度模型给出一个粗糙的初始猜测(相当于先凭经验估个大概),再用 UniMatch 这类多视图匹配模块去对比多张照片里同名像素的视差,把粗糙的深度修正得精确。这段逻辑集中在src/model/encoder/unimatch/mv_unimatch.py,而整个编码器的组装在 src/model/encoder/encoder_depthsplat.py。
问题二:有了深度,怎么变成能渲染的3D模型?这是高斯溅射登场的地方。你可以把场景想成一大片悬浮在空间里的小椭球,每个椭球有颜色、位置、大小和不透明度,渲染时把它们按从近到远叠加到画布上。DepthSplat 用一个轻量的卷积头(gaussian_regressor),从"图像+深度+匹配置信度"这些信息里直接回归出每个像素对应高斯点的全部属性,而不是像传统方法那样反复迭代。你可以把它理解成"编码器负责出题(深度),解码器负责交卷(3D高斯)"。解码器见src/model/decoder/decoder_splatting_cuda.py,底层的 CUDA 光栅化在src/model/decoder/cuda_splatting.py,这也是渲染毫秒级完成的功臣。
问题三:为什么"深度好"就"渲染好"?因为 3D 高斯的初始位置全靠深度图"钉"在空间里。深度图一旦出现误差,高斯点就会贴错地方,新视角自然糊掉。DepthSplat 的创新就是把这两步放进同一个可微分的网络里端到端训练,让渲染损失反向传播去修正深度,深度反过来又让渲染更准——这就是开头说的正反馈。
新手最容易踩的5个坑
1. 权重文件下载后校验不过。每个模型文件名里都带了 sha256 前缀,下载完先用sha256sum 文件名验一下再放进pretrained/,不然可能静默加载失败。
2. 显存不够。直接跑 512×960 的高分辨率推理很容易爆显存。先从小模型 + 256×256 分辨率起步,跑通了再升级。
3. 训练时必须先下载 UniMatch 和 Depth Anything V2 的预训练权重,并设置wandb.entity,否则训练脚本一启动就报错。脚本在 scripts/re10k_depthsplat_train.sh 里写得很清楚。
4. 训练脚本默认按 4 张大显存 GPU 配置的,但官方实测 4×RTX 4090 或单张 A100 也能达到几乎相同的精度(PSNR 差异最多 0.1 dB)。关键要保证"GPU数 × batch_size × max_steps"这个总样本数不变,改配置时别只动其中一个。
5. 数据集路径找不到。项目通过dataset.roots=[...]指定数据根目录,别把路径写错层级;Camera 的内参矩阵是按图像宽高归一化的,做自定义数据转换时务必对照 README 里的相机约定,否则重建出来的场景会"拧巴"。
进阶玩法:让 DepthSplat 为你所用
跑通官方示例只是起点,下面三个方向值得继续折腾。
接入自己的数据。修改src/scripts/下的转换脚本,把任意带相机位姿的图片序列转成项目要求的.torchchunk 格式,再在配置里指好index.json,就能在自定义场景上推理。视图采样策略(每次吃几帧、帧间距多大)在config/dataset/view_sampler/下配置。
按预算调性能。想省显存,把test.render_chunk_size调小、开test.stablize_camera稳定相机轨迹;想更快,选小模型并把model.encoder.monodepth_vit_type设为vits。反过来追求画质就上vitl大模型。几乎所有参数都能在命令行里用key=value覆盖,不用改任何文件。
组合生态工具。渲染时把test.save_gaussian=true打开,会导出.ply文件,你可以直接丢进 SuperSplat 等在线查看器里,像操作普通3D模型一样缩放旋转检视结果。深度模型输出的.npy深度图也可以作为下游任务(如点云重建、机器人导航)的输入。
写在最后
这一趟下来,你已经知道了 DepthSplat 是什么(连接高斯溅射与深度的前馈重建框架)、为什么值得用(秒级重建、双任务正反馈、开箱即用)、怎么跑通(一条命令出结果)、怎么避坑、怎么进阶。它最妙的地方在于:你不需要成为优化算法的专家,也能在几分钟内把一个真实场景"搬进"数字世界。下一步,建议你下载官方预处理子集,亲手跑一遍视频渲染——那种看着镜头在重建的房间里游走的感觉,比任何文字描述都来得直观。跑通之后,欢迎去翻 MODEL_ZOO.md 和论文,探索属于你自己的玩法。祝你玩得开心,也期待看到你用 DepthSplat 造出的3D世界。
【免费下载链接】depthsplat[CVPR'25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考