NeRF相关技术总结
但当涉猎,见往事耳~
-
NeRF-W nerf-w.github.io/ (nerf在野外)
- 解决的问题:静态场景下的移动物体消除;不同时间(天气、光照)影响、不同相机拍摄(内参)不同的样本训练
- 达到的效果: 1、学习出场景中真正静止的物体 2、生成不同时间段的场景结果 缺点:无法对场景中的动态部分做还原
-
NSFF www.cs.cornell.edu/~zl548/NSFF… (neural scene flow field)
- 解决的问题:复原场景中移动的物体(拍摄相机可移动)
- 达到的效果:分离相机与动态物体 1、固定时间,做不同机位下的3d重建 2、固定相机,做连续时间的3d重建(固定视角的新视频生成) 3、二者结合(子弹时间--黑客帝国) 4、将场景中动态部分和静态部分分离(难点,所有图像帧中必须包含静态部分的所有像素)
- 其他方法:D-NeRF www.albertpumarola.com/research/D-…
-
Mip-NeRF jonbarron.info/mipnerf/ (NeRF-Pro)
-
与NeRF在原理的区别:
传统方法:光栅化(rasterization) -> 速度快
NeRF:光线追踪(ray tracing) -> GPU出现之后,生成图像的方法在视觉角度与光线传播的方向相反,走单条直线(每条射线上的计算结果返回给单个像素点)-> 锯齿状效果(边缘凹凸不平)
Mip-NeRF:走多条射线(每一组射线的计算结果平均到目标像素点上),多条射线的组合类似圆锥 -> 边缘更加平滑,缺点是吃算力
-
-
Nerfren bennyguo.github.io/nerfren/
- 解决的问题:对场景中反光的部分做分离(拍摄玻璃柜里的画,去除反光)
-
NeRF++ github.com/Kai-46/nerf…
-
解决的问题:大场景下的新视角生成
-
方法:中心物体和背景分开训练
缺点:低频部分(如地面)生成效果模糊,场景中较远的背景比较模糊
-
-
Mip-NeRF 360 jonbarron.info/mipnerf360/ (基于NeRF++方法的改良)
-
达到的效果:
1、还原效果优于NeRF++
2、可得到场景的深度,远近关系明确,且物体间边缘锐利清晰
-
-
NeRF in the Dark (针对夜晚的图片做训练)
-
难点:图片亮度低、噪声大
-
解决的问题:
1、消除噪声、复原场景(让照片变干净)
2、自由控制新视角图片亮度
3、可自由调整焦距(将想看到的部分调整得更为清晰)
-
-
RawNeRF bmild.github.io/rawnerf/
ps:小白学习路线
-
OpenCV (先知道3d世界中的点是怎么进入图片像素中的)
- 2个矩阵(内外参矩阵)
- opencv morphology(一张图片如何变大变小、去噪...)
-
从MNIST(最基础的手写数字识别)学起
-
对cv的哪个大方向(图像分类、语义分割...)感兴趣?
去学就好了!
-
HyperNeRF hypernerf.github.io/ (NSFF的后续工作)
- NSFF:主要处理场景中刚性物体
- HyperNeRF:可处理场景中有细微形变的非刚性物体(人脸)
-
Neural Scene Graphs light.princeton.edu/publication… (NeRF在自动驾驶方面的应用)
-
解决的问题:照相机移动范围的问题(从小到大);场景中移动物体的建模处理(周围的车辆和整个大背景:各自对应一个NeRF模型)
-
达到的效果:
1、可对场景中的物体做任意的编辑
- 针对该特性的一种应用举例:在同一个场景中增加更多的label(对车辆做平移旋转等等),可增加车辆识别任务多的准确度
2、同NSFF,可做场景的时空分离
-
-
Ref-NeRF dorverbin.github.io/refnerf/
-
解决的问题:场景中物体反光的问题(效果非常好,且优于Mip-NeRF)
-
方法:将NeRF中的入射光线(向量)分解成反射平面的法向量和反射向量
类似 phone shading (一种物理模型)处理有反光物体的方法
ambient + diffuse + specular = phone reflection
-
达到的效果:
1、对反光程度高的物体重建效果清晰
2、可自由模拟调整物体表面的粗糙程度(控制反光程度的大小)
-
ps:可玩一下Unity
-
CityNeRF city-super.github.io/citynerf/ (大规模-城市级场景重建)
- 使用Google Map的3d模型模拟航拍的照片做样本
- 方法:设置n组航拍高度(规模),利用coarse to fine的思想,先训练最大规模(细节不清晰)的一组图片,训练一段时间后逐步用次规模(细节次模糊-更清晰)的图片做训练,层层完善,可得到最终模型之外还可以的到中间层的模型(不同清晰度的模型)(level of detail)
-
pixelNeRF alexyu.net/pixelnerf/ (少样本)
- 方法:利用样本图片的信息(NeRF训练之后,样本图片就没用了,但此方法会保留),在生成新视角图片的时候会用到样本图片中有用的信息
- 达到的效果:由于是小样本的开山作,物体周围雾状点明显 ,效果一般般
-
MVSNeRF apchenstu.github.io/mvsnerf/ (少样本)
- 方法:预训练+新场景下少量样本图片(2-3张)
- 达到的效果:优于pixelNeRF,雾状效果不明显
-
IBRNet ibrnet.github.io/ (与MVSNeRF在思想上类似)
ps:以上成果的短板之一是新视角生成的速度相当慢(测试速度慢),不适用于需要实时生成新视角图像的应用(如VR游戏...),慢的原因在于图片的像素点巨大,而每个像素都需要独立计算RGB,且单个像素往往需要计算多次(如一条射线上取样128次)
可能的加速方法:在整个空间中事先把所有采样点的参数(RGB,\sigma)计算好,存在一个3D阵列里,后续运算时则无需做取样操作了,直接按一定顺序在此阵列中取值即可。但由于此方法设计一定程度上的离散化(discretization)操作,故在图像质量方面会稍微逊色于原方法
-
NVSF(Neural Sparse Voxel Fields) lingjie0206.github.io/papers/NSVF… (加速生成新视角,但距今比较久远了)
- 方法:与上述方案类似
- 达到的效果:很大程度上加快的测试速度(50-200倍于原始NeRF),同时优化了生成新视角的图片质量
-
PlenOctree alexyu.net/plenoctrees… (ps:作者 Alex Yu 一个大学生,发许多文章的同时也会使用CUDA作加速手段,使自己的成果更加耀眼)
- 方法:与上述方案类似
-
KiloNeRF github.com/creiser/kil… (源码中亦包含了cuda加速的部分)
- 方法:与上述方案类似,与上面两种方案不同的是,前者与原始NeRF一样,空间中的所有采样点只经过一个大的MLP(该MLP负责空间所有采样点的RGB和\sigma的参数);而后者是将空间“切块”后,每一个小块中包含一个小的MLP
- 达到的效果:测试速度上优于原始NeRF 2*10^3 倍左右
-
NeRF-- nerfmm.active.vision/ (输入只有图片,无需相机位姿(colmap))
- 解决的问题:规避使用colmap计算的误差问题,在训练NeRF的同时得到输入图片的相机位姿
-
BARF chenhsuanlin.bitbucket.io/bundle-adju… (bundle-adjusting-NeRF)
- 解决的问题:输入资料无需相机位姿
- 方法:将bundle-adjusting(slam中常用到的技术)应用在NeRF上,
- 达到的效果:比NeRF--稍微好些(coarse-to-fine,先找个大概的位姿,再逐步修正)
-
NDF yilundu.github.io/ndf/ (机器人应用相关)
- 解决的问题:让机械臂抓取一个杯子
- 方法:先手动控制机器人(给机器人做5-10遍示范,训练次数很少),再让机器人去抓不同的杯子(杯子的姿态也可以不同,即使训练过程中没有这种情况),也可以达到预期的效果
- 与NeRF不同的是,该方案重建的结果是(杯子的)3d点云,重建过程中会得到物体某些点的特征向量,从而得出需要抓取的精确位置
ps:可详细参考 awesome-NeRF/awesome-NeRF: A curated list of awesome neural radiance fields papers (github.com)