相关技术总结(2020-2022)

289 阅读7分钟

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)