作者 | 乱想 编辑 | 汽车人
原文链接:https://zhuanlan.zhihu.com/p/622380174?
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【NeRF】技术交流群
NeRF(Neural Radiance Field)即神经辐射场
要解决的主要问题:从图像中得到三维模型
什么是三维模型?
抽象来说,三维模型主要分为形状(shape)和外观(appearance),外观又可以粗略分为材质(material)和光照(lighting),在我们得到这些基础信息后,我们只需要经过一定的渲染算法,就能够得到图像。这个从模型到图像的正向过程我们就称之为渲染(rendering),而从图像得到模型这个逆向过程,我们称为反渲染(Inverse rendering)。
那么显而易见,我们从模型得到渲染的这一过程,我们是通过一个渲染方程来完成的,相当于我们将一系列的参数输入这个渲染方程,最终渲染出的图片就是我们得到的解。
但我们是否可以根据这个方程的解来反向推导出初始参数呢?这就是NeRF要解决的问题,即从图像中得到模型的信息。我们先逐一介绍NeRF的表征方法。
形状的表示法:
主流的表示法有以下四种,即网格(Mesh),点云(Point Cloud),占据场(Occupancy field),有向距离场(Signed distance field)。
当然,还有一些表示法,例如体素(voxel),多视图等等,不过多罗列在此,有兴趣可以自行查阅相关资料。
NeRF使用的形状表征方式叫soft shape,即从一片什么都没有的三维空间中,通过图像的需要逐步的创建三维物体。NeRF是在一条Ray上分出许多点,如下图所示:
这也是NeRF能从一众神经网络方法中脱颖而出的关键之一——以往的神经网络重建三维模型往往采用的是hard geometry而非soft geometry
用soft的方法有两大好处:
不需要使用对象分割掩码(object segmentation masks)
没有边界不连续的(boundary discontinuity)问题,这意味着更易于做可微渲染
当然也有一些缺点,例如渲染成本高,编辑困难等等
对这种方法感兴趣的小伙伴可以自行阅读下列论文:
Yu A , Fridovich-Keil S , Tancik M , et al. Plenoxels: Radiance Fields without Neural Networks[J]. 2021.
Sun C , Sun M , Chen H T . Direct Voxel Grid Optimization: Super-fast Convergence for Radiance Fields Reconstruction[C]// 2021.
外观的表示法:
如下图所示,最常见的肯定还是材质纹理贴图+环境光照这种表示法,这种方法易于编辑修改,在渲染工作中用途十分广泛。但缺点是表示方法十分繁琐,不仅要对贴图进行映射,还分不同的表面对不同的光线进行求交。
然后就是辐射场(Radiance Field)或叫表面光场(Surface light filed),这种方法给出每个表面点(x,y,z)处不同的观察角度(θ,φ)的颜色(r,g,b)。用这种方式可以很方便的描述物体表面的颜色,反射,和阴影等效果。但缺点是不易于修改和编辑。
有兴趣的小伙伴可以参考下述论文:
Wood D N ,Azuma D I ,Aldinger K , et al. Surface light fields for 3D photography[C]// SIGGRAPH conference. 2000.
综合两种方式各自的优缺点,NeRF最终选择使用的是第二种表示方式。
渲染的表示法:
因为NeRF的输入图片往往是真实的照片等等,因此我们主要需要了解到的渲染方法就是光线追踪(Ray tracing)了,光线追踪方法的具体细节我不在这里展开阐述,有兴趣的小伙伴可以移步到我的另一篇文章查看
https://zhuanlan.zhihu.com/p/618627358
以上三个部分,就是我们使用nerf进行反渲染需要用到的表征方法
接下来会介绍一下NeRF中有关神经网络的部分:
我们可以把每张图片都看作是一个函数,比如映射成颜色的函数,映射成是否occupy的函数,映射成光照密度(density)的函数等等。这些函数都可以用一个神经网络去表示。
但问题是神经网络表示的是有偏的(bias),通过神经网络可能无法得到高质量的结果,如下图所示,它更偏向于得到光滑(smooth)的结果,但我们期待的是得到锐利(sharp)的结果。因此NeRF提出了可以将图片映射成一种傅里叶特征(Fourier features)的函数,即用cos,sin的表示。下图可以看出来,结果相较之前有十分明显的提升。
我们把这种神经网络表示信号的方式称为神经场(Neural Fields),这种表示方式有三大好处:
每个三维模型大约只需要10MB就可以表示,利于传输
场景不需要离散化(discretized)
更加灵活且易于优化:例如在正则化方面更方便,泛化能力更强
接下来介绍五类NeRF的拍摄场景,如下图所示:
物体在中央,相机在四周拍摄,往往用于重建主体
相机方向固定,在小范围移动
类似全景图拍摄,相机在中间,朝各个方向拍摄,通常用于重建背景
在固定空间内随机方向和分布拍摄
是1和3的结合,既重建物体主体,又重建背景
NeRF主要需要解决的问题就是,在空间内重建近景时远景会模糊,反之重建远景的时候近景会模糊,我们期待得到在远处和近处都能重建出清晰的结果。
为了解决这一问题,NeRF++方法提出了一种解决方案,即将NeRF进行分解和组合,在近景(Foreground)和远景(Background)处都分别使用一个NeRF来进行表征,最后再组合(combined)到一起,如下图所示:
这里就用到了上文提到的第五种拍摄场景了,最终得到的效果也是十分不错的,如下图所示:
对具体细节感兴趣的小伙伴可以阅读下列论文:
Zhang K , Riegler G , Snavely N , et al. NeRF++: Analyzing and Improving Neural Radiance Fields[J]. 2020.
接下来介绍NeRF的抗锯齿(anti-aliasing)问题:
抗锯齿问题是图形学中涉及到的经典的问题,即因为采样率问题导致图片走样的问题,因此NeRF也需要进行反走样的处理。
但是我们又不希望如传统NeRF那样通过在低分辨率下对结果进行降采样的方法抗锯齿,影响到高分辨率下的图像质量导致PSNR降低。因此MipNeRF采用了Positional Encoding的方式来将图像映射为sin,cos表征的傅里叶特征。如下图所示:
同时因为在低分辨率下的频谱很高,但采样频率不够高,不满足奈奎斯特采样定理,因此在MipNeRF中引入了一个低通滤波器(lowpass-filter),即对傅里叶函数进行低通的滤波,这个滤波器的大小取决于pixel的大小。
想要学习详细细节的可以查阅以下论文:
Jonathan T. Barron, Ben Mildenhall, Matthew Tancik, Peter Hedman, Ricardo Martin-Brualla, and Pratul P. Srinivasan. Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields. In Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV), October 2021.
接下来介绍NeRF的可编辑(editable)问题:
使用NeRF技术可以将现实物体进行数字化,但在数字化的世界中,例如在VR/AR领域中,我们往往需要对三维物体进行进一步的编辑,例如编辑光照,编辑材质,甚至进行风格化或艺术化创作,这一问题一直是NeRF需要解决的。但是前文提到,NeRF采用的三维形状表征方式是不适用于编辑的,因此我们期待可以将其转化为易于编辑修改的Mesh进行表征。目前,一种名为IRON的神经反渲染管道被提出,它可以在光度图像上运行,并以三角形网格和材质纹理的格式输出高质量的3D内容,这些内容可以部署到现有的图形管道中。如下图所示:
RION优化过程中采用了神经表示来表示几何形状和材料,让三维物体更加灵活和紧凑,并同时IRON优化了SDF(有向距离场):首先,使用体积辐射场方法进行优化,以恢复正确的拓扑结构,然后使用基于物理的边缘感知表面渲染进行进一步优化,以改善几何形状的细化和材料和照明的分离。
具体细节可以在arxiv查阅下列论文:
IRON: Inverse Rendering by Optimizing Neural SDFs and Materials from Photometric Images.
到今天为止对于NeRF的进一步研究仍旧十分火热,我们还面临着风格化的挑战,自动驾驶的挑战等等,相信在不远的未来,NeRF这一框架下能催生出更多有意思的技术,并且拥有更广阔的应用前景。
最后推荐一个学习NeRF的链接,都是顶会论文的作者在里面分享课程:
https://www.shenlanxueyuan.com/course/504
视频课程来了!
自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)
(扫码学习最新视频)
国内首个自动驾驶学习社区
近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;
添加汽车人助理微信邀请入群
备注:学校/公司+方向+昵称