type
status
date
slug
summary
tags
category
icon
password
基于NeRF的三维重建任务要求学习历程采集数据了解Colmap的原理和使用NeRF的原理InstantNGP原理Gaussian Splitting原理Splatting的关键步骤Luma AI NeRF的使用及过程中遇到的问题最终提交演示
基于NeRF的三维重建
任务要求
任务要求如下:
- 使用你的设备拍摄一个真实世界场景的一组图片。
- 使用结构从运动(SfM)工具如Colmap校准这些图片,获得对应的相机姿态。
- 运行基于NeRF的模型,根据你准备的图片和姿态重建场景。
- 将重建结果转换为3D网格(ply或obj格式)。
- 在报告中详细描述上述过程,包括:
- 你选择的场景以及数据准备方式。
- 你所依据的NeRF项目及你对其的理解。
- 你为适应自己的数据调整的超参数以及为什么。
- (可选)除超参数调整之外,你对代码库进行了哪些修改以提高重建质量。
评估标准包括三个层次:
- 基础层次:物体级场景的几何结构重建。
- 中级层次:物体级场景的几何结构和外观重建。
- 高级层次:大型或无界场景的几何结构(和外观)重建。由于NeRF最初是为物体级场景设计的,因此在大型或无界场景中应用需要额外工作,例如可能需要用于大规模场景的更快NeRF代码库,以及特定坐标的映射。
流程:
1. 围着某一物体拍摄多张图片
2. 通过Colmap从图片张获取相机位姿(其实Colmap中是有MVS的一些方法,使得点云由sparse变为dense的,也可以用泊松分布等将空缺的地方补全)
3. 基于NeRF将图片结合相机位姿生成3D模型
4. 使用某些方法外观重建?
学习历程
采集数据
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2F72cb210c-5a34-4045-b2aa-f3525ec34646%2FUntitled.png?table=block&id=c898c868-26b5-4f58-9dd6-402d33e44209&t=c898c868-26b5-4f58-9dd6-402d33e44209&width=624&cache=v2)
了解Colmap的原理和使用
【2023/11/18】
Colmap仓库地址:
colmap
colmap • Updated Jan 10, 2024
COLMAP 是一种通用的运动结构 (SfM, Structure-from-Motion) 和多视图立体 (MVS, Multi-View Stereo)的pipeline,具有图形和命令行界面。它提供了用于重建有序和无序图像集合的广泛功能。
操作:
- 下载Colmap GUI界面:
- 参考https://zhuanlan.zhihu.com/p/362701018执行后续步骤(注意不要出现中文路径)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2Fe6c334c2-348a-40de-a4c2-2a7d9c9b4004%2FUntitled.png?table=block&id=60c64973-1568-4769-a94e-c43089c7b6aa&t=60c64973-1568-4769-a94e-c43089c7b6aa&width=432&cache=v2)
这里是NeRF的数据集的链接
- 参考https://www.jianshu.com/p/02c3d3cce99b在linux上配置,失败了
NeRF的原理
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2F76d2c035-0f31-48da-bcd5-b543a9845d85%2FQQ%25E5%25BD%2595%25E5%25B1%258F20240104101730-Trim.gif?table=block&id=66abad74-1693-4b35-b815-b303f944c3f7&t=66abad74-1693-4b35-b815-b303f944c3f7&width=2582&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2Fc46450ea-ec35-47ab-84ee-968ac0cf524c%2FUntitled.png?table=block&id=08da20eb-563b-4976-b998-077840900c3d&t=08da20eb-563b-4976-b998-077840900c3d&width=3520&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2Fdb1e0787-2a57-4f6f-8d04-72dd0eb0c017%2FUntitled.png?table=block&id=80ae5433-3bb3-4f38-b183-fd537842bcc8&t=80ae5433-3bb3-4f38-b183-fd537842bcc8&width=2560&cache=v2)
InstantNGP原理
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2F65780ae3-3c04-4a20-913e-6a9b60df5abf%2FUntitled.png?table=block&id=34ce8df7-6be9-47ad-ad97-e180c90a07cc&t=34ce8df7-6be9-47ad-ad97-e180c90a07cc&width=576&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2F399d90fe-bddf-476e-934e-f32d8918091b%2FUntitled.png?table=block&id=8c9c6bb0-31e4-4280-89b4-e03f929652d0&t=8c9c6bb0-31e4-4280-89b4-e03f929652d0&width=576&cache=v2)
Gaussian Splitting原理
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2F2df3de17-488b-489f-9440-43fd4ee40c18%2FUntitled.png?table=block&id=0ef2b770-4c08-4275-83f3-a2fd8c639ea2&t=0ef2b770-4c08-4275-83f3-a2fd8c639ea2&width=1911&cache=v2)
体渲染:相机光心发出穿透像素的采样射线,采样射线上取采样点,采样射线上的一定范围内的点被取出做插值,得到采样位置的特征表达,再去解码,得到体密度和RGB,之后去堆叠射线上的点,得到最后的点
点中存储物理含义更加明确的3D高斯,不用抽象特征(Point-NeRF),训练更容易收敛,使用Splitting,点云的铆钉作用更强
Splatting的关键步骤
- 数据点的表示:在Splatting中,每个体积数据点被表示为具有一定形状和大小的斑点。这些斑点可以是简单的几何形状,如圆形、方形或椭圆形。
- 投影到视图平面:这些斑点被投影到视图平面上。这一步骤涉及计算每个斑点在视图平面上的位置和大小。
- 混合与合成:投影到视图平面上的斑点会根据它们的颜色和不透明度与背景和其他斑点混合。这个过程中,斑点之间可能会重叠,形成最终的图像。
- 着色和光照处理:为了增加真实感,Splatting技术还可以结合着色和光照模型,以模拟光线如何在场景中传播和反射。
Luma AI
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2F16d639a7-41b4-4b86-840c-d93e630f88db%2FQQ%25E5%25BD%2595%25E5%25B1%258F20240104153840-Trim_(1).gif?table=block&id=c1cfd688-e5e1-45b8-bd9c-e46c6ed4e7ea&t=c1cfd688-e5e1-45b8-bd9c-e46c6ed4e7ea&width=2580&cache=v2)
NeRF的使用及过程中遇到的问题
这两个仓库的instant-ngp可以更快的跑出结果:(pytorch实现版本)(原仓库版本),其对应的论文:Instant Neural Graphics Primitives with a Multiresolution Hash Encoding
torch-ngp
ashawkey • Updated Jan 10, 2024
ngp_pl
kwea123 • Updated Jan 10, 2024
最终还是选用了nVidia的instant-npg作为我们实现的代码仓库,在autodl云服务器上部署配置
注意过程中的坑:
- 【克隆】克隆的时候一定要recursive,不要直接https,这样才有可能make好
- 【OpenGL】过程中会使用到OpenGL库相关的内容,输入以下指令进行OpenGL的安装:
- 【CMake】Autodl中自带的cmake版本与要求的版本不一样,可以使用如下的方式,在命令行中输入如下指令,进行cmake版本配置:
之后出现的文本一直按Enter进行下移,直到出现选项,第一个选
y
,第二个选n
最终提交演示
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F67ce5aa4-f53a-4833-a23e-ad62e6562f0a%2Fb6c57816-afb1-4464-8af8-7014b0d4ab8f%2FNeRF_final_01.png?table=block&id=84ba7de0-24a9-4e33-bcb1-64e76d69d848&t=84ba7de0-24a9-4e33-bcb1-64e76d69d848&width=2560&cache=v2)
- 作者:王大卫
- 链接:https://tangly1024.com/article/homework:cv-nerf-based-3d-restruction
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。