MeshSplatting 数据准备指南:如何为自己的场景准备COLMAP、Depth Anything v2深度与Metric3D法线监督
【免费下载链接】mesh-splatting
MeshSplatting 是一个基于不透明网格(Opaque Meshes)的实时可微分渲染项目(CVPR 2026),通过三角形 Splatting 实现高质量场景重建与实时渲染。想在自己的场景上复现效果,数据准备是关键一步:你需要一份 COLMAP 重建结果,可选地再补充Depth Anything v2 深度图与Metric3D 法线图作为优化监督信号。本文将手把手带你完成这三类数据的准备,让你快速上手训练自己的场景。
一、先认识标准目录结构:MeshSplatting 数据准备的核心
MeshSplatting 基于 COLMAP 数据集格式,加载逻辑在 scene/dataset_readers.py 中实现。一个完整的场景目录应如下所示:
my_scene/ ├── images/ # RGB 图像(默认读取此文件夹) │ └── *.jpg ├── sparse/ │ └── 0/ │ ├── cameras.bin # 相机内参 │ ├── images.bin # 相机外参 │ ├── points3D.bin # 稀疏点云 │ └── depth_params.json # (可选)深度标定参数 ├── depth/ # (可选)Depth Anything v2 生成的深度图 │ └── *.png └── normals/ # (可选)Metric3D 生成的法线图 └── *.png💡 三个关键约定:深度图文件夹名必须叫
depth;法线图文件夹名由图像文件夹名替换而来(images→normals,images_2→normals_2);所有文件以图像同名无扩展名为基准。
二、COLMAP 场景准备:第一步也是必选项
- 用相机围绕场景拍摄照片(360° 环绕拍摄效果最佳,参考 MipNeRF-360 的采集方式)。
- 运行 COLMAP 完成特征提取、匹配与稀疏重建(SfM),输出
sparse/0/目录。 - 支持
bin与txt两种格式,程序会优先读取二进制文件(cameras.bin、images.bin),读取失败时自动回退到文本格式。 - 注意:仅支持PINHOLE与SIMPLE_PINHOLE相机模型(无畸变),带畸变模型的图会在加载时报错。
训练命令(详见 README.md):
python train.py -s <path_to_scenes> -m <output_model_path> --eval室内场景需追加--indoor参数。若图像存放在非默认文件夹(如images_2、images_4),可通过-i参数指定。
三、Depth Anything v2 深度图生成:4步完成深度监督
深度图作为先验参与优化(损失权重定义在 arguments/init.py 的depth_lambda_init/depth_lambda_final),能显著提升重建质量。生成步骤如下:
第 1 步:准备 Depth Anything v2 仓库
按 Depth Anything v2 官方说明克隆仓库,并将Depth-Anything-V2-Large权重下载放入Depth-Anything-V2/checkpoints/目录。
第 2 步:批量生成深度图
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale \ --img-path <path to input images> --outdir <output path>第 3 步:把深度图放进depth文件夹
新建名为depth的文件夹,与 RGB 图像文件夹并排放置,例如MipNeRF360/Garden/depth/。每张深度 PNG 的文件名必须与对应图像同名(仅扩展名为.png)。
第 4 步:生成depth_params.json标定文件
python utils/make_depth_scale.py --base_dir <path to colmap> --depths_dir <path to generated depths>该脚本(utils/make_depth_scale.py)会利用 COLMAP 稀疏点的深度与单目深度图做逐图仿射对齐(scale + offset),结果写入sparse/0/depth_params.json。训练时加载器会据此把相对深度换算为米制深度,并对离群图(scale 偏离中位数过多时)自动屏蔽其深度监督,保证鲁棒性。
四、Metric3D 法线监督:一条命令提取法线图
法线监督用于约束网格表面的朝向正确性,提取脚本为 extract_normals.py,内部调用 Metric3D(vit_small,FP16 推理):
python extract_normals.py -s <path_to_dataset>常用参数说明:
| 参数 | 说明 |
|---|---|
-s/--scene | 场景根目录,如.../MipNeRF360/bicycle |
-i/--images_folder | 图像子文件夹名,默认images,高分辨率数据集可填images_2或images_4 |
脚本会自动创建对应的输出目录(images→normals),遍历文件夹内所有 jpg/jpeg 图像,将法线预测缩回原始分辨率并保存为 PNG。法线监督是可选的:加载器 scene/dataset_readers.py 会在images同级查找normals文件夹,存在即启用,不存在则跳过,因此你也可以替换为其他法线估计器。
五、训练与验证:检查数据是否准备正确
数据准备完成后,直接运行训练即可验证:
python train.py -s <path_to_scenes> -m <output_model_path> --eval训练日志中如果出现xxx not found in depths_params之类提示,说明某张图像的命名与depth_params.json中的键对不上,请检查深度图文件名。
训练完成后:
- 渲染验证:
python render.py -m <path_to_model> - 生成视频:
python create_video.py -m <path_to_model> -s <path_to_scenes> - 导出 PLY:
python create_ply.py <output_model_path>
六、常见坑位清单:MeshSplatting 数据准备排错指南
- 深度文件夹名不对:必须是
depth,不是depths或其他名称,否则深度监督不生效。 - 深度图是彩色或 8 位灰度:加载器按 16 位(除以 2¹⁶)解析灰度 PNG,请使用 Depth Anything 官方
--grayscale输出。 --indoor会关闭深度正则化:室内预设(update_indoor)将depth_lambda_init/depth_lambda_final置 0,这是官方针对室内场景的调参策略,属正常行为。- 图像文件夹用了降采样版本:如用
images_2,训练与法线提取(-i images_2)两处都要保持一致。 - COLMAP 有畸变:仅支持 PINHOLE / SIMPLE_PINHOLE,拍摄与标定阶段就应避免畸变模型。
- 首次加载会转换点云:程序首次打开场景时会将
points3D.bin转换为points3D.ply并缓存,属正常提示。
总结
完成 COLMAP 重建后,你的场景就能直接训练;再按本文补充depth/深度图 +depth_params.json与normals/法线图,即可获得最完整的监督信号组合。整套流程的核心脚本只有三个:utils/make_depth_scale.py、extract_normals.py 以及训练入口 train.py,照着目录结构准备,一次就能跑通。
【免费下载链接】mesh-splatting
相关推荐
Depth-Anything-V2深度估计终极指南:如何快速实现室外场景精准测距
Depth Anything V2深度估计终极指南:如何快速实现室外场景精准测距 Depth Anything V2是当前最先进的单目深度估计基础模型,能够在各
人工智能计算机视觉深度学习Depth-Anything-V2终极指南:如何用Transformer实现精准单目深度估计
Depth Anything V2终极指南:如何用Transformer实现精准单目深度估计 Depth Anything V2是一个更强大的单目深度估计基础模
人工智能计算机视觉深度学习深度估计革命:如何用Depth-Anything-V2实现精准度量深度训练
深度估计革命:如何用Depth Anything V2实现精准度量深度训练 深度估计技术正在经历一场革命性的变革,从传统的相对深度估计迈向更精准的度量深度估计。
人工智能计算机视觉深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考