演讲全文:
图像识别是人工智能领域非常核心的一个课题。同时从研究的角度来看,机器学习也是人工智能下的一个研究方向。因此,这个题目会更容易引起大家的共鸣。
一、 什么是图像识别?
图像识别是什么?
以这张图像为例,第一个问题是:在这个图像里面有没有街灯。在学术研究中,我们把这个问题叫作图像检测。
第二个问题就是把街灯的位置给找出来,这叫做定位。
第三个问题是物体的分类和识别,指出这是山,这是树,这个是招牌,建筑。我们可能还会对整张图片做一个场景的分类,是在什么环境下拍照的。它可能是一个室外的图像,关于城市的生活等等。基本上这些就是我们在图像识别里面涉及到的一些可能的研究问题。
二、 图像识别有什么应用?
做这些研究可以有哪些用途?比如无人驾驶汽车:如果汽车上有一个带有摄像头的辅助系统,能够识别这个场景下所有的情况,包括车道线,交通标识,障碍物等,这样能够让我们驾驶汽车更方便、更轻松。
另外,一些相机在拍照的时候,在用户摁下快门到一半的时候,相机就会去找到这个图像的人脸在什么地方。找到人脸以后把焦点对焦在脸上,使这个图像能够让人更清楚一点。
还有,我们的计算机里面往往会有成千上万的照片,怎么组织它们,从而用户快速找到一张照片?如果有这样的图像识别系统,我可能会告诉计算机,我要找的照片里有两个人,这个照片是在颐和园照的。
三、图像识别的困难在哪里?
图像识别有很多难点。第一个困难就是它的视点变化很多。当我们对同样一个物体拍照的时候,因为视点不同,得到的图像外观是不一样的。所以对同一个物体这样看或者那样看,看外观非常不一样。但是也许两个不同的物体,外观又可能会很相近。所以这是造成图像识别的一个困难。
第二个难点就是尺度问题。物体在图像中近大远小,这给我们做图像识别会带来一定的难度。
光影的变化一向是计算机视觉特别关心的一个问题,光影变化是图像识别的第三个难点。同样一个人在不同光影下看起来判若两人。
第四个难点是背景复杂。在复杂背景下,找到某一个人带着拐杖,找到一个戴帽子的人难度很大。
第五个难点是遮挡。遮挡是计算机视觉特别关心的一个难点。比如说,这个图片里熙熙攘攘的人中,我们知道这大概是一个女孩:她有棕色的头发,穿着一个短袖衫。我们人的本领很强,这种情况下还能识别出男女。但是计算机现在还做不到这一点。
第六个难点是变形。非钢体在运动的时候会产生变形。同样一匹马在不同的情况下的图像表现会非常不一样。
四、图像识别的发展历史
图像识别刚开始的时候是从单一的物体识别做起。上边这张图像展示的是传统的几何方法的结果。我们的客观世界那么复杂、那么多样,我们该怎么做识别呢?
那就先从特别简单的问题做起。这也是我们做科学研究的一般的方法:从简单的问题着手。比如从做积木的识别入手。因为积木有很规范的几种形状。
上图是识别出的简单的剃须刀。这些人造的非常规范的几何体的组合,只要识别出长方形、矩形、正方形、三角形等,就会把剃须刀,工具检测和识别得非常好。另外一种方法,是根据外观识别。我不考虑要识别的物体的几何结构,仅仅看它外观长什么样。这里列出的是做人脸检测的例子。
做人脸识别的研究历史相对比较长。大概七几年就开始有这样的研究工作了。直到现在仍然有很多人脸识别的研究工作发表。
另外一个课题就是手写数字识别。手写数字看起来是很简单的事,但是对手写数字识别的研究引发出相当多的研究方法,给我们带来很多的成果,是一个很有意思的课题。此外的课题还有汽车的检测。我这里只是列了这几个。其实同时期还有指纹识别、文字识别OCR等、等。当时有的研究工作已经发展到了产品化的程度,包括OCR和指纹识别。
在2000年之前的图像识别曾经采用过几何的方法、结构的方法、规则的方法,当然也用了一些比较简单的模式识别的方法。
在80年代后期、90年代期间,机器学习领域发生了什么?这个时期的机器学习有了一个飞速的发展,出现了一些了不起的研究成果,包括:支持向量机方法,AdaBoosting方法,计算学习理论等。成果出现。这些都使得机器学习和识别大大的往前走。在2002年后的一段时间里,一个华人女科学家,叫李飞飞,开始用一个新的思路做图像识别。
他们希望设计一个统一的框架做图像识别,而不是就事论事地针对一种图像识别任务设计一套专门的方法。他们希望这个统一的框架能识别成千上万种物体。另外,希望机器学习领域的出色成果可以用在图像识别上。她们还借鉴文本分析里的方法-“词袋”(bag of words)的方法用于图像识别。
什么是“词袋”方法?举一个例子。比如要识别一张人脸,我们不考虑人脸结构那么复杂,我们只要看看里面有没有鼻子、眼睛、嘴巴、下巴。有了这些部件,只要这些部件在一起,就说这是一张人脸。你可能会觉得这很简单。
这个方法来源自对文本的研究。在自然语言处理里面,有一个任务是对文本分类。文本分类中就采用了“词袋”方法。
比如说有这样一篇文章,我们想知道这篇文章是属于哪个类别。它是在讨论军事,还是在讨论科学。那么我们怎么做呢?一种办法是按我们通常会想到的方法,就是把每一句话都读懂,做解析,知道句子的语法结构,然后去理解句子的内容。但是,对句子做做语法分析很难,理解句子很难。我们往往做不好,所以就不采用这种方法。
实际上,我们可以用一个简单的方法:我们只要看这篇文章出现过哪些词出现的频率高。这篇文章中的高频词是:视觉、感知、脑、神经,细胞,你会说这篇文章属于神经科学类。还有一篇文章,其中的高频词是:中国、贸易、出口、进口、银行、货币等,你会知道这篇文章属于经济类。这个方法不用分析和解析句子和段落的语法结构,而只要把这些高频词放到一块,叫“bag of words”。
怎样把这种方法用于图像识别呢?在识别图像的时候,我们也可以把图像中的“高频词”放在一起来识别图像。这里的“词”是什么?直观地说就是小的图像块。比如我们要识别一张人脸,这样的图像上就会有像皮肤一样,或者像眼睛一样的图像块。
而相对来说,如果识别自行车,就会出现和车有关的图像块,如:车座、车梁。这些图像块就是“词”。这样就可以采用“词袋”方法。实际上,图像中的词不是我们说的这么直观,而是下方这样的图像小块。它是很底层的图像块,非常小,3*3,5*5或者7*7大小的图像块。这样小的图像块不表达很抽象的语义。
这种方法提出后,有很多有意思的相关的论文发表。但是这种方法还有缺陷。我们看这样的几个数字,在图像识别领域有一个物体识别比赛,这个比赛就是给你一些图像,让你去设计和训练你的算法。比赛的时候就是提供一些新的图像,要求算法告诉哪张图片是什么类别。
如果预测前5个类别中有标准答案,就算预测正确。否则计算错误。这个比赛在2010年的第一名的成绩是72%,到2011年第一名的成绩是74%。我们知道,全世界那么多优秀的团队,有那么好的资源去做这个事,每年的进步大概就是1%-2%的样子。
在2000年之后这些年,机器学习在做什么事?机器学习仍然是做基础研究,出现了很多优秀成果。其中,2006年Hinton在Science上发表了一篇文章介绍他们的深度学习方法。有人建议Hinton用他们的方法试一试这个物体识别问题。结果在2012年的比赛中,他们获得了第一名,成绩是85%的识别率。后来大家发现这个方法原来那么好,所以大家一拥而上,纷纷用这种方法解决各自关心的问题。为什么人工智能现在这么热?主要就是因为这个原因。
张长水教授的实验室也用这个方法做了交通标识的识别,这是基金委的一个项目。花了很大的力气,成果很好,基本上可以到实用的程度。
五、 面临的困难和今后要研究的问题
看起来图像识别已经很好了,很多人很乐观,很多人热血沸腾。其实图像识别还没有做得那么好。有什么样的困难?我们举几个例子。
比如说我们在做图像识别的时候,通常我们要标注数据,就是要标注这是鸟、这是猫。然后用这些图像去做训练。标注数据其实是很头疼的事,很花时间很花钱。李飞飞的项目组收集的第一个数据集有101类物体。
这个图像库做得很好,后来一些算法可以在这个数据库上达到99%多的识别率。人们说,这些图像质量太好了,种类也太少。后来她们又做了这个数据库,这个数据库有256种物体,图像也没有对齐得那么好。尽管这样,这个数据库开始太小。
在2009年李飞飞她们发布了新的数据库ImageNet,大概有几千万张图像数据。
标数据是件头疼的事。例如这个数据库就要对每个物体用一个方框框起来,并给出一个类别标号。这是一些典型的图像,给每个物体都要框起来,都要标好这是什么物体。
还有一个图像数据库叫LabelMe。上图是其中一张图像,标得非常细,房屋的外形、轮廓、窗户、汽车、所有草地、马路都标得很清楚。大概有十万多张图片,标得非常好的图像大概一万张。张教授有一次对MIT的一个学生说,你们这个数据库做得真了不起,花了那么大功夫。他说这是另一个学生做的。其实不是那个学生标的图像,大部分图像都是他妈妈标的,他妈妈退休在家,每天给他标数据,做妈妈的多么了不起。
还有一个华人科学家,也很了不起,叫朱松纯。他说我们应该把图像标得更细。例如这张图片,其中的椅子可以标得非常细,座椅、椅背、腿的轮廓都标得很准确。他们还标了各种各样的椅子。他们雇了几十个美工,一天到晚标数据,干了几年,但是数据库才几十万张图片。所以标数据是一个非常花钱的事。
因此做机器学习的人就在考虑,能不能不用那么费心去标数据而把图像识别做得更好一点。比如这张图片,只要你就是告诉我,你这张图片有摩托车,你不用说车在哪儿我也能把车检测和识别出来。
现在还有很多问题没解决。比如说我们现在的技术只是对图像做了一些解析,可以识别出这张图中这个部分鸟、这是树,但是没有对这个图片做更深入的理解。例如:这个算法并不知道这些物体之间的关系是什么。而对于我们理解一张图片来说,理解物体之间的关系非常重要。
在这个方面给大家介绍一下我们做的一个工作,叫image caption。这件事好几个单位都在做,微软、百度、Google都在做。给大家看的这些结果是实验室在做的工作。Image caption这是一个什么样的工作呢?就是你给我一张图片,你不需要告诉我这儿有一只狗,它叼的是一个什么样的东西。
你只需要告诉我一只狗在叼着一个飞碟就够了。我们现在就利用这八万多张图片和对应的自然语言的句子来设计一个模型,并且训练这个模型,使得当你给我一张新的图片的时候,这个算法能生成一个自然语言的句子来描述它。比如这是针对对这张图片生成的句子:火车站旁边的轨道上停了一辆火车。再比如这个图像:一群斑马彼此很紧密地站在一起。还有这张图片:一只狗嘴里叼着飞碟。不仅如此,在做这个时候,还得到了另外一些有意思的结果。这个算法里有一个视觉的注意模型。
这个模型可以自动找到关心的图像块。在对这张图像生成的句子A brown cow is standing in the grass时,我们看到brown,cow, grass都对应着正确的图像块。大家注意,我们在训练数据里面并没有告诉算法哪一块是牛,哪一块是草地。这说明,这个算法学习到了这些概念。
既然是这样,除此以外,其他的概念是不是也能找对?我们就把其他的一些词所对应的图像块找出来,看一看。比如说这一排是消火栓这个词对应的图像块。这是黑猫这个概念。结果都找对了。比较有意思的是,除了名词以外,程序还找到了动词对应的概念。比如说fill with(把…填满),你会发现图片全是容器里面盛东西。
这个结果很有意思,非常像小孩在成长过程中学习。我们会教一个一岁多的孩子,告诉他“这是一张桌子”,“这是一个激光笔”。我们不会,也无法说:“一张”是量词,“桌子”是关键词。但是孩子慢慢就能学会这些概念。我们的算法也是这样。
上面列举了我们取得的成果。但是,面前还有很多很多的问题没有解决。比如,我们现在看深度网络很有效,但是它为什么有效?我们还不太明白。除此之外还有其他的模型吗?比如说有一些工程上的问题,那么多数据你能算吗?机器跑得动吗?做机器学习的人非常关心这些问题。
另外,比如说这里有一束花。现在算法可以识别出这是一束花。但是它还不能说出哪里是叶子,哪里是花蕊,哪里是花瓣。我们看起来已经取得了那么多的成果,从某种意义上来说我们也可以把它们做成产品,让他为我们服务,但同时我们看到还有更多的问题没有解决得很好,这就需要我们继续努力。
本文基本上是在讲图像。但是我们看到背后用的很多方法都是机器学习的方法。所以是机器学习人的努力,计算机视觉科学家的努力,大家共同的努力,取得了现在的成果。我们可以用这些成果转化成产品,使我们的生活可以更智能化一点。
原文发布时间为:2017-03-18
本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号