引子:
我们生活的世界是三维的,在三维世界中对物体的感知拥有明确的距离感,比如键盘在手的前面,显示器在键盘的前面,那么显示器就在手的更前面(这里的“前”或者“后”属于自定义的界定,也可以认为键盘在手的后面,显示器在手的更后面),而如果通过相机将这个三维世界中的场景拍成一张照片,此时三维空间中的所有距离层次就一起被“拍”进了二维图像中,形象地比喻就是将立体的空间“压”成一张了平面的表达,从此表达空间深度的维度就丢失了,并且这个过程在自然状态下是不可逆的。
而当我们谈到三维空间(Three-dimensional space,以下称3D)的视觉感知时,则必然与深度(距离层次感)脱不开关系,也就是说,当我们用视觉(人可以用眼睛+大脑,机器可以用图像传感器+软件算法)去感知周围的环境时,只有同时获取到了深度,才有资格去讨论3D的视觉感知,否则还是停留在2D平面图像的层次。
因此在讨论“3D视觉感知的发展”时可以将关注点聚焦在两处:
- 如何提高机器视觉系统获取深度信息的精度和可靠性?(如何获得更高精度的深度信息?)
- 在融合图像和深度信息后,能够推动哪些3D视觉感知技术的发展?(在拥有图像和深度信息后,我们能继续做什么?)
机器视觉的深度获取
首先,我们讨论的是机器的视觉系统,关于机器视觉的定义,简言之,就是通过“某些设备”让机器能够“看到”周围的环境,在不具体追溯这些设备的软硬件实现时,我们以“相机”这个更为广泛的概念进行代替,也就是说,通过相机(相机内部还需要算法和软件支持)可以让机器“看到”这个世界,而相机实现的不同,则可以让机器看待这个世界的方式也发生改变。
因此,比较直观地获取深度的方式是直接通过相机软硬件这个载体来实现,在这里只进行简要的介绍,因为以下的每一种相机在具体讨论时都需要大篇幅的内容进行结构、原理和方法的说明。
从相机的角度来看,获取图像深度的方式可以分为两大类型:
- 一种是通过硬件的物理测量,比如向三维空间中发射特殊的光源,这个光源接触到物体发生反射后可以回到接收装置,通过测量光源的来回传播时间获得距离信息的飞行时间原理(Time of Flight,TOF)的深度相机,以及向三维空间中投射具有特殊形状的光源,通过测量计算这些光源在物体表面发生的形变来获得距离信息的结构光原理(Structured Light)的深度相机;
- 另一种则是通过图像中的几何学关系计算得到,专业的表达是多视图几何(Multiple View Geometry),具体的实现可以是一个相机拍摄的多个连续场景图像,或者是两个或多个相机拍摄的同一个场景图像,其中较为成熟的是通过两个平行相机实现的双目立体视觉(Binocular Stereo Vision)相机。
具体到每一种类型的深度相机,都有其各自的关注点来提高相机获取深度的精度,在此暂不深究。从另一个角度出发,如果没有这些额外的软硬件支持,只能通过相机拍摄二维图像,怎么得到图像的深度信息呢?
在当下能够通过数据驱动解决复杂问题的大背景下,利用机器学习(更具体一点是深度学习)直接从二维图像中估计出深度是一种技术趋势,比如在paperswithcode.com上检索“Depth Estimation”可以看到很多开源的算法和模型,并且所依赖的数据也不再限制,利用单张图像或者多张图像都有相应的方法。因此更直观的想法就是在相机中嵌入深度学习技术直接从图像中估计出深度信息,从而也就避免了采用额外硬件设备所需要的校准、标定等繁杂的维护工作。
在深度学习里有一条基本认知是:“数据决定了深度学习的上限,而模型只是逼近这个上限而已”。也就是说,想要通过深度学习完善地解决直接的图像深度估计问题,一个好的模型固然重要,但更为关键是拥有驱动这个模型完好运转的数据燃料,并且数据的质量决定了模型效果,那么怎样获得这些高质量的数据呢?
上文介绍的通过硬件物理测量和通过图像几何学关系获取深度的两种相机,这些在市场中已经有成熟的产品投入应用,如果用它们得到的深度数据来驱动深度学习,从理论上来讲,最理想的状态也不过是达到了深度相机的最高精度效果,并且物理测量或者几何计算本身就具有的偏差还会对模型的效果产生负面影响。
因此,从数据驱动的深度学习方法估计图像深度的这一方向切入,如果想要让模型的结果更精确从而获取更可靠的深度信息,还需要从数据上下功夫,具体可实践的方式是使用3D仿真,通过模拟相机和构建3D场景产生所需求的且完全准确的深度信息,可以采用的工具和软件包括:
- 3D建模和动画软件:Blender;
- 游戏物理引擎:Unity 3D,Unreal Engine;
- 机器人仿真器(开源):Gazebo Sim;
- 自动驾驶仿真器(开源):CARLA。
而随着人工智能的发展,特别是生成式人工智能(Generative AI)的技术,将人工智能自己生成内容的技术融入到3D仿真生成也将成为一种新趋势。
3D视觉感知技术
有了图像深度(用Z表示)之后,我们能做什么呢?
- 首先能够从二维图像恢复出三维的空间关系,图像中每一个像素点(x,y)可以通过投影关系恢复到三维空间中的点(X,Y,Z),将这些三维的点组合起来就构成了点云(Point Cloud)。
- 通过点云可以分析出哪些是可以移动的区域,哪些区域不平坦;以及哪些是空间中的阻挡自身运动的障碍物,这些障碍物与自身的实时距离等,这个过程体现的就是三维空间的感知。
- 由于从三维空间“拍”进二维图像的过程中,距离相机更近的物体会挡住其身后的物体,因此在从二维图像恢复到三维空间时,那些被挡住的部分自然也不会呈现出来,而想要从图像中恢复出一个空间的完整样貌,就需要很多张拍摄到这个空间各个角落的图像一起“组合”,共同“拼接”来还原,这个过程就叫做三维空间的场景重建。
以上的过程在具体实现中会涉及到较多的数学原理推导,在这里没有具体展开说明,但从本质的理解出发,在拥有图像深度之后,视觉的感知就完整了,下面从移动机器人和智能驾驶两个领域来谈一谈3D视觉感知技术的具体应用。
移动机器人领域
一般而言,移动机器人是在一个区域内运行的,也就是说,移动机器人需要拥有这个区域的地图信息,然后在已有地图的基础上再完成感知、定位、路径规划和导航,甚至在实际应用时还需要考虑对地图的更新。机器人的定位和建图可以通过SLAM(Simultaneous Localization And Mapping)技术来实现,SLAM中也需要知道深度信息,比如视觉SLAM在只提供图像的情况下时通过几何学关系来计算出深度,而如果能够同时提供足够精确的深度信息,那么SLAM的建图和定位精度也会更加准确。
在3D视觉下,机器人可以做到对物体更加准确和丰富的感知,不仅是对物体实现简单的位置测距,在一些算法的支持下,还能够对特定的物体实现姿态的估计,在同时拥有物体的位置和姿态后,就可以展开定位、抓取等后续的操作。同时利用三维空间的场景重建技术,还能够将机器人所处的三维空间模型恢复出来,以这个三维场景为基础,可以继续构建更丰富的地图形式,以及结合3D检测分割等技术实现更具体的环境感知。
智能驾驶领域
行驶状态中的车辆是实时运动的,并且车辆所在的道路环境也是实时变化,因此即使没有预先加载的高精度地图,智能驾驶的车辆也应该能够通过视觉或者其他传感器感知到周围环境中其他车辆或者物体的状况变化从而调整自身,这是业界常说的“轻地图,重感知”。
智能驾驶的车辆,不同于移动机器人在一个区域内运行,也不会像移动机器人一样为了补全视野的盲区而在一个范围内来回打转,车辆的运行轨迹基本是持续向前的,因此对于3D视觉的感知更倾向于实时的呈现,通过相机持续拍摄车辆周围可以获得视频流,而同时拥有了图像深度后,这个平面图像的视频流就可以转换为三维空间的点云运动流,这个转换的过程不涉及深度学习。对点云空间也可以同样进行检测、分割等处理,从而获得周围环境的实时道路状况信息。
近几年兴起的Occupancy Networks(占用网络)是上述描绘场景的一种近似表达,特别是MonoScene,通过一个网络模型实现了从单张图像中获取深度和语义信息再以三维栅格网络方式呈现的流程,从一定意义上掀起了占用网络的热潮。而从本质出发,如果拥有图像中每一个像素对应的精确深度,那么不管是高密度的三维空间点云还是数据量更低的栅格化网格,都可以顺畅地实现。
3D视觉感知的本质前提是拥有足够精确的第三维度信息,也就是深度,而后再开展以3D视觉为主导的感知技术才能如鱼得水。现如今虽然说人工智能是大趋势,深度学习方法可以解决很多问题,但要驱动深度学习方法完好运转还需要充足且高质量的数据驱动,不管是先获得精确深度信息还是说直接的3D视觉感知,当应用深度学习方法时,都离不开数据。
总的来说,3D视觉的核心是先恢复出了准确可靠的深度信息,而后再进行更具体的感知任务。一种思路是从相机本身考虑,但可能目前几种深度相机有理论的上限或者实际应用的瓶颈难以继续突破深度测量的精度和可靠性,另一种思路是完全的数据驱动,首先拥有足够量级的精准深度数据,而后不断优化深度学习的模型来达到最佳效果。3D视觉感知技术的应用也是一样,在拥有准确深度后,很多传统的感知任务都会锦上添花,当然也可以将3D视觉感知作为一个整体,在只有图像输入的情况下实现3D视觉的感知,这里就回到了应用深度学习方法解决的思路,模型优化固然重要,更必要还是高质量数据驱动。