声明:本文的目的主要在于概念介绍和技术科普,远非严谨的学术论文。亲爱的学术界朋友们请保持你们一贯的宽容友好正能量满满的态度,不要提出和点赞无关的意见。关于AR的详细严谨的导论推荐王涌天老师的《增强现实技术导论》。
增强现实(Augmented Reality,简称AR)和虚拟现实(Virtual Reality,简称VR)概念的出现已经有几十年的历史了,然而VR/AR大量出现在科技媒体上吸引各方眼球也就是最近的事情。在本节中我们粗略地介绍一下这两个概念以及它们的历史,同时澄清一下它们的区别。
首先,让我们来想一想:什么是现实?很哲学很深邃的问题,古希腊思想家柏拉图说过,哦,扯远了,回到大家赖以养家糊口的计算机世界,沿用俗语我们定义现实为:“眼见为实”。再具体地说,我们关心的现实就是以影像的方式呈现给人类视觉系统的对于真实世界的感知信息。简单的说,就是真实世界的影像。
上述定义显然给了有进取心的计算机牛人们一个后门:如果以某种方式生成影像,只要足够逼真,是不是就能愚弄人类的眼睛甚至整个大脑呢?有道理,这不就是黑客帝国的原型嘛。这种虚拟出来的现实,丝毫没有悬念就是虚拟现实(VR)的定义。当然,目前的技术能力还远远没办法实现黑客帝国中的那种迷人的沉浸感。事实上,从最早的VR原型,1962年由Morton Helig发明的虚拟现实3D个人影院Sensorama(图1),到最近拉风的Oculus,虚拟现实技术带来的沉浸感始终处在一种需要用户主动相信的状态。当然,这种状态对于很多应用来说不是什么样的问题,所以才有了如今大热的各种VR产品和资本热捧的各个VR大鳄和新秀。
经常收到热心朋友的“你们公司的VR做得真棒”的赞,虚荣心满足的同时,作为一个严谨的技术工作者,其实我是很有些尴尬的。很多时候我真的很想说:亲爱滴,我们做的是AR,是AAAAA R啊!言归正传,让我们引用一下的定义:
请注意定义中的“physical, real-world environment”。就是说AR中的R是真实的R,相比之下,VR中的R就是个山寨版的。那么A这个增强的概念就比较广大虚了:笼统的说,凡是能对R有附加额外的信息的都算。除了像HoloLens中那样在实时影像上叠加的各种花哨东西以外,实用系统如ADAS里面实时叠加的车道线,辅助生产系统中头显里显示的指示箭头等等,都可以算。再次强调的是,AR里面的信息是叠加到真实的场景里面的,而不是虚拟的场景(即VR)里面的。一个有意思的小众研究方向是将一部分真实场景中的内容叠加到虚拟场景中,学名Augmented Virtualization,简称AV。
图2中的例子也许能更好地反映AR和VR的区别。上方显示的是典型的VR设备和人眼接收到的VR影像,下方则是AR设备和AR影像。这一组例子中我们大家可以看到VR是将人和真实世界完全隔离的,而AR则相反。AR和VR的优缺点在这里就不啰嗦了。当然,睿智如你,一定不喜欢被虚拟的假象蒙蔽双眼的感觉,对吧?另外值得一提的Digi-Capital对于它们未来市场发展的潜力的预测:到2020年,AR/VR的市场体量总共是1500亿美元,其中AR占1200亿,VR300亿。
从另一角度来看,它们也有一个显而易见的相似之处,都是通过影像的方式实现人和计算机之间的交互,所以它们都需要有生成或者加工影像的能力和将影像呈现给人眼的途径。前者是AR和VR之间很不同的地方,VR基于虚拟生成,AR则基于对现实的加工。而在影像呈现的方面AR和VR绝大多数都是一致的,这也是行外人士难以区分二者的原因。简而言之VR和AR的区别是:
接下来我们主要讨论AR,重点讨论AR和VR不同的那一部分。那么AR是怎么样发展起来的呢?一般认为,AR的鼻祖是哈佛大学Ivan Sutherland教授1966年发明的光学透射式头盔显示器(STHMD),该设备使得虚实结合成为可能。增强现实这个术语最早是由波音公司的研究员Thomas P. Caudell在90年代初提出的。1992年,两个早期的原型系统,Virtual Fixtures虚拟帮助系统和KARMA机械师修理帮助系统,由美国空军的Louis Rosenberg和哥伦比亚大学的S.Feiner等人分别提出。
早期的AR系统多是应用在工业制造维修或类似场景中的,笨重而且画质粗糙(相对于现在的系统而言)。这一方面是由于当时的计算能力和资源所约束,另一方面也是算法技术的发展还没有到位,同时移动数字影像设备还远未普及到一般个人用户。之后,随着这几个方面的迅猛发展,AR的应用和研究也有了长足的进步。尤其值得一提的是2000年Bruce Thomas等研发的ARQuake系统和2008年推出的Wikitude,前者将AR推向了移动可穿戴的领域,而后者将AR直接落户到了手机端。至于最近开始拉风无比的HoloLens和神秘兮兮的Magic Leap,更是将对AR的关注引向了从所未有的高度。
按照Ronald Azuma在1997年的总结,增强现实系统一般具有三个主要特征:虚实结合,实时交互,和三维配准(又称注册、匹配或对准)。近二十年过去了,AR已经有了长足的发展,系统实现的重心和难点也随之变化,但是这三个要素基本上还是AR系统中不可或缺的。
图4描绘了一个典型的AR系统的概念流程。从真实世界出发,经过数字成像,然后系统通过影像数据和传感器数据一起对三维世界进行感知理解,同时得到对三维交互的理解。3D交互理解的目的是告知系统要“增强”的内容。例如,在AR辅助维修系统中,如果系统识别出修理师翻页的手势,就从另一方面代表着下面要叠加到真实图像中的应该是虚拟手册的下一页。相比之下,3D环境理解的目的是告知系统要在哪里“增强”。比如在上面的例子中,我们应该新的显示页和以前的看起来在空间位置上是完全一致的,进而达到强烈的真实感。这就要求系统实时对周围的线D世界有精准的理解。一旦系统知道了要增强的内容和位置以后,就能够直接进行虚实结合,这个一般是通过渲染模块来完成。最后,合成的视频被传递到用户的视觉系统中,就达到了增强现实的效果。
在AR的技术流程中,数据的采集(包括影像和传感器)已经很成熟,显示端和渲染端的技术也有了长足的进步。相对而言,中间的对于环境和交互的精准理解就是目前的瓶颈了。聪明的同学一定会想到,如果中间这部分使用基本虚拟生成的内容,不就可以了吗?恭喜你来到热闹的VR界:据说从2015年以来,国内已经涌现了好几百个VR公司,光做VR眼镜就上百,不会几个VR名词的话都不好意思和人打招呼,呵呵。当然,本文讨论的是AR,上图中间的基于多模态(简单说就是影像+传感器)的环境和交互理解,是两个充满了各种或明或暗的坑的领域,足以让很多假的猛士知难而退。
那么,真的猛士将会直面什么样惨淡和淋漓的坑群呢?下面我们来共同赏析几个常见坑型:
环境坑:据说人的脑细胞里面大多数都是用来处理和理解双眼所获取的视觉信息的,很多我们惊鸿一瞥就能理解和感知的东西得益于我们强大的脑解决能力。各种环境变化对视觉信息的影响我们不但能轻松应对,有时还能加以利用。比如我们的认知能力对光照明暗的变化相当的鲁棒;比如我们大家可以通过阴影来反推三维关系。而这些对于计算机(确切些说是计算机视觉算法)来说都是不折不扣的坑或者大坑。理解了这种坑,就不难理解为什么很多看起来美轮美奂的demo实用起来那么悲催,可能的原因包括光照变了、形状变了、纹理变了、姿态变了、相机变了、背景变了、前景变了;有阴影了、有遮挡了、有噪声了、有干扰了、有畸变了等等。更加悲催的是,这些影响系统效果的因素在我们人类的视觉系统中经常是难以察觉的,以至于小白用户们经常对我们的工作能力表示狐疑并产生亲自上手的冲动。总的来说,成像环境的变化常常给计算机视觉算法以及AR带来很大的挑战,所以我把相关的坑统称环境坑。
学术坑:对于环境和交互的理解重建基本上属于计算机视觉的范畴,计算机视觉是一个有着半个世纪积累的领域,和AR相关的学术成果可以成吨来计。比如,如果对跟踪感兴趣的话,光文章题目中含有“tracking”的顶级会议论文(比如CVPR),每一年都能有几十篇。夸张一点的说,每篇都有坑,区别只在大小深浅明暗。为什么会这样?哦,这个嘛,要发一篇CVPR,我们要想法新、理论强、公式繁、结果好、速度还不能太慢(艾玛我容易嘛我),程序不过拟合数据真的很难,文章不藏着limitations(注意是复数)也很难。不是说这些学术成果没有用,相反,正是这些前仆后继的学术进展才慢慢催生了领域的进步。重点是,从实用的解决方案的角度来看学术论文,尤其是新的论文,一定要小心其中的设定和有些话外的信息,多想一下诸如该算法是否对光照敏感,是否可能在手机端达到实时等等。简单的建议是:对于一篇计算机视觉的论文,未有相关经验的观众请在有相关训练的成熟观众陪伴下谨慎观看。
上帝坑:上帝是谁?当然就是用户了。上帝的坑当然得长得有创意,常常激起开发者灵光一动恍然大哭的欲望。比如上帝说,要能判别视频中人的性别,80%的准确度,100万。哇,你是不是感动的热泪盈眶(仁慈的上帝啊),用各种时髦的方法轻松超额10%搞定。可是,交货的时候上帝说你这个系统咋认不出我们家小baby的性别啊?Oh my God,你是不是又激动得想哭了。和环境坑比较像,CV的算法很多时候是需要有假设的,强烈的假设。那怎么办呢?上帝总是正确的,所以唯一的办法就是尽早教育上帝让他更加正确:需要苦口婆心地尽早和用户科普以及尽量明确定义需求,防范坑于未成。还不行的话咋办?上帝啊,请再加点工钱吧。
其实还有其他类型的坑,比如开源代码坑,这里就不详述了。那么,这么一个充满忧患的领域,为什么又会有那么多追随呢?最重要的原因就是巨大的应用前景和钱景了。往小了说,很多具体的应用领域(比如游戏)都已经成功地引入了AR的元素;往大了说,AR的终极形态可能从根本上改变当前的非自然人机交互模式(请脑补微软Win95的成功和现在的HoloLens)。上面说的那些坑,在很多应用上,是可能避免的或者可能填得不那么深的。举个例子:某AR游戏里面需要在跟踪的Marker上进行游戏内容叠加,而该游戏的特殊性使跟踪的精确性难以保证(好吧,其实是算法做得不够给力)从而导致影响用户体验的抖动。这种情况下,一个简单有效的办法是把要叠加的内容做得动感十足,这样一来用户就感觉不到令人不爽的抖动了。类似的实战例子非常多,有的是从渲染端解决的,还有更多的是针对具体用例做算法层面的优化定制的。总的来说,一个好的AR应用往往是需要算法工程实现、产品设计、内容制作等方面的深度结合。
好了,水货讲得太多了,下面我们开始讲技术了。主要是跟踪配准方面,一来是这些技术在AR中的核心重要性,二来嘛,其他方面我其实也不太懂(看我多谦虚,呵呵)。
三维配准是链接虚实的最核心技术,没有之一。大致说来,在AR中配准的目的是对影像数据进行几何上的精确理解。这样一来,就决定了要叠加的数据的定位问题。比如说,在AR辅助导航中如果想把导航箭头“贴在”路面上(如图5),就一定要知道路面在哪里。在这个例子中,每当手机摄像头获取到新一帧图像,AR系统首先需要将图像中的路面定位,具体的说就是在某个事先设定的统一的世界坐标系下确定地面的位置,然后将要贴的箭头虚拟地放在这个地面上,再通过与相机相关的几何变换将箭头画在图像中相应的位置(通过渲染模块完成)。
如前所述,三维跟踪配准在技术上存在很多挑战,尤其在考虑到移动设备有限的信息输入和计算能力的情况下。鉴于此,在基于视觉AR的发展历程中,经历了从简单定位到复杂定位的几个阶段,下面简单介绍一下这个发展过程,更多的技术细节在下一节讨论。
二维码:和大家如今广为使用的微信二维码原理一样,二维码主要的功能在于提供稳定的快速的识别标识。在AR中,除了识别以外,二维码还兼职提供易于跟踪和对于平面进行定位的功能。因为这个原因,AR中的二维码比一般的二维码来说模式显得简单以便于精确定位。图6给出了AR二维码的例子。
二维图片:二维码的非自然人工痕迹很大地局限了它的应用。一个很自然的拓广是使用二维图片,比如纸币、书本海报、相片卡牌等等。聪明的小白朋友一定已经发现:二维码本身也是二维图片,那为啥不把二维码的方法直接用到二维图片上呢?哦,是酱紫:二维码之所以简单就是因为它上面的图案是设计出来的让视觉算法可以迅速识别定位的,一般的二维图片则不具备这种良好的性质,也需要更强大的算法。并且,不是所有的二维图片都可以用来进行AR定位的。极端情况下,一个纯色的没有任何花纹的图片是无法用视觉的方法定位的。图7的例子中,两张卡牌用来定位两个对战重点的虚拟战士。
三维物体:二维图片的自然扩展当属三维物体。一些简单的规则三维物体,比如圆柱状可乐罐,同样可以作为虚实结合的载体。稍微复杂一些的三维物体通常也可以用类似的方法处理或分解成简单物体处理,如在工业修理中的情况。但是,对于一些特定的非规则物体,比如人脸,由于有多年的研究积累和海量的数据支持,已经有很多算法可以进行实时精准对齐。然而,如何处理通用的物体仍然是一个巨大的挑战。
三维环境:在很多应用中我们需要对整个周围3D环境的几何理解,很长时间以来和可预期的一段时间以内,这一直是个充满挑战的问题。近年来,三维环境感知在无人车和机器人等领域的应用取得了成功的效果,这让人们对在其在AR中的应用充满憧憬。然而,相比无人车等应用场景,AR中可以使用的计算资源和场景先验常常捉襟见肘。受此影响,AR中的三维场景理解研发主要有了两个显而易见的思路,一是多传感器的结合,而是对于应用的定制。两个思路的结合也是实用中常见的手段。
在以上提到的技术中,二维码和二维图片的识别跟踪技术已基本上成熟,也已经有了广泛的应用。技术方面的发展目标主要是进一步提高稳定性以及拓宽适用范围。相比而言,三维物体和三维场景的识别理解还有很大的探索空间,即使是目前火爆的HoloLens所展现的令人惊艳的跟踪稳定性,从追求完美的角度还有很多可以提升的空间。
由于识别跟踪的重要性,下面简单介绍一下AR中的二维图片跟踪和三维环境理解。二维码的技术已经很成熟而应用较受限制,三维物体识别的技术大致上介于二维图片和三维场景之间,所以就偷懒不提了。
一般情况下, AR中二维平面物体的跟踪可以归结为如下问题:给定一个模板图片R,在视频流中时刻检测该图片的(相对相机的)三维精确位置。比如在图8的例子中,R是实现知道的人民币图片,视频是从手机端实时获取的,通常记为It (表示在时间t获得的视频图像),而需要得到的是R在It中的几何姿态(通常包括三维旋转和平移),记为Pt。换句话说,模板图片R通过由Pt表示的三维变换就可以被贴到它在图像It中的位置。跟踪结果的用途也很显然,既然知道了这个姿态Pt,我们可以用一个美元的图片以同样的姿态叠加到视频中来替换人民币,从而达到6倍以上的炫富效果。好吧,例子中没有那么俗气,而是叠加了一个庄严的视频。
那么,上面例子中的跟踪定位是如何做到的呢?主流的方法大致有两类,一类是直接法(direct method,有时也称为全局法),另一类叫间接法,哦不对,叫控制点法(keypoint-based)。
直接法:直接法里的“直接”是说直接用优化方法去找最好的目标,即姿态Pt。这里牵涉到三个主要元素:
对于(1),一个直观的办法是:假设模板图按照姿态Pt变换后对应图像It上的一个小区域,那么这个区域可以抠出一个图像T,T(经过归一化以后)应该和模板R长得越像越好。
对于(2),我们可以在所有可能的姿态中去找Pt。不过这个策略显然是很费时的,考虑到在视频中相邻图像帧的变化有限,所以我们通常是在上一时刻的姿态(通常记为Pt-1)附近去寻找。至于怎么找,这就转化成一个优化问题了,简单的说,就是要在Pt-1的一个邻域里面找一个Pt,使得通过Pt抠出来得图像块T和R最相似。当然,实际操作时候上面三个部分都各有讲究。比如(1)中对于T和R是否相似可能要考虑光照的变化,(2)中如何定义姿态空间的邻域以及合理的邻域大小。
(3)中具体用什么样的优化算法来尽量对抗局部极值的干扰而又不能太耗时。不同的处理方式产生出了不同的跟踪算法,其中典型的代表工作之一是ESM算法和它的一些变种。
ESM是Efficient Second-order Minimization的缩写,源自Benhimane和Malis在2004年在IROS上发表的工作。该算法采用重构误差平方作为衡量R和T相似性的指标,然后对于姿态空间进行了在李群(Lie Group)上的重新构建使得搜索的步长更为理性,在寻优上面使用的二阶近似的快速算法。这个算法的结构清晰,各模块都可以比较容易的独立扩展,所以在其基础上衍生出了不少改进算法,通常是针对实用场景中不同的调整(比如处理强光照或者运动模糊)。
控制点法:基于控制点的方法由于其实时高效成为目前业内主流方法。控制点类的方法并不直接对姿态Pt进行寻优,而是通过控制点匹配的方法来计算Pt。控制点法的一个典型流程参见图9。其基本出发点在于使用图像中特别的点(通常是角点)来建立模板R和视频图像It之间的映射,通过该映射建立方程组,然后求解出姿态Pt。比如说模板是一张人物的相片,那么我们在视频中定位的时候并不需要对于脸上的所有点进行匹配,而能够最终靠一些控制点(眼角,鼻尖,嘴角等)迅速定位。
稍微数学一点的解释是这样的:由于姿态Pt是由若干参数(一般是8个)控制的,那么求解Pt的一个办法是弄一个方程组出来,比如说8个线性的方程,那么我们就可以求出Pt了。那么这些方程怎么来呢?我们知道,Pt的作用是把模板R变到图像It中,也就是说R中的每个点经过一个由Pt决定的变换就可以得到它在图像中的位置。那么,反过来,如果我们知道图像中的一个点(比如眼角)和模板中就是同一个点(就是说他们匹配上了),我们就可以用这一对匹配点给出两个方程(X、Y坐标各一个),这样的点就是所谓的控制点。当我们有了足够多的控制点对以后,就可以求解姿态Pt了。
总结起来,控制点法包括三个主要元素:(1)控制点提取和选择,(2)控制点匹配,(3)姿态求解。
控制点的基本要求:一是要能从周围环境中脱颖而出(减少位置上的歧义),二是要经常而且稳定地出现(易于找到)。各种图像中的角点因此闪亮登场,各种PK。比较知名的有SIFT、SURF、FAST等。注意,上述排名分先后的:按照能力来说越往前越好,按照速度来说越往后越好。实际应用中可以根据用户机型做决定。那么,这些点提取后就可以用了吗?No,一般来说还需要进行取舍:一是要去掉没用的点(即outlier),二是使选取后的点尽量均匀以降低不必要的误差,同时也要防止点太多带来的大量后续计算。
控制点匹配的目的是在两个图像的控制点集间找到匹配的点对(鼻尖对鼻尖,眼角对眼角)。通常这个由控制点之间的相似性和空间约束协同完成。简单的方法有紧邻匹配,复杂的基本上是二分匹配的各种变种(bipartite matching or two-dimensional assignment)。完成了匹配之后,就可以求解得到姿态Pt了:由于通常使用的点数远多于最小需求(为了稳定性),这里的方程数目远大于未知变量的数目,所以最小二乘法之类的解法在这里会派上用场。
以上三个步骤初看起来泾渭分明,实际使用时却经常是交织在一起的。主要原因是很难保证得到精确无误的控制点。有用的可靠控制点常常夹杂着各种真假难辨的山寨们一起到来,所以经常需要往返迭代在三个步骤之间,比如用RANSAC之类的方法选择控制点来得到服从大多数的姿态。相比直接法,控制点法的基本算法框架比较成熟,工程实现上的细节很大程度上决定了算法的最终效果。
这两类方法的优缺点有很明显的互补性,所以一个自然的想法就是二者的结合,具体的方式也有不同变种,这里就不罗嗦了。
对于三维环境的动态的实时的理解是当前AR在技术研究方面最活跃的问题。其核心就是最近火热的“即时定位与地图构建”(SLAM,Simultaneously Localization And Mapping),在无人车、无人机和机器人等领域也起着核心作用。AR中的SLAM比其他领域中一般难度要大很多,主要是因为AR赖以依存的移动端的计算能力和资源比起其他领域来说要弱很多。目前在AR中还是以视觉SLAM为主,其他传感器为辅的局面,尽管这个情况正在改变。下面的讨论主要局限于视觉SLAM。
标准的视觉SLAM问题可以描述为:把你空投到一个陌生的环境中,你要解决“我在哪”的问题。这里的“我”基本上等同于相机或者眼睛(因为单目,即单相机,请把自己想象成独眼龙),“在”就是要定位(就是localization),“哪”需要一张本来不存在的需要你来构建的地图(就是mapping)。你带着一只眼睛一边走,一边对周边环境进行理解(建图),一边确定在所建地图中的位置(定位),这就是SLAM了。换句话说,在走的过程中,一方面把所见到(相机拍到)的地方连起来成地图,另一方面把走的轨迹在地图上找到。下面我们看看这个过程大致需要哪些技术。
从图像序列反算出三维环境的过程,即mapping,在计算机视觉里面属于三维重建的范畴。在SLAM中,我们要从连续获取的图像序列来进行重建,而这些图像序列是在相机的运动过程中采集的,所以相关的技术就叫基于运动的重建(SfM,Structure from Motion)。题外话,SfX是视觉中泛指从X中进行三维重建的技术,X除了运动以外还可以有别的(比如Structure from Shading)。如果相机不动怎么办?很难办,独眼龙站着不动怎么能知道周围三维的情况呢?原理上来说,一旦获取的两张图像之间有运动,就相当于有两只眼睛同时看到了场景(注意坑,这里假设场景不动),不就可以立体了吗?这样一来,多视几何的东西就派上用场了。再进一步,运动过程中我们得到的实际是一系列图像而不只是两张,自然可以用他们一起来优化提高精度,这就是令小白们不明觉厉的集束约束(Bundle Adjustment)啦。
那么localization又是怎么回事呢?如果有了地图,即有了一个坐标系,定位问题和前述2D跟踪在目的上基本一致(当然更复杂一些)。让我们考虑基于控制点的方法,那么现在就需要在三维空间找到并跟踪控制点来进行计算了。很巧的是(真的很巧吗?),上面的多视几何中也需要控制点来进行三维重建,这些控制点就经常被共用了。那么可不可以用直接法呢?Yes we can!但是,如后面会讲到的,由于目前AR中计算资源实在有限,还是控制点法经济实惠些。
从三维重建的方法和结果,SLAM大致可以分为稀疏、半稠密和稠密三类。图10中给出的典型的示例。
稠密SLAM:简单的说,稠密SLAM的目的是对所相机所采集到的所有信息进行三维重建。通俗的说,就是对看见的每一个空间上的点算出它到相机的方位和距离,或者知道它在物理空间的位置。在AR相关的工作里面最近的影响力较大的有DTAM和KinectFusion,前者是纯视觉的,后者则使用了深度相机。由于需要对几乎所有采集到的像素进行方位计算,稠密SLAM的计算量那是杠杠的,所以不是平民AR(比如一般的手机,手握6S/S7/Mate8的朋友不要侧漏傲气,这些统统都算“一般”)。
稀疏SLAM:稀疏SLAM的三维输出是一系列三维点云。比如三维立方体的角点。相对于实心的三维世界(比如立方体的面和中腹),点云所提供的对于三维环境的重建是稀疏的,是以得名。实际应用中,在这些点云的基础上提取或推理出所需要的空间结构(比如桌面),然后就可以根据这些结构进行AR内容的渲染叠加了。和稠密SLAM版本相比,稀疏SLAM关心的点数低了整整两个维度(从面堕落到点),理所当然地成为平民AR的首选。目前流行的稀疏SLAM大多是基于PTAM框架的一些变种,比如最近被热捧的ORB-SLAM。
半稠密SLAM:顾名思义,半稠密SLAM的输出密度在上述二者之间,但其实也没有严格的界定。半稠密SLAM最近的代表是LSD-SLAM,不过对于在AR中的应用,目前还没有稀疏SLAM热门。
由于稀疏SLAM在AR中的流行度,下面我们简单介绍一下PTAM和ORB-SLAM。在PTAM之前,由A. Davison在2003年提出的单目SLAM开创了实时单目SLAM的先河。这个工作的基本思想还是基于当时机器人等领域的主流SLAM框架的。简单地说,对于每一帧新到来的图像,进行“跟踪-匹配-制图-更新”的流程。然而这个框架在移动端(手机)上的效果和效率都不尽如人意。针对移动端AR的SLAM需求,Klein和Murray在2007年的ISMAR(AR领域的旗舰学术会议)展示了效果惊艳的PTAM系统,从而成为单目视觉AR SLAM的最常用框架,暂时还是之一。
PTAM的全称是Parallel Tracking And Mapping,上面已经暗示过了,PTAM和之前的SLAM在框架是不同的。我们知道,SLAM对每一帧同时(Simultaneously)进行两个方面的运算:定位(Localization)和建图(Mapping)。由于资源消耗巨大,这两种运算很难实时的对每一帧都充分地实现。那我们一定要每一帧都同时定位和建图吗?先看定位,这个是必须每帧都做,不然我们就不知道自己的位置了。那么制图呢?很幸运,这个其实并不需要每帧都做,因为隔上几帧我们仍然可以通过SfM来感知场景。试想一下,把你扔到一个陌生的场景,让你边走边探索周边环境,但是每秒钟只让你看10眼,只要你不是在飞奔,相信这个任务还是可以完成的。PTAM的核心思想就在这里,不是simultaneously定位和制图,而是把他们分开,parallel地各自奔跑。这里的定位以逐帧跟踪为主,所以就有了tracking。而制图则不再逐帧进行,而是看计算能力而定,啥时候处理完当前的活,再去拿一帧新的来看看。在这个框架下,再配合控制点选取匹配等各项优化组合,PTAM一出场就以其在华丽丽的demo亮瞎观众(这可是近10年前啊)。
故事显然没有这样结束。我们都知道,demo和实用是有差距滴,何况还是学术界的demo。但是在PTAM思想的指引下,研究人员不断进行改进和更新。这其中的佼佼者就有上面提到的ORB-SLAM。ORB-SLAM由Mur-Artal,Montiel和Tardos在2015年发表在IEEE Transaction on Robotics上,由于其优异的性能和贴心的源码迅速获得工业界和学术界两方面的青睐。不过,如果打算通读其论文的话,请先做好被郁闷的心理准备。不是因为有太多晦涩的数学公式,恰恰相反,是因为基本上没有啥公式,而是充满了让人不明觉厉的名词。为何会这样?其实和ORB-SLAM的成功有很大关系。ORB-SLAM虽然仍然基于PTAM的基本框架,不过,做了很多很多改进,加了很多很多东西。从某个角度看,可以把它看作一个集大成的且精心优化过的系统。所以,区区17页的IEEE双栏论文是不可能给出细节的,细节都在参考文献里面,有些甚至只在源码里。在众多的改进中,比较大的包括控制点上使用更为有效的ORB控制点、引入第三个线程做回环检测矫正(另外两个分别是跟踪和制图)、使用可视树来实现高效的多帧优化(还记得集束约束吗)、更为合理的关键帧管理、等等。
有朋友这里会有一个疑问:既然ORB-SLAM是基于PTAM的框架,那为啥不叫ORB-PTAM呢?是酱紫的:尽管从框架上看PTAM已经和传统SLAM有所不同,但是出于各种原因,SLAM现在已经演变成为这一类技术的统称。也就是说,PTAM一般被认为是SLAM中的一个具体算法,确切些说是单目视觉SLAM的一个算法。所以呢,ORB-PTAM就叫ORB-SLAM了。
尽管近年来的进展使得单目SLAM已经能在一些场景上给出不错的结果,单目SLAM在一般的移动端还远远达不到随心所欲的效果。计算机视觉中的各种坑还是不同程度的存在。在AR中比较刺眼的问题包括:
初始化问题:单目视觉对于三维理解有着与生俱来的歧义。尽管可以通过运动来获得有视差的几帧,但这几帧的质量并没有保证。极端情况下,如果用户拿着手机没动,或者只有转动,算法基本上就挂掉了。
快速运动:相机快速运动通常会带来两方面的挑战。一是造成图像的模糊,从而控制点难以准确获取,很多时候就是人眼也很难判断。二是相邻帧匹配区域减小,甚至在极端情况下没有共同区域,对于建立在立体匹配之上的算法造成很大的困扰。
纯旋转运动:当相机做纯旋转或近似纯旋转运动时,立体视觉无法通过三角化来确定控制点的空间位置,从而无法有效地进行三维重建。
动态场景:SLAM通常假设场景基本上是静止的。但是当场景内有运动物体的时候,算法的稳定性很可能会受到不同程度的干扰。
对AR行业动态有了解的朋友可能会有些疑惑,上面说得这么难,可是HoloLens一类的东西好像效果还不错哦?没错,不过我们上面说的是单目无传感器的情况。一个HoloLens可以买五个iPhone 6S+,那么多传感器不是免费的。不过话说回来,利用高质量传感器来提高精度必然是AR SLAM的重要趋势,不过由于成本的问题,这样的AR可能还需要一定时间才能从高端展会走到普通用户中。
单目AR(即基于单摄像头的AR)虽然有着很大的市场(想想数亿的手机用户吧),但是如上文所忧,仍然需要解决很多的技术难题,有一些甚至是超越单目AR的能力的。任何一个有理想有追求有情怀的AR公司,是不会也不能局限于传统的单目框架上的。那么除了单目AR已经建立的技术基础外,AR的前沿上有哪些重要的阵地呢?纵观AR和相关软硬件方向的发展历史和事态,横看今天各路AR诸侯的技术风标,不难总结出三个主要的方向:语义驱动,多模态融合,以及智能交互。遵循业界性感造词的惯例,我们将他们总结成:
即“语义驱动的多模态增强现实和智能交互”。由于这三个方面都还在飞速发展,技术日新月异,我下面就勉强地做一个粗浅的介绍,表意为主,请勿钻牛角尖。
语义驱动:语义驱动在传统的几何为主导的AR中引入语义的概念,其技术核心来源于对场景的语义理解。为什么要语义信息?答案很简单,因为我们人类所理解的世界是充满语义的。如图11所列,我们所处的物理世界不仅是由各种三维结构组成的,更是由诸如透明的窗、砖面的墙、放着新闻的电视等等组成的。对于AR来说,只有几何信息的话,我们可以“把虚拟菜单叠加到平面上”;有了语义理解后,我们就可以“把虚拟菜单叠加到窗户上”,或者邪恶地“根据正在播放的电视节目显示相关广告”。
相比几何理解,对于视觉信息的语义理解涵盖广得多的内容,因而也有着广得多的应用。广义的看,几何理解也可以看作是语义理解的一个子集,即几何属性或几何语义。那么,既然语义理解这么好这么强大,为啥我们今天才强调它?难道先贤们都没有我们聪明?当然不是,只是因为语义理解太难了,也就最近的进展才使它有广泛实用的可能性。当然,通用的对任意场景的完全语义理解目前还是个难题,但是对于一些特定物体的语义理解已经在AR中有了可行的应用,比如AR辅助驾驶和AR人脸特效(图12)。
多模态融合:随着大大小小的AR厂家陆续推出形形的AR硬件,多模态已经是AR专用硬件的标配,双目、深度、惯导、语音等等名词纷纷出现在各个硬件的技术指标清单中。这些硬件的启用显然有着其背后的算法用心,即利用多模态的信息来提高AR中的对环境和交互的感知理解。比如,之前反复提到,作为AR核心的环境跟踪理解面临着五花八门的技术挑战,有些甚至突破了视觉算法的界限,这种情况下,非视觉的信息就可以起到重要的补充支持作用。比如说,在相机快速运动的情况下,图像由于剧烈模糊而丧失精准性,但此时的姿态传感器给出的信息还是比较可靠的,可拿来帮助视觉跟踪算法度过难关。
智能交互:从某个角度来看,人机交互的发展史可以看作是追求自然交互的历史。从最早的纸带打孔到如今窗口和触屏交互,计算机系统对使用者的专业要求越来越低。近来,机器智能的发展使得计算机对人类的自然意识的理解越来越可靠,从而使智能交互有了从实验室走向实用的契机。从视觉及相关信息来实时理解人类的交互意图成为AR系统中的重要一环。在各种自然交互中,基于手势的技术是目前AR的热点。一方面由于手势的技术比较成熟,另一方面也由于手势有很强的可定制性。关于手势需要科普的一个地方是:手势估计和手势识别是两个紧密相关但不同的概念。手势估计是指从图像(或者深度)数据中得到手的精确姿势数据,比如所有手指关节的3D坐标(图13);而手势识别是指判断出手的动作(或姿态)说代表的语义信息,比如“打开电视”这样的命令。前者一般可当作后者的输入,但是如果手势指令集不大的情况下,也可以直接做手势识别。前者的更准确叫法应该是手的姿势估计。
增强现实的再度兴起是由近年来软硬件的进展决定的,是科学和技术人员几十年努力的推动成果。一方面,很幸运我们能够赶上这个时代提供的机会;另一方面,我们也应该警惕过度的乐观,需要脚踏实地得趟过每一个坑。