首页 > 编程语言 >I. NeRF 及其衍生算法的初步探究

I. NeRF 及其衍生算法的初步探究

时间:2024-05-28 19:57:19浏览次数:24  
标签:场景 Neural Fields 渲染 算法 探究 NeRF

I. NeRF 及其衍生算法的初步探究

视频链接:【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

进一步增强反射效果。把原本视角的向量 \(\vec{d}\) 进一步分为:物体表面法向量 \(\vec{n}\) 和反射向量 \(\vec{r}\)。做到了更好的反射的效果。

acb2282834986b6355dc9f04fd873af4.png
参考 phong shading 把物体的渲染分为:Diffuse + Specular = Phong Reflection. 也就是物体原本的颜色和反光共同构成了最后的结果。

b45359730db69c4172b15ef8ce5dd1e7.png
真实物理世界都是比较 rough 的平面,所以得到的反射结果也是各种各样的。

十一、city nerf

利用 Google 的卫星云图,从高到低,逐渐训练,细节逐渐增多,即 Level of details

但是也受限于尺度太大,所以最后的细节也不是那么清晰。


如何减少所用的图片。

  • pixelNeRF: 从极少数图片(3张)中渲染。
  • mvsNeRF: 依旧是 3 张图像,生成的效果比 PixelNeRF 更好的效果;
  • IBRNet: 和 mvsNeRF 思想差不多,只不过实现有点不同;

提高生成速度。
NeRF 为什么慢?对每个像素(4K 的图像有上千万的像素)的光线都要进行采样,而且要采几百个点。

Unity 加速:把光线上的采样点的结果保存到 3D 矩阵中,这样在渲染时直接用训练得到的结果,就不用再重新计算。

4ffd3d053c3139880e82ba39934f6176.png
neural sparse Voxel Fields(NSVF): 把整个空间细分层很小的 3D 小方块,并且把没有包含任何物体的小方块去掉,得到加快速度、提升最后渲染效果,一举两得的效果。

6f893df5d2ebaa67064a05dd76b181fc.png
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 点云,学习抓取点的特征点。学习抓取点附近的一群点的特征。

标签:场景,Neural,Fields,渲染,算法,探究,NeRF
From: https://www.cnblogs.com/7ytr5/p/18218704

相关文章

  • II. 在 Google Colab 上运行 NeRF
    在GoogleColab上运行NeRF算法。一、运行官方数据集直接跟着NeRF(NeuralRadianceFields)tutorialusinggooglecolab这个视频操作即可,顺便验证一下CoLab作为以后深度学习环境的可行性。二、训练自己的数据博主是以SilicaGGO,他自己拍摄的二次元玩偶。工程链接:k......
  • III. NeRF 代码框架
    NeRF代码框架。一、所有深度学习的大致框架我们看任何一个深度学习代码,都是找这三部分的位置,分析其作用。最后把Loss的梯度更新到DNN中,便能不断提高网络的准确度。二、训练代码的细节(一)采样区间首先,作者通过设置near和far限制了采样区间,如下图所示为\([2,6]\)之......
  • IV. Mip-NeRF
    Mip-NeRF算法思想。PaperexplanationMip-NeRF360andBlockNeRF一、NeRF的缺点所有采样点都是:光心+像素中心的射线确定的,如果给定的图像分辨率比较低,那么每个像素会很大,中心点是不足以代表整个像素的颜色的;这会导致NeRF锯齿化太严重的问题(边缘不是直接从白到黑,而是慢慢渐......
  • 算法课程笔记——素数朴素判定&埃氏筛法
    算法课程笔记——素数朴素判定&埃氏筛法sqrt返回浮点数,而且这样可防溢出优化i*i会更快......
  • 代码随想录算法训练Day20|LeetCode654-最大二叉树、LeetCode617-合并二叉树、LeetCode
    最大二叉树题目描述力扣654-最大二叉树给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。......
  • 素数判定算法 初级
    前置知识Cpp实现基础算法//basemethodboolbasement(intnum){ for(inti=2;i<=sqrt(num);++i) { if(num%i==0) returnfalse; } returntrue;}证明筛法初步根据初等数学的知识,如果一个数不是2的倍数,那么它肯定不是2的倍数的倍数,所以,进一步的......
  • 题解/算法 {C. Goose Goose Duck}
    题解/算法{C.GooseGooseDuck}@LINK:https://codeforces.com/gym/105184;令A[N]表示这N个人的区间;比如答案是[a,b,c,d]那么他一定满足:A[a].lef<=0<=A[a].rig,A[b].lef<=1<=A[b].rig,A[c].lef<=2<=A[c].rig,…贪心;对于最开头的人来说,令集合S:......
  • 题解/算法 {J - Iris‘ Food}
    题解/算法{J-Iris’Food}@LINK:https://codeforces.com/gym/105184;比如最终答案是:10...01...12...23...3,则其值为1*10^?+(1...1)*10^?+(2...2)*10^?...;因此,如何求2....2这个值(长度为1e9),使用矩阵优化DP,DP定义为:DP[i]:长度为i的2...2的大......
  • II. 在 Google Colab 上运行 NeRF
     一、运行官方数据集直接跟着NeRF(NeuralRadianceFields)tutorialusinggooglecolab这个视频操作即可,顺便验证一下CoLab作为以后深度学习环境的可行性。二、训练自己的数据博主是以SilicaGGO,他自己拍摄的二次元玩偶。工程链接:kewa123/nerf_pl作者建议的拍摄方......
  • III. NeRF 代码框架
    本文介绍了初代NeRF的训练大致框架。一、所有深度学习的大致框架我们看任何一个深度学习代码,都是找这三部分的位置,分析其作用。​最后把Loss的梯度更新到DNN中,便能不断提高网络的准确度。二、训练代码的细节(一)采样区间首先,作者通过设置near和far限制了采样区间,如......