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