Nerf模型学习

目录

图片——>(前处理)采样粒子(5D向量:x,y,z,theta,phi,但其实是6D,后面会讲)——>把粒子送入模型——>得出4D向量(R,G,B,密度)——>(后处理)密度、颜色

1、计算射线

2、在射线上采样点

3、如何求loss

4、如何求和呢

5、二次采样

6、推理:

总结

总结


【注:仅仅用作自我学习,可能有误,不作为参考】

Nerf: 整体流程https://www.bilibili.com/video/BV1CC411V7oq/?spm_id_

from=333.788.recommend_more_video.1&vd_source=a1e7ef76db0049f34281850fc8a6c481

图片——>(前处理)采样粒子(5D向量:x,y,z,theta,phi,但其实是6D,后面会讲)——>把粒子送入模型——>得出4D向量(R,G,B,密度)——>(后处理)密度、颜色

1、计算射线

可以看成每一个像素发出一条射线,射线源点是一个空间坐标O,然后与像素坐标连在一起就构成了一个射线 r(t)=o+td,然后是根据已经得到的标定好的c2w(camera to world)参数来求得的,然后就得到了世界坐标系下的射线方向:ray_dir和世界坐标系下的射线原点:ray_O。

然后不是采用全部的像素,而是每张图片采取1024个像素求射线。

最终:

2、在射线上采样点

然后,设置两个值:near和far,然后在这个区间内采样64个点,具体实现看代码。

所以最终一张图片就是1024*64个粒子,这些粒子以batch的形式输入到模型中。

从图上可以看出,pts就是1024*64个粒子的(x,y,z),然后viewdirs就是方向(就是(x1-x0,y1-y0,z1-z0),所以说其实输入是6D)

但其实!!!真正的输入是63D的!!!为什么???

因为要进行位置编码(这个之后再理解)。然后因为每一个都包含两个(sin一个,cos一个),所以就是3*10*2以及3*4*2,至于为什么坐标比视角多呢,应该就是空间位置比角度更重要一点,然后在加上原本的三个维度,成为63D和27D。

3、如何求loss

求loss是针对每个像素的,不是针对每个粒子的,所以还要把一条射线上的所有粒子的颜色求和,然后和像素本身的颜色求loss,怎么求和呢,看下文。

4、如何求和呢

这个是针对连续的,但我们粒子是采样的,所以是离散的:

但实际上,代码中多计算了一步:将1-e^(...),设置为 阿尔法n,然后代入进去就可以计算出右边的公式,这样经过累加后就是最终的颜色,就可以和真值求MSE,求loss

5、二次采样

是因为原本的采样点是均匀采样的,就会出现有些部分没有信息,所以设置了二次采样,然后继续送入mlp模型,相当于是两个mlp模型串联,然后第一个mlp被称为粗模型,第二个mlp被称为细模型,那么怎么采样呢?

最终,又重新采样了128个粒子(密度大的地方采样多,密度小的地方采样少),然后和原来的64个粒子,一共192个粒子一起送入细模型中。

6、推理:

所有的像素全部进行推理

NeRF最初确实主要用于静态场景,对动态场景的处理效果不佳。然而,近年来研究人员提出了一些改进和变体,以便NeRF能够更好地适应动态场景。以下是一些关键的研究和方法:

1. D-NeRF (Dynamic Neural Radiance Fields)

D-NeRF是NeRF的一个变体,专门针对动态场景进行优化。它通过引入一个时间变量来处理场景的动态变化。具体来说,D-NeRF在原有NeRF模型的基础上,添加了一个时间编码器,使得网络可以在不同时刻预测不同的场景状态。

2. NR-NeRF (Non-Rigid Neural Radiance Fields)

NR-NeRF扩展了NeRF的能力,使其能够处理非刚性变形(如人体运动)。它通过引入一个非刚性变形模块来捕捉和建模场景中的变形。

3. NeRF-W (NeRF in the Wild)

NeRF-W进一步扩展了NeRF的适用范围,使其能够处理现实世界中复杂的动态场景。它通过引入更多的环境变量(如光照变化)和更复杂的场景建模方法,使得NeRF在非受控环境下的表现得到了显著提升。

4. STaR-NeRF (Space-Time Radiance Fields)

STaR-NeRF是另一种用于动态场景的NeRF变体。它结合了空间和时间的光场表示,能够在时间和空间上进行一致的高质量渲染。STaR-NeRF通过学习一个时间维度的隐式表示,使得网络可以在不同时刻生成不同的场景渲染。

5. Video-NeRF

Video-NeRF是专门用于视频数据的NeRF变体。它利用连续的视频帧来构建动态场景的光场表示,通过时间上的连续性和相关性,Video-NeRF能够生成高质量的动态场景渲染。

6. HyperNeRF

HyperNeRF引入了一个高维隐空间,用于表示场景的复杂动态变化。通过在高维空间中进行插值和优化,HyperNeRF可以处理更加复杂和非线性的动态场景。

总结

虽然传统NeRF主要用于静态场景,但近年来的研究已经提出了许多改进和变体,使得NeRF可以更好地适应动态场景。这些方法通常通过引入时间变量、非刚性变形模型、环境变量以及高维隐空间等技术手段,来处理场景中的动态变化。具体选择哪种方法,取决于具体的应用需求和场景复杂度。

自动驾驶领域也在利用NeRF及其变体来改进感知和环境建模。以下是一些与自动驾驶结合的NeRF变体和相关研究:

1. UrbanNeRF

UrbanNeRF专门用于城市环境的3D场景重建。它通过结合多个视角的图像数据来生成城市环境的高质量3D模型。这对于自动驾驶系统中的场景理解和地图构建非常有用。

2. Autonomous NeRF (AutoNeRF)

AutoNeRF是一种针对自动驾驶场景优化的NeRF变体。它通过整合激光雷达(LiDAR)数据和多视角摄像头图像来生成城市街道的高精度3D表示。这种方法可以显著提高自动驾驶系统的环境感知能力。

3. LiDAR-NeRF

LiDAR-NeRF结合了激光雷达数据和NeRF技术,通过利用LiDAR点云数据增强NeRF的深度信息,使得3D场景重建更加准确和详细。这对于自动驾驶中的精细场景建模非常有帮助。

4. NeRF-W (NeRF in the Wild) for Autonomous Driving

NeRF-W扩展了NeRF在复杂和动态环境中的应用,特别适用于自动驾驶中的现实世界场景。通过处理不确定性和变化,NeRF-W能够生成稳定的3D环境模型,为自动驾驶系统提供可靠的感知数据。

5. Scene Representation Transformer (SRT)

SRT结合了Transformers和NeRF技术,适用于自动驾驶中的动态场景建模。SRT通过处理多视角视频数据,生成动态场景的高质量3D表示,这对于自动驾驶系统中的目标检测和跟踪具有重要意义。

6. NerfingMVS

NerfingMVS结合了多视角立体视觉(MVS)和NeRF技术,通过从多视角图像中提取深度信息,生成高精度的3D场景。这对于自动驾驶中的环境感知和地图构建非常有用。

总结

与自动驾驶相结合的NeRF变体和技术主要集中在以下几个方面:

  • 结合激光雷达和多视角摄像头数据,增强3D场景重建的精度。

  • 处理复杂和动态环境,生成稳定的3D环境模型。

  • 通过利用深度信息和多视角数据,提高环境感知和目标检测的精度。

这些技术的结合显著提升了自动驾驶系统的环境感知能力和安全性,使其能够在复杂的城市环境中更可靠地运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值