MeshSplatting 数据准备指南:如何为自己的场景准备COLMAP、Depth Anything v2深度与Metric3D法线监督

发布时间:2026/10/30 4:32:22
MeshSplatting 数据准备指南:如何为自己的场景准备COLMAP、Depth Anything v2深度与Metric3D法线监督

【免费下载链接】mesh-splatting

项目地址:https://gitcode.com/gh_mirrors/me/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 场景准备:第一步也是必选项

  1. 用相机围绕场景拍摄照片(360° 环绕拍摄效果最佳,参考 MipNeRF-360 的采集方式)。
  2. 运行 COLMAP 完成特征提取、匹配与稀疏重建(SfM),输出sparse/0/目录。
  3. 支持bin与txt两种格式,程序会优先读取二进制文件(cameras.bin、images.bin),读取失败时自动回退到文本格式。
  4. 注意:仅支持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 数据准备排错指南

  1. 深度文件夹名不对:必须是depth,不是depths或其他名称,否则深度监督不生效。
  2. 深度图是彩色或 8 位灰度:加载器按 16 位(除以 2¹⁶)解析灰度 PNG,请使用 Depth Anything 官方--grayscale输出。
  3. --indoor会关闭深度正则化:室内预设(update_indoor)将depth_lambda_init/depth_lambda_final置 0,这是官方针对室内场景的调参策略,属正常行为。
  4. 图像文件夹用了降采样版本:如用images_2,训练与法线提取(-i images_2)两处都要保持一致。
  5. COLMAP 有畸变:仅支持 PINHOLE / SIMPLE_PINHOLE,拍摄与标定阶段就应避免畸变模型。
  6. 首次加载会转换点云:程序首次打开场景时会将points3D.bin转换为points3D.ply并缓存,属正常提示。

总结

完成 COLMAP 重建后,你的场景就能直接训练;再按本文补充depth/深度图 +depth_params.json与normals/法线图,即可获得最完整的监督信号组合。整套流程的核心脚本只有三个:utils/make_depth_scale.py、extract_normals.py 以及训练入口 train.py,照着目录结构准备,一次就能跑通。

【免费下载链接】mesh-splatting

项目地址:https://gitcode.com/gh_mirrors/me/mesh-splatting
点击查看免费下载

相关推荐

上一篇:5 分钟解锁中兴光猫工厂模式:zteOnu 一条命令激活并永久开启 Telnet
下一篇:Nucleus Co-Op 分屏多人游戏工具完整指南:一台电脑实现本地双人联机

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考