Instant-angelo:在20分钟内构建高保真数字孪生!
新闻 (2023.12.22)
我们很高兴地宣布,我们已经在项目中加入了UniSDF的重新实现!UniSDF是UniSDF论文中提出的通用可微渲染器,在反射物体的3D重建方面达到了最先进的效果。
https://github.com/hugoycj/Instant-angelo/assets/40767265/e374fcfe-de37-459e-97d9-8a0c49380d06
请查看反射模式以亲身体验这些改进!在反射模式下,UniSDF展示了其重建反射表面的能力。我们相信这一添加将推动Instant-angelo在快速逼真神经3D重建方面达到新的高度。后续将进行进一步的实验和改进,以充分利用UniSDF。
简介
Neuralangelo可以从RGB视频捕获中实现高保真3D表面重建。它能够从普通移动设备创建小型物体和大型真实场景的数字复制品。这些数字复制品或"孪生体"以极高的三维地理细节呈现。
然而,仍有很大的改进空间。目前,官方和重新实现的Neuralangelo实现需要在A100上花费40小时和40 GB内存来重建真实世界场景。instant-nsr中开发了一个加速版本,但由于参数限制,结果不尽如人意。
为了填补高速、高保真重建的空白,我们的目标是设计Neuralangelo的高级迭代版本。这个改进的模型将专注于高保真神经表面重建,简化流程,在前所未有的20分钟内实现最高质量标准的结果。
我们提供快速查看项目成果示例。这些示例可以作为参考,帮助确定该项目是否适合您的使用场景。
安装
pip install torch torchvision
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
pip install -r requirements.txt
对于COLMAP,COLMAP网站上还提供了其他安装选项
数据准备
要从自定义图像中提取COLMAP数据,您必须首先安装COLMAP(您可以在[此处]找到安装说明)。之后,将您的图像放在images/文件夹中。您的数据结构应如下所示:
-data_001
-images
-mask (可选)
-data_002
-images
-mask (可选)
-data_003
-images
-mask (可选)
每个单独的数据文件夹都包含自己的images文件夹。
如果您有遮罩,我们建议在开始重建之前使用它来过滤colmap稀疏点。您可以使用以下手动脚本进行预处理:
python scripts/run_colmap.py ${INPUT_DIR}
python scripts/filter_colmap.py --data ${INPUT_DIR} --output-dir ${INPUT_DIR}_filtered
在脚本中,${INPUT_DIR}应替换为您数据所在的实际目录路径。
第一行使用完整图像运行colmap重建脚本。第二行使用指定的遮罩过滤colmap稀疏点,并将过滤后的数据保存在带有"_filtered"后缀的新输出目录中。
开始重建!
在20分钟内运行平滑表面重建
[点击展开]
平滑重建模式适用于以下情况:-
重建没有高度细节的平滑物体时。平滑模式最适合表面相对简单、流畅,没有大量复杂特征的物体。
-
当您想要一个更高保真度的instant-nsr替代品,生成时间相似(20分钟内),但生成的模型中的孔洞更少时。
开始前您需要了解的信息:
- 平滑重建模式对曲率损失的依赖可能会过度平滑几何形状,无法捕捉平面结构和原始物体较平坦区域的细微变化。
- 这种模式依赖colmap生成的稀疏点来指导训练早期阶段的几何形状。然而,由于重复纹理、不准确的姿态或不正确的点匹配等因素,SFM(运动结构)有时会生成噪声点云。为解决这些问题,一种可能的解决方案是使用更强大的SFM工具,如hloc或DetectorFreeSfM。 此外,还可以采用后处理技术进一步改善点云。例如,使用Open3D中的半径离群值去除或pixsfm等方法可以帮助消除离群值并提高点云质量。
现在是时候开始运行了:
bash run_neuralangelo-colmap_sparse.sh ${INPUT_DIR}
这个脚本旨在自动化运行SFM的过程,无需事先进行任何准备。它将自动启动重建过程并导出生成的网格。输出文件将保存在logs目录中。
如果有可用的遮罩并放置在data_folder下的正确位置,您可以通过运行以下命令开始:
bash run_neuralangelo-colmap_sparse.sh ${INPUT_DIR}_filtered
在20分钟内运行细节表面重建
非常感谢youmi-zym创建Tanks and Temples上的图像。
[点击展开]
仅使用RGB输入在20,000步(约20分钟)内生成高保真表面重建具有挑战性,特别是对于稀疏的野外捕获,其中遮挡和有限视图使表面重建成为一个欠约束问题。这可能导致优化不稳定和难以收敛。引入激光雷达、ToF深度或预测深度可以帮助稳定优化并加速训练。然而,直接正则化渲染深度并不理想,因为density2sdf引入了偏差。此外,确保跨视图的一致深度很困难,特别是使用较低质量的ToF传感器或预测深度时。我们建议直接使用MVS点云和法线正则化SDF场,以减轻偏差。
重要的是,在倾斜摄影和虚拟导览等真实场景中,密集点云已经是中间输出。这允许直接利用现有点云进行正则化,无需额外计算。在这样的使用场景中,点云先验作为捕获过程的一部分是免费的。
开始前您需要了解的信息:
- 需要一个对齐的带有法线的密集点云,您可以在配置文件中的
dataset.dense_pcd_path
指定相对路径 - 点云可以通过各种方法生成,可以是来自传统MVS如colmap或OpenMVS,也可以是基于学习的MVS方法。您甚至可以使用商业摄影测量软件如metashape和DJI生成点云。
现在是时候开始运行了:
bash run_neuralangelo-colmap_dense.sh ${INPUT_DIR}
[实验性] 在30分钟内运行反射表面重建
https://github.com/hugoycj/Instant-angelo/assets/40767265/8ff8687c-35f6-4744-b09c-62665546c27c
[点击展开]
开始之前你需要了解的信息:
- 我们实现了UniSDF的几个关键技术,包括:1. 相机和反射辐射组合;2. 从粗到细的训练策略。然而,我们目前没有实现收缩和建议采样。相反,我们使用NeRF++进行背景建模,并使用占用网格加速采样。
- 由于GPU资源限制,我们没有实现与UniSDF论文完全相同的参数和训练方案,该论文使用8个V100 GPU进行3小时的训练。未来,我们计划继续尝试UniSDF以提高重建质量和效率。但目前,我们做了一些调整,使UniSDF能在普通可用的GPU硬件上以合理的训练时间实现性能提升。具体来说,我们的修改包括:
- 将MLP维度从256降至64
- 辐射MLP仅使用2层
- 16级NGP网格,每级2个通道(原为4个通道)
- 待办事项:
- 收缩
- 建议采样
- 预处理数据集链接
- UniSDF中的其他正则化方法
现在可以开始运行:
bash run_neuralangelo-colmap_sparse_reflection.sh ${INPUT_DIR}
常见问题(FAQ)
[点击展开]
-
问: CUDA内存不足。
答: Instant-angelo至少需要10GB GPU内存。如果内存不足,请考虑将
model.num_samples_per_ray
从1024降至512。 -
问: 这个仓库的许可证是什么?
答: 本仓库基于instant-nsr-pl构建,采用MIT许可证。根据MIT许可证的条款,本仓库中的材料、代码和资产可以用于商业目的,无需明确许可。用户可以自由使用、修改和分发这些内容,甚至用于商业应用。但是,我们要求对原instant-nsr-pl作者和本仓库进行适当归属。请参阅LICENSE文件了解完整的条款和条件。
-
问: 我的自定义数据集重建效果不好。
答: 本仓库仍在积极开发中,其在各种真实世界数据上的稳健性尚未得到证实。用户在将该方法应用于新数据集时可能会遇到问题。如有任何问题,请开启issue或直接联系作者:chongjieye@link.cuhk.edu.cn。
-
问: 使用Vis-MVSNet生成密集先验很慢。
答: 目前,300帧的预处理大约需要10~15分钟,但通过用MVSFormer或SimpleRecon等最新方法替换Vis-MVSNet,仍有很大的效率提升空间。此外,利用量化和TensorRT可以大幅减少预处理时间。总的来说,MVSNet创建所需点云的速度比传统MVS方法快一个数量级。
-
问: 该项目无法在Windows上运行。
答: 本项目尚未在Windows上测试,脚本可能存在兼容性问题。在当前开发阶段,我们建议在Linux系统上进行实验以获得最佳体验。我们对目前无法保证Windows支持表示歉意。如果在尝试在Windows上运行时遇到任何问题,请随时开启issue并详细说明。社区反馈将有助于未来改进跨平台兼容性。
相关项目:
- instant-nsr-pl:出色的PyTorch-Lightning实现的Instant-NSR!
- neuralangelo:Neuralangelo: High-Fidelity Neural Surface Reconstruction的官方实现
- sdfstudio:基于SDF的神经重建统一框架,易于开发
- torch-bakedsdf:BakedSDF:Meshing Neural SDFs for Real-Time View Synthesis的非官方PyTorch实现
致谢
- 感谢Fangjinhua Wang在改进反射表面重建方面的出色工作UniSDF
- 感谢bennyguo提供的优秀pipeline instant-nsr-pl
- 感谢RaduAlexandru在permuto_sdf中实现的改进曲率损失
- 感谢Alex Yu在svox2中实现的球谐函数
- 感谢Zesong Yang和Chris提供的宝贵见解和反馈,这些对开发有很大帮助