一张照片如何变成能自由旋转的3D世界DepthSplat新视角合成上手全记录【免费下载链接】depthsplat[CVPR25] 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 python3.10 conda activate depthsplat # 2. 安装 PyTorch 和项目依赖 pip install torch2.4.0 torchvision0.19.0 --index-url https://download.pytorch.org/whl/cu124 pip install -r requirements.txt依赖装完把预训练权重下载后放到pretrained/目录官方建议用ln -s软链接指过去然后就能跑推理了。以 RealEstate10K 上的 2 视角渲染为例CUDA_VISIBLE_DEVICES0 python -m src.main experimentre10k \ dataset.test_chunk_interval100 \ # 先只测1/100的场景跑通再调回1 model.encoder.monodepth_vit_typevitb \ # 编码器骨干可选 vits/vitb/vitl checkpointing.pretrained_modelpretrained/depthsplat-gs-base-re10k-256x256-view2-ca7b6795.pth \ modetest \ # 测试模式 test.save_videotrue \ # 顺便输出一段环绕视频 output_diroutputs/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大模型。几乎所有参数都能在命令行里用keyvalue覆盖不用改任何文件。组合生态工具。渲染时把test.save_gaussiantrue打开会导出.ply文件你可以直接丢进 SuperSplat 等在线查看器里像操作普通3D模型一样缩放旋转检视结果。深度模型输出的.npy深度图也可以作为下游任务如点云重建、机器人导航的输入。写在最后这一趟下来你已经知道了 DepthSplat 是什么连接高斯溅射与深度的前馈重建框架、为什么值得用秒级重建、双任务正反馈、开箱即用、怎么跑通一条命令出结果、怎么避坑、怎么进阶。它最妙的地方在于你不需要成为优化算法的专家也能在几分钟内把一个真实场景搬进数字世界。下一步建议你下载官方预处理子集亲手跑一遍视频渲染——那种看着镜头在重建的房间里游走的感觉比任何文字描述都来得直观。跑通之后欢迎去翻 MODEL_ZOO.md 和论文探索属于你自己的玩法。祝你玩得开心也期待看到你用 DepthSplat 造出的3D世界。【免费下载链接】depthsplat[CVPR25] DepthSplat: Connecting Gaussian Splatting and Depth项目地址: https://gitcode.com/gh_mirrors/de/depthsplat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考