NeRF中的相机参数求解

发布时间:2022-02-21 07:00

摘要

 

近期基于神经辐射场(NeRF)方法的场景表征与渲染吸引了大量的研究。然而为了训练出神经辐射场,往往需要提前获取相机的内外参数。因此在实际情况中,NeRF的应用将变为两阶段过程,第一阶段需要计算出相机参数,第二阶段才是NeRF的训练。因此通过端到端的方式在训练NeRF的同时直接学习出相机参数就成了热点话题。本文将沿着相机参数的求解问题介绍近期NeRF方法在这一方面的改进。

 

引言


  近期流行的神经渲染方法结合了经典的图形学和深度学习方法,使得产生具有真实感的影像变得更为便捷。其中基于神经辐射场方法(NeRF)的场景表征与渲染无疑是近两年来视觉计算领域的热点工作之一,吸引了大量的相关研究。之前的公众号曾有多篇文章介绍该领域的相关工作。

 

然而在原始的NeRF方法中,相机参数往往需要提前给定。通常,获取相机参数的方法可以分为两类,一类是直接通过物理手段测量出相机参数,另一类方法则是通过特征匹配如SfM(Structure from Motion)方法来进行,但上面两类方法都给NeRF方法增加了额外的限制。例如第一类方法将依赖高精度测量或定位工具,第二类方法则增加了额外的计算过程,并需要配合SfM方法适配输入输出数据流。近期出现了一些新的方法[1,2,3],使得相机参数也可以在训练NeRF的同时进行学习[1]。从某种意义上说,这些新方法说更加符合深度学习“端到端”的学习模式。

 

本文将围绕相机参数求解问题展开,介绍近期出现的NeRF方法的相关改进工作[1,2]。我们将以针孔相机的参数模型开始,并简单要地介绍经典的相机参数求解方法,再介绍联合相机参数的"NeRF--"算法的训练方案[1],最后展示其实验效果。

 

为了使读者对于相机参数学习过程有一个直观的感受,如下动图展示的是从一组多视角的图片组推算出相机运动轨迹的学习效果。其中"NeRF--"算法[1]相比于"iNeRF"算法[2]更进一步,无需提前训练好NeRF模型,相机参数的学习和NeRF模型训练是一同进行的。

 

https://mmbiz.qpic.cn/mmbiz_gif/O9VicLCaMLWVOEUtu9EMziaSZ6iaN60QSZ9e4ETO7o3O3xNECMJ2Y5pgLMdOSQaJeSfc1QicggvngvYUaR4iaE2qWzw/640?wx_fmt=gif

图1 由多组图片学习相机轨迹的示意图(引自文献[2])

 

相机模型

 

针孔照相模型

 

这里以一个简易的成像系统——针孔相机模型为例,来简单看一下成像系统的工作原理。针孔照相机将三维的物体投影到二维平面上,并在有限大小的投影平面上形成倒立的像素图片如下:

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVOEUtu9EMziaSZ6iaN60QSZ92C0bBPIhYZLQD3QebedoHHbFDL2pHtqLwfKxtjFJxsTpU4SbL9iaBUA/640?wx_fmt=png

图2 针孔相机成像示意图(引自文献[4])

 

根据三角形的相似性原理可以得到坐标变化相对于焦距的几何关系,从而由物体的坐标得到在投影面上的坐标。另外在实际拍摄过程中,相机相对于参考空间的坐标系中还具有平移与旋转的几何变换关系,如下图:

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVOEUtu9EMziaSZ6iaN60QSZ932MuxkujibjCY4gySGL2cQlhZUXm8KuB0ibJlkcrQFX1c0ly10piamokA/640?wx_fmt=png

图3 照相机的平移与旋转示意图(引自文献[4])

 

 

由以上两类关系可以确定相机的参数表征。这里可以将相机参数分为两类,一类是相机和自身特性相关的参数,只要确定了相机,则其参数将保持不变,如相机的焦距,成像中心等。另一类是相机的外部参数,其在运动中将发生变化,如相机的旋转或者平移参数。

更进一步,内参数可以表示为将三维坐标投影到二维坐标的变化矩阵,如下(这里使用了齐次坐标):

 

 

