本文结合深蓝学院课程学习和本人的理解,欢迎交流指正
文章目录
- Mip-NeRF流程简述
- 混叠问题与MipMap
- Mip-NeRF提出的解决办法
- 圆锥台近似计算与集成位置编码(IPE)
Mip-NeRF流程简述
Mip-NeRF的大体流程和NeRF基本是一样的,NeRF介绍
创新的部分就是针对NeRF出现的混叠问题,提出了用圆锥体来取代光线,NeRF一条射线对应Mip-NeRF一个圆锥体,NeRF一个采样点对应Mip-NeRF一个圆锥截台。利用三维高斯逼近圆锥截台(后面简称截台),得到高斯球内所有三维点位置编码的期望值,叫做集成位置编码(IPE)。然后将集成位置编码输入MLP,根据MLP的输出结果进行体渲染,后面的流程和NeRF没有大的区别。另外,Mip-NeRF简化了网络,不同于NeRF有一个粗网络和一个细网络,Mip-NERF只需要一个网络完成重建。
混叠问题与MipMap
奈奎斯特准则
要了解混叠问题首先需要知道奈奎斯特准则:在采样的过程中如果要让原始信号不丢失,那采样频率f必须大于2B,B是信号的最大频率。当f < 2B的时候,原本的高频信号会被混叠成低频信号,跟原有的低频信号产生了混合,导致产生锯齿、伪影等现象。由f > 2B有B < f / 2,所以产生混叠现象的一种解决方案就是在采样之前使用低通滤波器去除高于采样频率一半的频率分量。
低通滤波器
低通滤波器去噪的基本思想就是把噪声和周围的像素加权求和,达到一种平滑的效果。高斯滤波器就是一种常用的低通滤波器。
上面5*5的权重值,叫做滤波核,权重值是将滤波核坐标(x,y)和σ值带入上面公式计算得出的。σ的值越大,像素去除噪声能力越强,也越容易对有效信号产生干扰。图像上处于滤波核中间位置的值就是根据周围像素颜色乘权值的和得来的。
但图像越大滤波的时间越长,如果每次采样之前都要先进行滤波会降低系统性能,所以提出了一种策略叫做MipMap。
MipMap
MipMap(也称为金字塔纹理或多级渐进纹理)。它由一系列逐渐降低分辨率的纹理图像组成,每个级别都是上一个级别的一半大小。基本思想是:随着观察角度的增大,物体表面的细节应该相应减少,这样可以提高渲染效率并减少视觉伪影。
就是指根据一张大图平滑采样生成一系列小图,摄像机拉到某一个尺度,就用对应尺度分辨率的图片采样。预先计算各种分辨率的图像,这样在拉动摄像机的时候,就可以直接找到对应分辨率的图像进行细微的处理,减少计算量。
Mip-NeRF提出的解决办法
对于原始NeRF中已经训练好的模型,当摄像机往远离物体方向移动时,渲染结果就会存在混叠问题,因为NeRF是在固定尺度下进行训练的,当图片分辨率变化时没有自适应性。
那么在训练数据中增加摄像机远离物体方向的样本,可以解决这个问题吗?答案是不能。
在神经网络不变的情况下,对于同一个物体,摄像机往远离物体方向移动后体渲染得到的像素颜色C‘和原来体渲染得到的C是不同的。这样在训练的过程中,由于摄像机远近的不同,对于同一个图像我们希望神经网络输出的值是C’或C,是不统一的,在这种情况下,神经网络就会输出介于C’和C之间的值,导致增加远离物体的样本以后,模型在两种情况上的效果都不理想,可以参考下图(b)的效果。
出现混叠的原因主要是采样频率过低,那么用超采样可以解决问题吗?可以抗混叠,但计算量太大,因此这种方法也不理想。
所以mip-NeRF提出的就是用低通滤波器来解决问题,用圆锥体取代光线。
把每个圆锥截台里所有的像素做加权平均,这样考虑了邻域的像素,结果会更加平滑,再进行体渲染,就可以去除混叠。
但是如果计算神经网络中输出的截台上每一个像素点的σ和C值,再求平均,那计算量就太大了。
所以我们首先计算每个圆锥截台上所有点位置编码的平均值,然后送入神经网络,得到输出σ和C值。这样对于每一个圆锥截台,都会得到一个平滑后的σ和C值,再根据这些σ和C值实现体渲染,因此说NeRF的一个采样点对应Mip-NeRF一个圆锥截台。
圆锥台近似计算与集成位置编码(IPE)
首先我们要判断哪些点位于圆锥截台内,给出了一个公式,如果把三维点代入F(x,▪)=1的话,点x就是圆锥截台内的点。F(x,▪)是一个指示函数,通常表示为 1{⋅},具体来说,如果括号中的条件为真,则函数值为1;如果条件为假,则函数值为0。
关于期望的计算,F()可以理解为截台内点的个数,乘以每个点的位置编码γ(x),再除以点的个数得到位置编码,这个位置编码也叫集成位置编码。
该公式括号内包含的两个条件需要同时满足,它们意义分别是:
- 点x处于t_0和t_1的中间。
- 点x处于图示圆锥体夹角范围内。
这两条就确定了点x的位置是处于截台内的。
但是截台位置编码期望的计算是比较困难的,因此我们要利用3D高斯逼近圆台,3D高斯是一个球,使x服从μ和σ的一个分布。为了找到这个合适的高斯球,定义了t_μ和t_σ,r是一个固定的值,这是根据圆半径计算公式得到的。
将其转换到世界坐标系下,这样我们就能得到高斯球内位置坐标x的期望,但我们需要的是位置编码γ(x)的期望值。
为了便于表达,我们将位置编码写成矩阵的形式,很多网络中会将π直接去掉,这不会对性能产生很大的影响。
要计算γ(x)的期望值,可以先计算sin( p)和cos( p)的期望,p服从是高斯分布,计算公式如上图。
得到了sin§和cos§的计算公式,那我们要求的E(γ(x))就是要求得[Esin(px), Ecos(px)]。
X ~ (μ , Σ)的均值分布,那么Px服从的分布如下图公式,继而可以得到集成位置编码的期望计算公式。
这样我们就可以得到最终的集成位置编码计算公式,将其输入神经网络得到对应的颜色和体密度,再进行渲染。
mip-nerf采用集成位置编码,摄像机距离物体较近时,就会学习到高频信息。当摄像机距离变远时,高频位置信息就会被平滑,避免出现伪影,这样就实现了自适应。
NeRF有两套网络。一个均匀采样的粗网络和一个在均匀采样的基础上在体密度分布较多的地方多采样的细网络。Mip-NeRF由于圆锥截台的存在,所有的领域信息都会被考虑上,因此只需要一个网络。