上海科技馆的“机器人世界”展区,有一个引人注目的展项:机场服务机器人。一个机器手臂被安装在行李传送带中央,不同颜色的行李散布在传送带上。当游客选择了某一种颜色的行李后,机器手臂抬起前臂,左右摆动进行观察。通过安装在前臂上的两个摄像头的帮助,机器人识别并选定目标,同时驱动机器手臂将目标提起。
自从机场服务机器人投入展览后,一直是该展区的热门展项,驻足围观的游客络绎不绝。对机器人的表现,游客也是褒贬不一。有些游客对机器人的精彩表演连连称赞;有些则认为机器人反应迟缓、显得笨重,相比人类的表现,令人失望。
识别这些行李对于机器人来说是不是很困难?机器人在视觉方面能否做得更好,能否识别更复杂的对象?它们的目力能否超过人类?它们究竟能看到什么?
这些问题将我们引向了一个新兴的热门领域:计算机视觉。计算机视觉是人工智能的子学科,而人工智能则是仿生学的一种。人工智能旨在模仿人(有时也包括其他动物)的行为和思维,而计算机视觉将模仿的对象集中在了人眼上,即模仿人“看”的行为。换言之,计算机视觉是一门利用摄影机和计算机代替人眼进行图像获取、目标识别、跟踪、测量、理解和处理的学科。作为一门交叉学科,计算机视觉与许多学科有重要联系:机器学习、神经生物学、认知科学、信号处理(图像处理)等。在后面的介绍中,这些学科间的联系将变得更加清晰。
眼睛是人体获取外界信息最重要的传感器。它高速、准确、信息量大,为人的决策和行为提供了丰富的信息。同样,计算机视觉系统作为人工智能体的一个感知器,也常常为决策提供了最重要的信息。那么,一个理想的计算机视觉系统究竟完成了什么任务,又给智能体提供了怎样的信息呢?
让我们来举一个简单的例子。你走进一家咖啡店,发现你的好友彼得坐在角落里,双手托着下巴,一脸的不愉快。于是,你决定走过去安慰一下。假如完成该任务的不是人类而是机器人,则要由其计算机视觉系统获取图像,然后对该图像进行处理,并得到以下信息:1.这是好友彼得;2.他看上去很沮丧。这两条信息被传递给决策器,后者随即做出了走过去安慰的计划,计划则最终被四肢等效应器执行。
对人来说,这个过程再简单、自然不过,但对于计算机视觉系统来说,却是个相当复杂的过程。对该图像进行处理的过程中,计算机分别完成了三个层次的任务:初级视觉、中级视觉和高级视觉。这样的分类方式不仅和视觉任务的复杂程度有关,也和人类在完成这些任务时所涉及到的视神经和脑神经部位有关。在以下的篇幅中我们将介绍一些分别属于这三个层次的典型的计算机视觉任务。
初级视觉
现代数字成像技术使计算机视觉成为可能。利用CCD或CMOS等感光元件,可获得数字化的图像。一般来说,对像素进行处理的任务即属于初级视觉。在挖掘出图像中包含的信息时,首先需要对图像进行一些处理,以便能够执行更高级的任务。图像的主体和背景之间、同一表面上不同的材质和颜色之间等都会形成边界,从图像中提取出边、角、点等特征能帮助计算机理解图像,并利用滤波的方式进行边界特征提取。像滤波这样的信号处理方法在初级视觉中被广泛应用,除了特征提取外,还有降噪、平滑等。
图像上各种颜色的像素并不是随机分布的,它们一般都在图像上形成一定含义的组合。比如,草地是由绿色的像素拼合成的,而天空是由大量的蓝色像素组成的。找到这样的具有相同属性的像素形成的像素块称为分割。当然,提取边界可以帮助分割图像,但是简单地把所有的边界分割出的区域都作为具有相同属性的像素块是否正确呢?这正是图像分割最具有挑战性的。比如一副斑马图片,计算机如何知道斑马的嘴不是背景的一部分呢?这就涉及到了图像的语义。在给图像进行初级分割后,更精确的分割任务就要交给中级或高级视觉了。
人类有两只眼睛,同样,机器人也可以通过安装两个经过标定的摄像头来实现双目视觉,从而实现测距,即分辨物体在三维空间中的位置。上文的例子中,双目视觉可以依据透视原则和遮挡的关系来帮助视觉系统确定彼得所坐的位置,比如在第二张桌子和第三张桌子之间。
中级视觉
中级视觉是建立在初级视觉的计算结果上的。在执行中级视觉任务时,不仅使用了实时的初级视觉计算结果,还结合了一定的视觉经验。举个简单的例子,平时生活中我们所看到的,被桌上的杯子遮挡的部分也是桌子的一部分;上文斑马深色的口鼻部并非背景的一部分,而是斑马的一部分。事实上,这些结合经验的视觉任务可以首先被应用到分割任务中。中级视觉中的分割不再是仅仅依靠颜色将图像分为若干个像素块,而是产生更有意义、更精确的分割,这样的分割不是仅靠边界提取就能够实现的。分割算法不计其数,常用的有类聚的方法、基于特征向量的方法、基于图论的方法、期望最大化、概率的方法(贝叶斯方法)等。
在经验的帮助下,视觉系统可以通过拟合的方式来解释甚至纠正图像中的变形或缺失。比如,根据经验桌子的边一般是直的,则视觉系统在提取到桌子的部分边缘或拐点后,就可以用直线来拟合被遮挡而缺失的部分,或因摄像头的棱镜引起的失真。这样,机器人在走向彼得时就能避免撞到桌子。
经验也并非是绝对正确的,此刻看到的也许是经验中所缺失的。通过一个加权的概率模型,视觉系统可以将目前观察到的图像和经验中的数据结合起来,从而对未来的状态做一个预测。这样的方法常常被用于跟踪,也就是在一帧帧连续播放的画面中,根据目标在以前和目前图像中的位置来预测目标在未来图像中的位置。比如高速公路上的车辆跟踪系统,系统用从对象上提取出的特征点(红色)来定位目标。视觉跟踪常用的算法有卡尔曼滤波器、非线性动态模型等。
目前的中级计算机视觉研究受到了心理学和认知科学的影响。比如格式塔心理学对基于经验和认知整体的中级视觉有较大贡献。
高级视觉
也许高级视觉才是计算机视觉中最有趣的一部分,因为它是人类视觉中至今还无法被完全解密的部分(也许连部分解密都谈不上)。当你站在杂乱、昏暗的酒桌前,从看到的图像中识别出沮丧的彼得时,整个过程只需要0.3秒。事实上,现代处理器的运算速度远远高于人类视神经和大脑中神经突触的信息传递速度。但人类视觉的功能是如此的强大,以至于计算机视觉系统远远不能达到人类的水平。较新的研究表明,人类发达的视觉系统得益于一套大规模并行计算系统──不计其数的神经元形成的视觉通路,它就像一张有无数节点的计算网络,信息在其中往返传递。
高级视觉任务几乎都围绕着两个字展开:识别。识别是给对象贴上标签的过程,即给对象附上含有语义的名称或描述。这是一种高级的视觉活动,需要学习、联想等更高级的大脑活动的参与。拿图像的分割任务来说,图像不仅被分割成独立的像素块,视觉系统还为每个像素块贴上“标签”,比如“窗子”、“桌子”、“酒瓶”、“彼得的脸”等。通过模板比对,视觉系统将彼得的脸和经验中的图像联系了起来,从而引起了系统的兴趣。从彼得的脸上提取的特征中,视觉系统还解读出了彼得的沮丧。于是在随后的图像中,视觉系统都将注意力放在了彼得的脸上,试图跟踪该对象。视觉系统在继续跟踪的同时,将从图像中得到的信息发送给决策器。
即使是当代最成功的算法和视觉系统都无法像人类一般高效地识别物体。对我们来说,识别 “一个瓷杯”处于不同状态似乎并不怎么困难,但对计算机视觉系统来说却不容易。杯子可以有不同的摆放姿势、不同的光照强度和颜色、出现在画面中的不同位置、可能有的部分被遮挡,如果按不同状态就是不同的杯子这一点来判断,那就可能误判为存在不计其数的各式各样的杯子(即外观的区别)。在绝大多数计算机视觉系统中,目标都被要求符合一些限制条件,否则,计算机视觉将成为不可能的任务。由此可见,在杂乱、昏暗的酒桌一角发现彼得对计算机视觉系统来说是多不容易的一件事情。
对人类来说,识别并非与生俱来的本领。婴儿睁大眼睛看着陌生的世界,他们的视觉实践是从测距、分割开始的。幼儿几乎每时每刻都在努力学习如何给图片贴标签。他们学习得很快,低龄儿童不仅可以成功地识别物品,还可以在一定程度上察言观色,感受到由表情传达的情绪。通过奖励和带教,可以加速儿童的学习过程。
通过这样的启发,高级视觉还将依赖机器学习这门学科。机器学习是研究如何通过算法让计算机实现人类的学习过程,从而让计算机不仅能够实现简单枯燥的任务,还能够向智能迈进一步。作为人工智能领域的核心学科,机器学习如百家争鸣,不断取得着新的成绩。当今重要的机器学习算法有人工神经网络、遗传算法、支持向量机、贝叶斯网络、强化学习等。
至今,计算机视觉系统最为成功的案例,莫过于手写数字识别。MNIST是使用最广泛的手写数字库,为各类识别算法提供了一比高下的平台。MNIST中含有七万幅边长为28个像素的图像。目前最出色的识别算法一般都可以达到1%以内的错误率。然而,MNIST只是对目标的外观做了有限多的变化,并没有涉及到有如杯子在不同状态下的各种变化。而且,28×28=784个像素的图片实在很小,如果处理普通大小的照片,视觉系统的运算量就会呈指数级增长,甚至让超级计算机都无能为力。
因此,对于哪怕是当今世上最聪明的机器人来说,像人类一样看到酒吧里沮丧的彼得并上前安慰,也是天方夜谭。但计算机视觉是一门新兴的学科,随着处理器硬件和人工智能算法的发展,也许有朝一日机器人也可以达到人类的视觉功能。