计算机视觉:机器如何看懂世界?
大量与语义能力相关的高级智能与视觉是密不可分的。如果能够解决图像场景的理解问题,真正的智能也许就不再遥远。计算机视觉本身蕴含更深远的通用智能的问题,视觉智能即人工智能。

文/许春景
要构建一个人工智能系统,计算机视觉必不可少。
视觉智能即人工智能
人之所以拥有智力,与不停接收外界的信息刺激是息息相关的。想象一个刚出生的婴儿,其所有的感觉器官都由于疾病失灵了,没有办法看、听、闻或者触摸,在这种情况下,即使大脑在生理上是正常的,也不可能发展出什么智能来。
视觉是人接收的所有信息刺激中非常重要的一部分。由此推之,要构建一个人工智能系统,处理好视觉感知同样是必不可少的。
这类视觉感知被称为计算机视觉(Computer Vision),简单定义一下就是,给定一幅或者多幅图像(就像人类视网膜感光形成的图像信号),让机器理解其中的内容——里面有什么东西,它们之间的关系如何,整个图像信号意味着什么,等等。
在5到10年前,包括学术界研究者在内的绝大多数人都会认为,计算机视觉是人工智能的关联学科,而不是包含关系,人工智能主要面向让机器掌握学习、知识推理的能力,而计算机视觉则主要负责视觉的感知,是一个更浅层、更前级的东西。
然而,随着研究的不断深入,特别是深度学习在计算机视觉领域的一些最新进展,使得人们逐渐认识到,视觉不仅仅是感知层面的东西,大量与语义能力相关的高级智能与视觉是密不可分、息息相关的。如果能够解决图像场景的理解问题,真正的智能也许就不再遥远。因此可以说,计算机视觉本身蕴含更深远的通用智能的问题,视觉智能即人工智能。
机器看世界难点何在?
计算机一般通过摄像头来观察世界,看到(Seeing)和感知到(Perceiving)对计算机来说,存在巨大的不同。在图1中,一个字母a的图像,计算机读取到的是一串数字。
如何让计算机通过这串数字,知道其代表的是字母a,这就是计算机视觉,也是人工智能需要解决的问题。乍一看起来,这似乎很简单。但是再看看下面的图2。
在图2中,所有的图像都代表字母a,人作为智能生物,能够不费吹灰之力将这些字符读取出来。而计算机看到的则是完全不同的数字串。如何从这些完全不同的数字串中让计算机产生a这个概念,图2比图1难度大了许多。但这还仅仅是简单的情况,自然图像中的字母a可能出现在路牌上、广告中,与其他不相干的大量背景混杂在一起,光线产生不同变化等等,计算机要从中找到并且理解字母a就更难了。
从上述例子可以看出,计算机视觉的主要任务是从纷繁复杂的图像像素的变化中,总结并表达出其中不变的因素,即一些固定的概念。而自然界中带有固定概念的物体,通过光线反射到摄像头传感器(可以称作计算机的视网膜),得到的传感器的响应(上面例子中所说的数字字符串)则是千变万化的。
从变化的像素到语义的概念,计算机视觉经过几十年的发展,通过特征表达和监督学习,取得了长足的进步。还是以字符识别为例,现代的智能系统能够在数码相机或手机拍摄的照片中,找到并且识别其中的文字,例如门牌号、餐馆的名称、指示牌等等。这些文字有不同的字体,拍摄的角度有不同的变化,或在不同光线条件下拍摄,仍然能够被系统识别出来。
深度学习亟需突破
计算机视觉最为关键的部分是图像的特征表达,其本质是找到一个数字串,来代表输入的图像。图像本身对应的数字串,就是一种特征表达,只不过这种表达是像素级别的、非常低级的表达,在图像代表的概念不变的情况下,稍有风吹草动,对应的数字串则会发生巨大的变化。我们认为更高级的表达,意味着概念不变的情况下,图像变化并不会带来对应数字串的巨大改变。最高级的表达即是语义概念本身。
在深度学习流行之前,大量的计算机视觉研究主要集中在怎样通过经验结合数学的方法,来人工设计一种表达。例如在字符a的识别中,通过观察可以发现,像素的颜色和a这个概念并不强相关,而由不同的像素组成的边界,并且由边界组成的形状和a这个概念是紧密相连的。因此,在这里设计一种数字表达,来刻画像素形成的边界和形状是可行的,这能够克服一定的图像变化带来的变量,例如背景颜色的变化,光线的变化等,对于视角的变化也有一定的容忍性。
不过,这种设计往往是具体问题具体分析的,比如设计用来做字符识别的,不能够用来做动物的识别。对比之下,人类对物体的视觉识别,光线从视网膜射入,经过各级处理之后得到高级概念的通道几乎是不变的,不会有多套机制来针对不同的概念。如何找到一种方法,使得机器能够模拟人的神经网络在特征表达上的特点,即同一种特征表达能够推广到很多应用领域,是计算机视觉一直以来的目标。
从20世纪40年代开始,人们就考虑通过数学来描述神经元的表现,这是人工神经网络的起源。到了六七十年代,这一概念迅速发展,但是很快陷入停滞。当时人们设计的神经网络都比较浅,大概只有两三层,其表达能力非常有限。如果设计更深的、更多层的网络,则会导致训练极其困难。
后来,人们开始注意到一种由很多小的卷积滤波器组成的神经网络。著名计算机科学家Yann LeCun等人基于此,在80年代设计了一系列更深的神经网络,达到7~8层,这些神经网络在当时的条件下,是可以被训练的。通过在手写邮政编码识别上的优异性能,卷积神经网络逐渐被人们所熟知。经过多年的潜伏和一系列的改进,卷积神经网络这一工具终于在ImageNet上的大规模自然图像分类中,大比分领先击败了几乎所有的传统方法,从而确定了其在图像识别检测领域的王者地位。
在当下主流的计算机视觉研究中,深度学习成了必不可少的方法。由于Google、微软、Facebook、百度等公司的推动,深度学习在实际问题的解决中扮演越来越重要的角色,在图像检索、视频监控、自动驾驶的视觉感知等应用领域开始成为标准工具。其在产业界的优势也开始显现出来。产业界的优势在于对应用数据的掌握,而训练大规模神经网络最重要的一点就是需要海量的数据,经过人的指导,在训练中提升神经网络的表达性能。原来训练人工设计的表达,所需要的数据量一般在几千到几万样本,大规模神经网络则需要百万量级甚至更多的样本,例如在自动驾驶的应用中,训练的视频样本甚至可以达到数百万小时。
这同时提出了一个新的挑战:面对应用,数据从何而来?以自动驾驶的视觉感知为例,要精准检测摄像头中出现的车辆、人物等目标,需要大量的图像涵盖不同的场景。对于目前主流的监督学习来说,还需要人工将图像中的人车等目标物体进行标注,再将标注的图片用来训练给定结构的神经网络。主流的神经网络都包含百万甚至千万量级的参数,需要海量的标注数据,由此产生的人力和时间成本都不容忽视,如何有效获取足够的样本成为应用成功的关键。
样本数据的解决方案目前有两种,第一种非常直接,是投入资源构建大型图像数据库,用来训练基础的数据表达。在面对新应用的时候,由于深度神经网络的特征表达具有通用性,这些数据库训练出来的特征表达可以作为基础应用,扩展到其他领域。目前国际上公开的数据库ImageNet(image-net.org)走的就是这条路。
然而,通过人工监督进行深度学习的方法,显然与人识别图像是有巨大区别的。人只需要非常少量的样本,就能获得抽象的概念。这引导深度学习走向第二条道路,即所谓的从少量样本中进行学习,寄希望于神经网络学来的概念具有可组合性,例如通过车轮和车架的基础概念模块组合出独轮、两轮自行车的概念;同时具有因果性,即对于概念的组合能够保持合理的因果结构,例如车轮不能在车架上面;还有自我学习能力。目前,这一概念还在萌芽阶段,如果能够取得实质意义上的突破,将会使得视觉智能更进一步,也必将促进人工智能的飞跃发展。