其内参数即为矩阵K:

 

  

 

其中为相机分别在上的焦距,则为成像坐标系与像素坐标系之间的原点偏移。同理,外参数则是作用于相机坐标与世界坐标之间的矩阵变换:

 

 

其中外参数包括上式中的旋转矩阵平移向量  。

 

在实际的相机参数计算过程中,由于多组图片都是同一个相机拍摄得到,所以其内参数由多组图像共有,而外参数随着不同的图像将发生变化。

 

 

相机参数求解

 

目前常用的相机参数求解是一种称为SfM (Structure from Motion)的方法,这在前文中已经提及,它是一种对无序图片组进行三维重建的离线方案。例如原始的NeRF论文就是利用SfM算法来进行相机参数的求解。从数据流的输入输出来看,SfM方法输入的是一组部分重叠的从不同视角拍摄同一对象的照片组,其输出是物体的三维重建,以及重建时得到的相机内外参数。可以认为相机参数是三维重建过程中附带计算的产物。其核心的思路是利用特征匹配来计算相机参数,如下图:
 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVOEUtu9EMziaSZ6iaN60QSZ9KT5I6Jg5snVS385UkAw4IELVHicbUvNbQZHKBU2LCn1S9CxMKwl8Nhw/640?wx_fmt=png

图4 SfM算法计算相机参数的示意图(引自文献[5])

 

 

由三个相机中的图像可以重建出上图中的立方体。这个过程也得到了相机参数,这是通过追踪投影后的特征以及其重建后的特征,从而计算出相机的外参数。根据特征匹配过程,SfM通常分为三个阶段:1)特征检测与提取,2)特征匹配与几何验证,3)结构与运动重建。SfM 主要分为了增量式、层次式、全局式。目前增量式是最为常见的,其中流行的COLMAP工具很好地融入了SfM算法,并与MVS(多视图立体)组合到了一起。对这一方面感兴趣的读者可以进一步参考COLMAP工具[6]。

 

相机参数与NeRF模型联合学习

 

正如前文所述,原始的NeRF方法是需要先得到相机参数之后,才可以进行模型的训练。而事实上,相机参数可以和NeRF网络一同学习,即联合参数学习方法。为了介绍这种联合参数学习方法,这里需要重新回顾一下神经辐射场的计算过程。关于神经辐射场的介绍可以参考之前的公众号文章。为了本篇文章的自洽性,这里对之前的介绍进行部分地引述,并给出相关的符号标记。

给定一组从不同视角拍摄的图片组,其相机参数组为:

 

 

NeRF可以从不同视角拍摄的图片学习出一个三维的表征,并渲染出新视角下的二维图片。从函数拟合角度上来看,神经网络拟合的是函数,其中即为神经网络的权重参数,x是空间坐标,  d为相机角度,  c为RGB颜色,为不透明度。如果从数据流的角度上来看,输入的是不同视角下的图片组,以及相机参数组,NeRF学习出神经网络参数,并通过渲染得到新视角下的图片。NeRF用神经网络得到隐式表征后,沿观察方向对隐式表征进行三维容积采样,投影到观测方向后产生渲染图像,损失函数由投影图像与实际数据的差得到。在构建损失函数时,原始的NeRF方法的训练目标是神经网络参数的最小化,而对于联合相机参数的训练过程来说,还额外增加了相机参数的最小化过程,如下:


 
其中为投影图像的估计值, 为相机参数估计值。具体的训练过程如下,其中"NeRF--"算法增加了训练的相机参数为焦距,以及旋转矩阵和平移向量[1]。


 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVOEUtu9EMziaSZ6iaN60QSZ91l9Le2dBOyxvy006F4dR961kPZvJicNibMdE8R6EntCwojqSscQNub6A/640?wx_fmt=png

图5 联合相机参数进行训练的NeRF--算法示意图(引自文献[1])

 

