长时间来,让计算机能看、能听、能说一直是我和计算机界同行们孜孜以求的目标。耕耘在计算机视觉领域十余年,赋予计算机一双慧眼,让它也能看懂这个多彩的世界,一直是激励着我在这条充满挑战的道路上前行的重要力量。虽然计算机暂时还无法像电影中所展现的那般智能,但已经取得了很多令人惊喜的成绩。在这篇文章中,我将就如何让计算机能“看”懂世界这个主题,为大家介绍计算机视觉的基本概念、这个领域面临的挑战、一些带来重要突破的技术并展望未来的演进趋势。
世界如何在我们眼中形成
对人类而言,“认人”似乎是与生俱来的本能,刚出生几天的婴儿就能模仿父母的表情;它赋予我们只凭极少细节就分辨彼此的能力,借着暗淡灯光我们仍能认出走廊那端的朋友。然而,这项对人类而言轻而易举的能力,对计算机而言却举步维艰。过去很长一段时间,计算机视觉技术徘徊不前,在进一步探求前,不如先谈谈我们是如何用眼睛观察世界的。
相信大家都在中学的物理课上尝过小孔成像的原理。不过人的眼睛要比小孔成像复杂得多,当我们观察物体时,每秒大约扫视3次,并有1次驻留。当视网膜的感光体感受到蜡烛的轮廓,一个被称为中央凹的区域其实是以扭曲变形的形式记录下蜡烛的形状。
那么问题来了,为何我们看到的世界既未扭曲也没有变形呢?很简单,因为人类拥有大脑皮层这个万能的“转换器”,它将我们的视觉神经捕捉到的信号转换为真实的形象。这个“转换器”可简化理解为四个区域,生物学家将它们分别称为V1、V2、V4和IT区。V1区的神经元,只针对整个视觉区域中很小的一部分做出反应,例如,某些神经元发现一条直线,就变得异常活跃。这条直线可以是任何事物的一部分,也许是桌边,也许是地板,也许是这篇文章某个字符的笔划。眼睛每扫视一次,这部分神经元的活动就可能发生快速变化。
奥秘出现在大脑皮层顶层的IT区,生物学家发现,物体在视野的任何地方出现(例如一张脸),某些神经元会一直处于固定的活跃状态中。也就是说,人类的视觉辨识是从视网膜到IT区,神经系统从能识别细微特征,到逐渐变为能识别目标。如果计算机视觉也可以拥有一个“转换器”,那么计算机识别的效率将大为提高,人眼视觉神经的运作为计算机视觉技术的突破提供了启迪。
计算机为何总是“雾里看花”
尽管人眼识别的奥秘已经被逐步揭开,但直接应用于计算机上却非易事。我们会发现计算机识别总是在“雾里看花”,一旦光线、角度等发生变化,计算机难以跟上环境的节奏,就会误识。对计算机而言,识别一个在不同环境下的人,还不如识别在同一环境下的两个人来得简单。这是因为最初研究者试图将人脸想象为一个模板,用机器学习的方法掌握模板的规律。然而人脸虽然看起来是固定的,但角度、光线、打扮不同,样子也有差别,都令简单的模板难以匹配所有人脸。
因此,人脸识别的核心问题在于,如何让计算机忽略同一个人的内部差异,又能发现两个人之间的分别,即让同一个人相似,不同的人有别。
对人工神经网络的引进是计算机视觉超越模板识别的关键。然而人类尚且未完全掌握神经的运作机制时,又该如何引导计算机进步呢?人工神经网络在1960年代就已萌芽,初期理论只固定在简单的模型之上,即生物课上的“输入-隐层-输出”模型。在介绍神经的工作原理时,老师们一般都会简单告知是外界刺激接触到输入神经元,输入神经元再链接其他部分形成隐层,最后通过输出神经元表现出来。这些神经元的链接强度并不相同,就像不同乐谱的强弱高低不同,人工神经网络就是依靠这些神经元之间不同的链接强度,学会将输入方式映射到输出上。
不过“乐谱”只是静止不动的,而且只能从“输入走向输出”,不存在反向呈现。也就是说如果人静止不动,计算机也许可以通过这一原理读出,但这在现实生活中不可能实现。1980年代末期,用于人工神经网络的“反向传播算法”发明,它能将输出单元的错误传回输入单元,并记住它。这种方法令人工神经网络能从大量训练样本中学习统计规律,对未知事件做出预测。不过与大脑的复杂及层级结构相比,这种只包含一个隐层的神经网络构造还显得微不足道。
深层神经网络为计算机“拨云见日”
2006年,多伦多大学教授Geoffrey Hinton在深层神经网络的训练上取得了突破。一方面,他证明了多隐层的人工神经网络具备更优异的特征学习能力,另一方面能通过逐层初始化克服此前一直困扰研究者的训练难题——基本原理是先通过大量无监督数据保证网络初始化,再用有监督数据在初始化好的或者是预训练的网络上优化调整。
受到这些因素的启发,如今的人脸或图像识别研究,大多基于CNN(Convolution Neural Networks)原理。CNN可以被视为一种逐层扫描的“机器”。第一层检测边缘、角点、平坦或不平坦的区域,这一层几乎不包含语义信息;第二层基于第一层检测的结果进行组合,并将组合传递给下一层,以此类推。多层扫描之下,累加准确率,计算机就在向前文提及的“让同一个人相似,不同的人有别”这一目标迈进。
CNN的学名为带有卷积结构的深度神经网络,这一网络识别物体还可分为两个步骤:图像分类和物体检测。在第一个阶段,计算机首先识别出物体的种类,例如人、动物或其他物品;第二个阶段,计算机获取物品在图像中的精确位置——这两个阶段分别回答了“是什么”和“在哪里”两个问题。微软的智能聊天机器人“小冰”具有辨识狗的品种的能力即是CNN的典型示例。首先,需要搭建一个好几层深度卷积网络。第一层跟人类视觉系统的定义很像,用来对一些小的边缘或者小的色块做一些检测;第二层会把这些小的结构组成大的结构,如狗腿和狗的眼睛;依次向上进行组织,最后就能鉴别出狗的种类来。其次,需要往这个带有卷积结构的深度神经网络里投入很多的图,训练系统识狗的准确度。
2013年,加州大学伯克利分校的研究者们提出了一种称为叫R-CNN方式(Region-based CNN)的物体检测方法,具有很高的识别准确度,它将每张图像分为多个窗口或个子区,在每个子区域应用神经网络进行分类。但其主要缺陷在于,对于实时检测,算法过慢。为了在一张图片上检测几个物体,整个神经网络可能需要运算上千次。
在微软亚洲研究院,视觉计算组的研究员们实现了一种称为空间金字塔聚合(Spatial Pyramid Pooling,SPP)的新算法,通过在内部特征识别,而不是每个区域从头检测,对整个图片只做一次计算。利用这种新算法,在不损失准确度的前提下,物体检测速度有了上百倍的提升。在2014年ImageNet大规模视觉识别挑战赛中,微软亚洲研究院采用SPP算法的系统取得了分类第三名和检测第二名的成绩。目前,这项技术已经成功转化进入OneDrive中。采用了这项技术后,OneDrive可以自动为上传的图片添加标签。同时,用户输入关键词,就可以搜索与之相对应的图片。
展望未来计算机视觉和人类共舞
如果单纯识别面部,而不考虑发型和身体的其他部分,人类的正确率约为97.5%,而计算机目前则能达到99%以上。这是否意味着计算机已经胜过了人类?不是,因为我们不只观察面部,身材和体态都有助于我们认出对方。在复杂光照的真实环境下,人能够更智能地选择这些分支帮助自己决策,而计算机在这方面则要逊色许多。不过,如果数据量庞大,或者面对陌生的脸孔,计算机又更强大些。如果能够各扬其长,歌词中所唱的“借我一双慧眼吧”或许将会实现。
人类通过不断发明的新技术来替代旧技术去更高效和经济地完成任务。在计算机视觉领域亦是如此,我们开发更便捷人脸识别用于门禁系统,以替代手动的输入用户名和密码——Xbox One利用红外相机设计的人脸识别系统就颇受用户好评。
除上述人类自身也能做到的识别功能外,计算机视觉还可应用在那些人类能力所限,感觉器官不能及的领域和单调乏味的工作上——在微笑瞬间自动按下快门,帮助汽车驾驶员泊车入位,捕捉身体的姿态与电脑游戏互动,工厂中准确地焊接部件并检查缺陷,忙碌的购物季节帮助仓库分拣商品,离开家时扫地机器人清洁房间,自动将数码照片进行识别分类……或许在不久的将来,超市电子秤就能辨别出蔬菜的种类;门禁系统能分辨出带着礼物的朋友,抑或手持撬棒的即将行窃的歹徒;可穿戴设备和手机帮助我们识别出镜头中的任何物体并搜索出相关信息。更奇妙的是,它还能超越人类双眼的感官,用声波、红外线来感知这个世界,观察云层的汹涌起伏预测天气,监测车辆的运行调度交通,甚至突破我们的想象,帮助理论物理学家分析超过三维的空间中物体运动。
曾经,人类用眼睛记录了波澜壮阔的历史。未来,我们希望逐步开启计算机的眼,让它在看懂这个多彩的世界的同时,也能帮助人类更高效和智能的完成工作和生活。期待在计算机视觉和人类的共舞下,世界不仅有多彩,更有智慧。
(作者:微软亚洲研究院首席研究员 孙剑)
好文章,需要你的鼓励