视频链接:【AI講壇】NeRF與它的快樂夥伴們 [Neural radiance fields]
NeRF 的主要优势:能够正确处理反光、估算的深度较准、等等。
一、nerf in the wild
Google Research、未开源
NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections. CVPR 2021 (Oral)
该算法解决了以下两个问题:
(1)如果拍摄环境中有很多“变化物”,比如游客等,自然会对最后的渲染结果产生影响;
(2)不同时刻的光线、拍摄设备导致的图像色彩差异等,都会对目标物的拍摄结果产生影响;
该算法可以除去“变化”的元素(比如移动的游客),并最终呈现了:从早到晚、各个时间段的建筑物的渲染效果。
二、Neural Scene Flow Fields
Adobe、开源
Neural Scene Flow Fields for Space-Time View Synthesis of Dynamic Scenes
特点:拍摄时相机、目标物都在动,该算法可以单独分离出二者,实现:
(1)固定视角,渲染人物动态效果(类似实现 Bullet Time 的特效),即Fixed view, time interpolation;
(2)固定目标物的某一帧进行渲染,最后的效果和 NeRF 类似,即 Fixed time, view interpolation;
(3)相机和目标物都不固定,即 space-time interpolation;
具体效果可以看项目主页上的视频,很直观。
三、D-NeRF
开源
D-NeRF: Neural Radiance Fields for Dynamic Scenes
使用单相机进行重建,并且纹理比较好。
不足:只对 CG 场景做了测试,没有对实际场景做测试。
四、Mip-NeRF
Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields
解决了问题:采用 Ray Tracing 以在光线上采样会导致最后的 Mesh 结果锯齿化。
Mip-NeRF 算法采用了”圆锥状“光线,并进行 Anti-aliased。
五、NeRFReN
NeRFNeR:Neural Radiance Fields with Reflections
该算法实现了:把场景中的反射物带来的反射成像(比如镜子的成像),完全去掉,最后只呈现没有反光的场景结果。此外还实现了只对反射成像进行重建,或者融合其他场景作为反射成像(还是很神奇的)。
六、NeRF plus plus
创新点:对较大规模的场景(包括近、远两部分)进行重建。做法是分成两个神经网络重建,然后合并。
改进:Mip-NeRF 360
Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields
借鉴两段式这种重建的思路,提升上面算法的效果。
七、NeRF in the dark
Google Research,未开源
NeRF in the Dark: High Dynamic Range View Synthesis from Noisy Raw Images
针对夜晚的图片进行训练,尝试克服图片的噪声,实现了控制场景的亮度、可以 Focus on 不同的目标物体(更换成像主体)。
八、hyperNeRF
创新:
拍摄的场景变复杂(非刚体,比如突然张嘴、掰饼干这种变化比较大的变化)
之前的工作:Nerfies
九、Neural scene graphs
和自动驾驶相结合。自动驾驶场景中,车子一直往前开,车子所看的范围的比较大。利用 KITTI 数据集的 box ,每个 box 都有它自己的 NeRF 模型。
十、refNeRF
进一步增强反射效果。把原本视角的向量 进一步分为:物体表面法向量 和反射向量 。做到了更好的反射的效果。
参考 phong shading 把物体的渲染分为:Diffuse + Specular = Phong Reflection. 也就是物体原本的颜色和反光共同构成了最后的结果。
真实物理世界都是比较 rough 的平面,所以得到的反射结果也是各种各样的。
十一、city nerf
利用 Google 的卫星云图,从高到低,逐渐训练,细节逐渐增多,即 Level of details
但是也受限于尺度太大,所以最后的细节也不是那么清晰。
1. 如何减少所用的图片。
- pixelNeRF: 从极少数图片(3张)中渲染。
- mvsNeRF: 依旧是 3 张图像,生成的效果比 PixelNeRF 更好的效果;
- IBRNet: 和 mvsNeRF 思想差不多,只不过实现有点不同;
2. 提高生成速度。
NeRF 为什么慢?对每个像素(4K 的图像有上千万的像素)的光线都要进行采样,而且要采几百个点。
Unity 加速:把光线上的采样点的结果保存到 3D 矩阵中,这样在渲染时直接用训练得到的结果,就不用再重新计算。
neural sparse Voxel Fields(NSVF): 把整个空间细分层很小的 3D 小方块,并且把没有包含任何物体的小方块去掉,得到加快速度、提升最后渲染效果,一举两得的效果。
PlenOctrees: 同样把 3D 空间细分化。会发现本体的部分更加细分。作者同时也实现了 Volume rendering: 最开始运用在医学侧面,从外到内、人体器官的切面。作者 Alex Yu,也挺厉害的。
kilonerf: 每个小格子都有自己的 DNN 网络,不让一整体 DNN 负责所有格子的计算;而且每个小格子的计算量就很小了,从而极大的加快了速度。并且:这个都是作者自己拿 CUDA 写的,很 NB !
NeRFmm: 提前不需要使用 COLMAP 进行标定,直接输入图片,同时学习相机的位姿和渲染。但是尺度可能学不到。
Barf:也是同时优化位姿,先求一个大概的位置,然后再细化(coarse to fine)
机器人上 NeRF 的应用:
Neural Descriptor Fields: SE(3). ndf_robot
流程:5-10次,学习抓取杯口朝上的杯子;学会了抓取不同方向的杯子。比监督学习强多了。
重建物体的 3D 点云,学习抓取点的特征点。学习抓取点附近的一群点的特征。