相比于原始的NeRF方法,"NeRF--"算法额外增加了一组相机参数。因此原则上说,优化难度相比于原始的NeRF更大。带来的问题是,增加了训练参数,训练样本需求增大,以及训练的时间会更长,会有很大的不确定性,健壮性也降低。但优势是,更加符合“端到端”的训练流程,训练流程更加简洁,在数据充足时收敛效果也会更好。
  实验效果根据文献[1], 这种联合参数的训练过程可以在很好地计算出正确的相机位姿。随着优化过程的,训练结果将不断地靠近COLMAP的计算结果,如下图,粉色为COLMAP离线计算结果,蓝色为联合参数实时优化结果。

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVOEUtu9EMziaSZ6iaN60QSZ9o1mAyZSTlvp76xFvN8GCAHnSxkdsqwbBx5TYtK7h6c7icOtKzfhd6lQ/640?wx_fmt=png

图6 相机位姿随优化过程的变化过程(引自文献[1])

 

另外,联合参数优化也带来了一些新的优势,如下图的场景案例:

 

https://mmbiz.qpic.cn/mmbiz_png/O9VicLCaMLWVOEUtu9EMziaSZ6iaN60QSZ9qZwcf1S6xEicyzeSaia7TIpLU8vhrrydqDO8yV9H5NE839Mf2S4lsmUg/640?wx_fmt=png

图7 相机参数学习案例对比(引自文献[1])

 

通过绿框内的轨迹线可以看到,"NeRF--"算法的训练得到的蓝色轨迹线相比于COLMAP得到的粉色轨迹线更加流畅,轨迹也更加符合实际情形。

 

总结与思考

 

本篇围绕相机参数计算问题,介绍了近期出现的NeRF方法的改进工作。我们从相机参数模型的介绍开始,简要地回顾了经典的SfM方法,之后介绍了结合NeRF方法,可以在训练NeRF的同时学习出相机参数的端对端算法"NeRF--"。这种联合相机参数进行训练的方案,增大了训练参数量,从而延长了训练的时间,也部分地降低训练的健壮性。但优势是,更加符合“端到端”的训练流程,使得NeRF的训练流程更加简洁,在数据充足时收敛效果也会表现得更好。另外结合近期NeRF在训练速度提升的工作进展[7],相信在未来的不久,NeRF方法将变得更加符合实际落地需求——便捷的训练流程以及接近实时的训练速度。

 

由于水平有限,文中存在不足的地方请各位读者批评指正,也欢迎大家一起参与我们的讨论。

 

参考文献

[1] Wang, Zirui, et al. "NeRF--: Neural radiance fields without known camera parameters." arXiv preprint arXiv:2102.07064 (2021).

[2] Lin, Yen-Chen, et al. "inerf: Inverting neural radiance fields for pose estimation." (2021).

[3] Meng, Quan, et al. "Gnerf: Gan-based neural radiance field without posed camera." Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021.

[4] Angel, Edward, and Dave Shreiner. Interactive Computer Graphics with WebGL. Addison-Wesley Professional, 2014.

[5] Yilmaz, Ozgur, and Fatih Karakus. "Stereo and kinect fusion for continuous 3D reconstruction and visual odometry." (ICECCO). IEEE, 2013.

[6] Schonberger, Johannes L., and Jan-Michael Frahm. "Structure-from-motion revisited."  Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

[7] Müller, Thomas, et al. "Instant Neural Graphics Primitives with a Multiresolution Hash Encoding." arXiv preprint arXiv:2201.05989 (2022).

 

上一个: 融合图像文字输入的Transformer:ViT-BERT

下一个: AI框架里的并行技术

近期文章

通用AI模型的未来:深度强化学习(deep reinforcement learning)

近年来,AI模型开始涌现出超越人类的潜力,在传统的围棋游戏以及拥有复杂规则和系统的电竞游戏(星际争霸2,Dota 2等)中都有体现。随着ChatGPT的出现,人们开始意识到语言模型成为通用人工智能的可能性,而这些模型的核心都是深度强化学习。

2023-05-08

“为了全人类更好地交流”:通用语音识别

人机交互的第一步往往由人发起,从你说出第一句话开始,计算机如何可以应答并能进而和你自然畅谈?在之前文章里我们分享了当前利用AI进行语音识别的关键步骤和做法,这次我们将随着技术的进化发展,领略当前通用语音模型的进化高度。

2023-04-24

查看更多