图像识别技术的应用及发展趋势
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达本文转自|新机器视觉图像识别技术的背景
移动互联网、智能手机以及社交网络的发展带来了海量图片信息,根据BI五月份的文章,Instagram每天图片上传量约为6000万张;今年2月份WhatsApp每天的图片发送量为5亿张;国内的微信朋友圈也是以图片分享为驱动。不受地域和语言限制的图片逐渐取代了繁琐而微妙的文字,成为了传词达意的主要媒介。图片成为互联网信息交流主要媒介的原因主要在于两点:
第一,从用户读取信息的习惯来看,相比于文字,图片能够为用户提供更加生动、容易理解、有趣及更具艺术感的信息;
第二,从图片来源来看,智能手机为我们带来方便的拍摄和截屏手段,帮助我们更快的用图片来采集和记录信息。
但伴随着图片成为互联网中的主要信息载体,难题随之出现。当信息由文字记载时,我们可以通过关键词搜索轻易找到所需内容并进行任意编辑,而当信息是由图片记载时,我们却无法对图片中的内容进行检索,从而影响了我们从图片中找到关键内容的效率。图片给我们带来了快捷的信息记录和分享方式,却降低了我们的信息检索效率。在这个环境下,计算机的图像识别技术就显得尤为重要。
图像识别是计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。识别过程包括图像预处理、图像分割、特征提取和判断匹配。简单来说,图像识别就是计算机如何像人一样读懂图片的内容。借助图像识别技术,我们不仅可以通过图片搜索更快的获取信息,还可以产生一种新的与外部世界交互的方式,甚至会让外部世界更加智能的运行。百度李彦宏在2011年提到“全新的读图时代已经来临”,现在随着图形识别技术的不断进步,越来越多的科技公司开始涉及图形识别领域,这标志着读图时代正式到来,并且将引领我们进入更加智能的未来。
图像识别的初级阶段——娱乐化、工具化
在这个阶段,用户主要是借助图像识别技术来满足某些娱乐化需求。例如,百度魔图的“大咖配”功能可以帮助用户找到与其长相最匹配的明星,百度的图片搜索可以找到相似的图片;Facebook研发了根据相片进行人脸匹配的DeepFace;雅虎收购的图像识别公司IQEngine开发的Glow可以通过图像识别自动生成照片的标签以帮助用户管理手机上的照片;国内专注于图像识别的创业公司旷视科技成立了VisionHacker游戏工作室,借助图形识别技术研发移动端的体感游戏;创视新科技通过图像识别技术研发机器视觉表面检测系统。
这个阶段还有一个非常重要的细分领域——OCR(OpticalCharacterRecognition,光学字符识别),是指光学设备检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程,就是计算机对文字的阅读。语言和文字是我们获取信息最基本、最重要的途径。在比特世界,我们可以借助互联网和计算机轻松的获取和处理文字。但一旦文字以图片的形式表现出来,就对我们获取和处理文字平添了很多麻烦。这一方面表现为数字世界中由于特定原因被存储称图片格式的文字;另一方面是我们在现实生活中看到的所有物理形态的文字。所以我们需要借助OCR技术将这些文字和信息提取出来。在这方面,国内产品包括百度的涂书笔记和百度翻译等;而谷歌借助经过DistBelief训练的大型分布式神经网络,对于Google街景图库的上千万门牌号的识别率超过90%,每天可识别百万门牌号。
在这个阶段,图像识别技术仅作为我们的辅助工具存在,为我们自身的人类视觉提供了强有力的辅助和增强,带给了我们一种全新的与外部世界进行交互的方式。我们可以通过搜索找到图片中的关键信息;可以随手拍下一件陌生物体而迅速找到与之相关的各类信息;可以将潜在搭讪对象拍下提前去她的社交网络了解一番;也可以将人脸识别作为主要的身份认证方式……这些应用虽然看起来很普通,但当图像识别技术渗透到我们行为习惯的方方面面时,我们就相当于把一部分视力外包给了机器,就像我们已经把部分记忆外包给了搜索引擎一样。
这将极大改善我们与外部世界的交互方式,此前我们利用科技工具探寻外部世界的流程是这样:人眼捕捉目标信息、大脑将信息进行分析、转化成机器可以理解的关键词、与机器交互获得结果。而当图像识别技术赋予了机器“眼睛”之后,这个过程就可以简化为:人眼借助机器捕捉目标信息、机器和互联网直接对信息进行分析并返回结果。图像识别使摄像头成为解密信息的钥匙,我们仅需把摄像头对准某一未知事物,就能得到预想的答案。就像百度科学家余凯所说,摄像头成为连接人和世界信息的重要入口之一。
图像识别的高级阶段——拥有视觉的机器
上文提到,目前的图像识别技术是作为一个工具来帮助我们与外部世界进行交互,只为我们自身的视觉提供了一个辅助作用,所有的行动还需我们自己完成。而当机器真正具有了视觉之后,它们完全有可能代替我们去完成这些行动。目前的图像识别应用就像是盲人的导盲犬,在盲人行动时为其指引方向;而未来的图像识别技术将会同其他人工智能技术融合在一起成为盲人的全职管家,不需要盲人进行任何行动,而是由这个管家帮助其完成所有事情。举个例子,如果图像识别是一个工具,就如同我们在驾驶汽车时佩戴谷歌眼镜,它将外部信息进行分析后传递给我们,我们再依据这些信息做出行驶决策;而如果将图像识别利用在机器视觉和人工智能上,这就如同谷歌的无人驾驶汽车,机器不仅可以对外部信息进行获取和分析,还全权负责所有的行驶活动,让我们得到完全解放。
《人工智能:一种现代方法》中提到,在人工智能中,感知是通过解释传感器的响应而为机器提供它们所处的世界的信息,其中它们与人类共有的感知形态包括视觉、听觉和触觉,而视觉最为重要,因为视觉是一切行动的基础。在一次论坛上百度IDL的余凯院长问大家,你觉得哪种感觉最重要?没有人能很快作答,后来余凯院长换了个提问方式,如果要放弃一种感觉,你最不愿意放弃的是那一种?这时大家都回答是视觉。ChrisFrith在《心智的构建》中提到,我们对世界的感知不是直接的,而是依赖于“无意识推理”,也就是说在我们能感知物体之前,大脑必须依据到达感官的信息来推断这个物体可能是什么,这构成了人类最重要的预判和处理突发时间的能力。而视觉是这个过程中最及时和准确的信息获取渠道,人类感觉信息中的80%都是视觉信息。机器视觉之于人工智能的意义就是视觉之于人类的意义,而决定着机器视觉的就是图像识别技术。
更重要的是,在某些应用场景,机器视觉比人类的生理视觉更具优势,它更加准确、客观和稳定。人类视觉有着天然的局限,我们看起来能立刻且毫无费力的感知世界,而且似乎也能详细生动的感知整个视觉场景,但这只是一个错觉,只有投射到眼球中心的视觉场景的中间部分,我们才能详细而色彩鲜明的看清楚。偏离中间大约10度的位置,神经细胞更加分散并且智能探知光和阴影。也就是说,在我们视觉世界的边缘是无色、模糊的。因此,我们才会存在“变化盲视”,才会在经历着多样事物发生时,仅仅关注其中一样,而忽视了其他样事物的发生,而且不知道它们的发生。而机器在这方面就有着更多的优势,它们能够发现和记录视力所及范围内发生的所有事情。拿应用最广的视频监控来说,传统监控需要有人在电视墙前时刻保持高度警惕,然后再通过自己对视频的判断来得出结论,但这往往会因为人的疲劳、视觉局限和注意力分散等原因影响监控效果。但有了成熟的图像识别技术之后,再加以人工智能的支持,计算机就可以自行对视频进行分析和判断,发现异常情况直接报警,带来了更高的效率和准确度;在反恐领域,借助机器的人脸识别技术也要远远优于人的主观判断。
许多科技巨头也开始了在图像识别和人工智能领域的布局,Facebook签下的人工智能专家YannLeCun最重大的成就就是在图像识别领域,其提出的LeNet为代表的卷积神经网络,在应用到各种不同的图像识别任务时都取得了不错效果,被认为是通用图像识别系统的代表之一;Google借助模拟神经网络“DistBelief”通过对数百万份YouTube视频的学习自行掌握了猫的关键特征,这是机器在没有人帮助的情况下自己读懂了猫的概念。值得一提的是,负责这个项目的AndrewNG已经转投百度领导百度研究院,其一个重要的研究方向就是人工智能和图像识别。这也能看出国内科技公司对图像识别技术以及人工智能技术的重视程度。
图像识别技术,连接着机器和这个一无所知的世界,帮助它越发了解这个世界,并最终代替我们完成更多的任务。
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
opencv关于图像前景提取
在图像处理的过程中,会经常碰到需要提取选定区域的前景,以下就使用grabCut算法进行图像前景的提取(我是用的opencv版本为opencv2.4.3.)。这是我的第一篇博客,有什么不足的地方欢迎大家指导。
关于grabCut算法的原理,我也是参照大牛写的文章,[这里]就是原文地址。(https://blog.csdn.net/zouxy09/article/details/8534954)
在进行图像前景的提取操作之前,我们需要先设置鼠标点击事件,这里我是用的是opencv的鼠标回调事件,首先定义回调函数,代码如下所示:voidonMouse(intevent,intx,inty,intflags,void*param);回调函数定义完成之后需要将我们的回调函数设置在固定窗口之中,这里使用opencv的highgui模块中的setMouseCallback函数,代码如下所示:setMouseCallback(winTitle,onMouse);//设置鼠标回调函数其中winTitle为窗口的名称,onMouse为之前定义的是鼠标回调函数。
将鼠标回调函数设置完毕之后,需要写回调函数中的具体内容了,废话不多说,直接上代码。
voidonMouse(intevent,intx,inty,intflags,void*param){switch(event){caseEVENT_LBUTTONDOWN://鼠标左键按下事件rect.x=x;rect.y=y;rect.width=1;rect.height=1;init=false;numRun=0;break;caseEVENT_MOUSEMOVE://鼠标移动事件if(flags&EVENT_FLAG_LBUTTON){rect=Rect(Point(rect.x,rect.y),Point(x,y));showImage();}break;caseEVENT_LBUTTONUP://鼠标左键放下事件if(rect.width>1&&rect.height>1){setROIMask();//设置矩形区域为可能前景区域showImage();}break;default:break;}}在这个函数中,我仅仅是对鼠标左键进行设置,包括左键按下事件,鼠标移动事件以及左键松开事件。
做完以上步骤之后,可以运行一下,看看是否达到我们要求的效果,我的运行结果如下图所示:
完成了以上步骤之后,就可以设置图片的前景与后景了。在鼠标回调函数中,可以看到我使用了自定义的setROIMask函数,该函数的主要目的是将框选的区域设置为可能的前景,代码如下所示:
voidsetROIMask(){//GC_BGD=0----背景//GC_FGD=1----前景//GC_PR_BGD=2----可能为背景//GC_PR_FGD=3----可能为前景mask.setTo(GC_BGD);//全部设置为背景rect.x=max(0,rect.x);//防止溢出rect.y=max(0,rect.y);rect.width=min(rect.width,src.cols-rect.x);rect.height=min(rect.height,src.rows-rect.y);mask(rect).setTo(Scalar(GC_PR_FGD));//将矩形区域设置为可能的前景}这里有必要对setTo中的参数进行说明,正如上面代码所说,GC_BGD表示设置为背景,GC_FGD表示设置为前景,GC_PR_BGD表示设置为疑似背景GC_PR_FGD表示设置为疑似前景。在鼠标左键松开事件中调用的setROIMask函数,就是将鼠标框选的矩形区域设置为疑似前景部分。
在完成对图像的前后景设置之后,就可以使用grabCut算法进行前景的分割提取了。
grabCut(src,mask,rect,bgModel,fgModel,1);//图割算法以下是使用grabCut算法得到的图片前景,如果觉得效果不太理想,可以进行多次迭代,以达到更好的效果。
关于opencv的图像分割算法到这里就差不多了,好的,哪下面就放上完整代码,以供大家参考并指正。
#include#include#includeusingnamespacecv;usingnamespacestd;intnumRun=0;Rectrect;boolinit=false;Matsrc,image;Matmask,bgModel,fgModel;constchar*winTitle="inputimage";voidonMouse(intevent,intx,inty,intflags,void*param);voidsetROIMask();voidshowImage();voidrunGrabCut();intmain(){src=imread("flower.jpg",1);if(src.empty()){cout计算机图像识别的原理、过程、应用前景
图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展,人类对图像识别技术的认识越来越深刻。图像识别技术的过程分为信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。简单分析了图像识别技术的引入、其技术原理以及模式识别等,之后介绍了神经网络的图像识别技术和非线性降维的图像识别技术及图像识别技术的应用。从中可以总结出图像处理技术的应用广泛,人类的生活将无法离开图像识别技术,研究图像识别技术具有重大意义。
1、图像识别技术的引入
图像识别是人工智能的一个重要领域。图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。图像识别,顾名思义,就是对图像做出各种处理、分析,最终识别我们所要研究的目标。今天所指的图像识别并不仅仅是用人类的肉眼,而是借助计算机技术进行识别。虽然人类的识别能力很强大,但是对于高速发展的社会,人类自身识别能力已经满足不了我们的需求,于是就产生了基于计算机的图像识别技术。这就像人类研究生物细胞,完全靠肉眼观察细胞是不现实的,这样自然就产生了显微镜等用于精确观测的仪器。通常一个领域有固有技术无法解决的需求时,就会产生相应的新技术。图像识别技术也是如此,此技术的产生就是为了让计算机代替人类去处理大量的物理信息,解决人类无法识别或者识别率特别低的信息。
1.1图像识别技术原理
其实,图像识别技术背后的原理并不是很难,只是其要处理的信息比较繁琐。计算机的任何处理技术都不是凭空产生的,它都是学者们从生活实践中得到启发而利用程序将其模拟实现的。计算机的图像识别技术和人类的图像识别在原理上并没有本质的区别,只是机器缺少人类在感觉与视觉差上的影响罢了。人类的图像识别也不单单是凭借整个图像存储在脑海中的记忆来识别的,我们识别图像都是依靠图像所具有的本身特征而先将这些图像分了类,然后通过各个类别所具有的特征将图像识别出来的,只是很多时候我们没有意识到这一点。当看到一张图片时,我们的大脑会迅速感应到是否见过此图片或与其相似的图片。其实在“看到”与“感应到”的中间经历了一个迅速识别过程,这个识别的过程和搜索有些类似。在这个过程中,我们的大脑会根据存储记忆中已经分好的类别进行识别,查看是否有与该图像具有相同或类似特征的存储记忆,从而识别出是否见过该图像。机器的图像识别技术也是如此,通过分类并提取重要特征而排除多余的信息来识别图像。机器所提取出的这些特征有时会非常明显,有时又是很普通,这在很大的程度上影响了机器识别的速率。总之,在计算机的视觉识别中,图像的内容通常是用图像特征进行描述。
1.2模式识别
模式识别是人工智能和信息科学的重要组成部分。模式识别是指对表示事物或现象的不同形式的信息做分析和处理从而得到一个对事物或现象做出描述、辨认和分类等的过程。
计算机的图像识别技术就是模拟人类的图像识别过程。在图像识别的过程中进行模式识别是必不可少的。模式识别原本是人类的一项基本智能。但随着计算机的发展和人工智能的兴起,人类本身的模式识别已经满足不了生活的需要,于是人类就希望用计算机来代替或扩展人类的部分脑力劳动。这样计算机的模式识别就产生了。简单地说,模式识别就是对数据进行分类,它是一门与数学紧密结合的科学,其中所用的思想大部分是概率与统计。模式识别主要分为三种:统计模式识别、句法模式识别、模糊模式识别。
2、图像识别技术的过程
既然计算机的图像识别技术与人类的图像识别原理相同,那它们的过程也是大同小异的。图像识别技术的过程分以下几步:信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。
信息的获取是指通过传感器,将光或声音等信息转化为电信息。也就是获取研究对象的基本信息并通过某种方法将其转变为机器能够认识的信息。
预处理主要是指图像处理中的去噪、平滑、变换等的操作,从而加强图像的重要特征。
特征抽取和选择是指在模式识别中,需要进行特征的抽取和选择。简单的理解就是我们所研究的图像是各式各样的,如果要利用某种方法将它们区分开,就要通过这些图像所具有的本身特征来识别,而获取这些特征的过程就是特征抽取。在特征抽取中所得到的特征也许对此次识别并不都是有用的,这个时候就要提取有用的特征,这就是特征的选择。特征抽取和选择在图像识别过程中是非常关键的技术之一,所以对这一步的理解是图像识别的重点。
分类器设计是指通过训练而得到一种识别规则,通过此识别规则可以得到一种特征分类,使图像识别技术能够得到高识别率。分类决策是指在特征空间中对被识别对象进行分类,从而更好地识别所研究的对象具体属于哪一类。
3、图像识别技术的分析
随着计算机技术的迅速发展和科技的不断进步,图像识别技术已经在众多领域中得到了应用。2015年2月15日新浪科技发布一条新闻:“微软最近公布了一篇关于图像识别的研究论文,在一项图像识别的基准测试中,电脑系统识别能力已经超越了人类。人类在归类数据库ImageNet中的图像识别错误率为5.1%,而微软研究小组的这个深度学习系统可以达到4.94%的错误率。”从这则新闻中我们可以看出图像识别技术在图像识别方面已经有要超越人类的图像识别能力的趋势。这也说明未来图像识别技术有更大的研究意义与潜力。而且,计算机在很多方面确实具有人类所无法超越的优势,也正是因为这样,图像识别技术才能为人类社会带来更多的应用。
3.1神经网络的图像识别技术
神经网络图像识别技术是一种比较新型的图像识别技术,是在传统的图像识别方法和基础上融合神经网络算法的一种图像识别方法。这里的神经网络是指人工神经网络,也就是说这种神经网络并不是动物本身所具有的真正的神经网络,而是人类模仿动物神经网络后人工生成的。在神经网络图像识别技术中,遗传算法与BP网络相融合的神经网络图像识别模型是非常经典的,在很多领域都有它的应用。在图像识别系统中利用神经网络系统,一般会先提取图像的特征,再利用图像所具有的特征映射到神经网络进行图像识别分类。以汽车拍照自动识别技术为例,当汽车通过的时候,汽车自身具有的检测设备会有所感应。此时检测设备就会启用图像采集装置来获取汽车正反面的图像。获取了图像后必须将图像上传到计算机进行保存以便识别。最后车牌定位模块就会提取车牌信息,对车牌上的字符进行识别并显示最终的结果。在对车牌上的字符进行识别的过程中就用到了基于模板匹配算法和基于人工神经网络算法。
3.2非线性降维的图像识别技术
计算机的图像识别技术是一个异常高维的识别技术。不管图像本身的分辨率如何,其产生的数据经常是多维性的,这给计算机的识别带来了非常大的困难。想让计算机具有高效地识别能力,最直接有效的方法就是降维。降维分为线性降维和非线性降维。例如主成分分析(PCA)和线性奇异分析(LDA)等就是常见的线性降维方法,它们的特点是简单、易于理解。但是通过线性降维处理的是整体的数据集合,所求的是整个数据集合的最优低维投影。经过验证,这种线性的降维策略计算复杂度高而且占用相对较多的时间和空间,因此就产生了基于非线性降维的图像识别技术,它是一种极其有效的非线性特征提取方法。此技术可以发现图像的非线性结构而且可以在不破坏其本征结构的基础上对其进行降维,使计算机的图像识别在尽量低的维度上进行,这样就提高了识别速率。例如人脸图像识别系统所需的维数通常很高,其复杂度之高对计算机来说无疑是巨大的“灾难”。由于在高维度空间中人脸图像的不均匀分布,使得人类可以通过非线性降维技术来得到分布紧凑的人脸图像,从而提高人脸识别技术的高效性。
3.3图像识别技术的应用及前景
计算机的图像识别技术在公共安全、生物、工业、农业、交通、医疗等很多领域都有应用。例如交通方面的车牌识别系统;公共安全方面的人脸识别技术、指纹识别技术;农业方面的种子识别技术、食品品质检测技术;医学方面的心电图识别技术等。随着计算机技术的不断发展,图像识别技术也在不断地优化,其算法也在不断地改进。图像是人类获取和交换信息的主要来源,因此与图像相关的图像识别技术必定也是未来的研究重点。以后计算机的图像识别技术很有可能在更多的领域崭露头角,它的应用前景也是不可限量的,人类的生活也将更加离不开图像识别技术。
图像识别技术虽然是刚兴起的技术,但其应用已是相当广泛。并且,图像识别技术也在不断地成长,随着科技的不断进步,人类对图像识别技术的认识也会更加深刻。未来图像识别技术将会更加强大,更加智能地出现在我们的生活中,为人类社会的更多领域带来重大的应用。在21世纪这个信息化的时代,我们无法想象离开了图像识别技术以后我们的生活会变成什么样。图像识别技术是人类现在以及未来生活必不可少的一项技术。
科普:图像识别与机器学习那点事儿
第四个难点是背景复杂。在复杂背景下,找到某一个人带着拐杖,找到一个戴帽子的人难度很大。
第五个难点是遮挡。遮挡是计算机视觉特别关心的一个难点。比如说,这个图片里熙熙攘攘的人中,我们知道这大概是一个女孩:她有棕色的头发,穿着一个短袖衫。我们人的本领很强,这种情况下还能识别出男女。但是计算机现在还做不到这一点。
第六个难点是变形。非钢体在运动的时候会产生变形。同样一匹马在不同的情况下的图像表现会非常不一样。
四、图像识别的发展历史
图像识别刚开始的时候是从单一的物体识别做起。上边这张图像展示的是传统的几何方法的结果。我们的客观世界那么复杂、那么多样,我们该怎么做识别呢?那就先从特别简单的问题做起。这也是我们做科学研究的一般的方法:从简单的问题着手。比如从做积木的识别入手。因为积木有很规范的几种形状。上图是识别出的简单的剃须刀。这些人造的非常规范的几何体的组合,只要识别出长方形、矩形、正方形、三角形等,就会把剃须刀,工具检测和识别得非常好。另外一种方法,是根据外观识别。我不考虑要识别的物体的几何结构,仅仅看它外观长什么样。这里列出的是做人脸检测的例子。
做人脸识别的研究历史相对比较长。大概七几年就开始有这样的研究工作了。直到现在仍然有很多人脸识别的研究工作发表。
另外一个课题就是手写数字识别。手写数字看起来是很简单的事,但是对手写数字识别的研究引发出相当多的研究方法,给我们带来很多的成果,是一个很有意思的课题。此外的课题还有汽车的检测。我这里只是列了这几个。其实同时期还有指纹识别、文字识别OCR等、等。当时有的研究工作已经发展到了产品化的程度,包括OCR和指纹识别。
在2000年之前的图像识别曾经采用过几何的方法、结构的方法、规则的方法,当然也用了一些比较简单的模式识别的方法。
在80年代后期、90年代期间,机器学习领域发生了什么?这个时期的机器学习有了一个飞速的发展,出现了一些了不起的研究成果,包括:支持向量机方法,AdaBoosting方法,计算学习理论等。成果出现。这些都使得机器学习和识别大大的往前走。在2002年后的一段时间里,一个华人女科学家,叫李飞飞,开始用一个新的思路做图像识别。他们希望设计一个统一的框架做图像识别,而不是就事论事地针对一种图像识别任务设计一套专门的方法。他们希望这个统一的框架能识别成千上万种物体。另外,希望机器学习领域的出色成果可以用在图像识别上。她们还借鉴文本分析里的方法-“词袋”(bagofwords)的方法用于图像识别。
什么是“词袋”方法?举一个例子。比如要识别一张人脸,我们不考虑人脸结构那么复杂,我们只要看看里面有没有鼻子、眼睛、嘴巴、下巴。有了这些部件,只要这些部件在一起,就说这是一张人脸。你可能会觉得这很简单。
这个方法来源自对文本的研究。在自然语言处理里面,有一个任务是对文本分类。文本分类中就采用了“词袋”方法。
比如说有这样一篇文章,我们想知道这篇文章是属于哪个类别。它是在讨论军事,还是在讨论科学。那么我们怎么做呢?一种办法是按我们通常会想到的方法,就是把每一句话都读懂,做解析,知道句子的语法结构,然后去理解句子的内容。但是,对句子做做语法分析很难,理解句子很难。我们往往做不好,所以就不采用这种方法。实际上,我们可以用一个简单的方法:我们只要看这篇文章出现过哪些词出现的频率高。这篇文章中的高频词是:视觉、感知、脑、神经,细胞,你会说这篇文章属于神经科学类。还有一篇文章,其中的高频词是:中国、贸易、出口、进口、银行、货币等,你会知道这篇文章属于经济类。这个方法不用分析和解析句子和段落的语法结构,而只要把这些高频词放到一块,叫“bagofwords”。
怎样把这种方法用于图像识别呢?在识别图像的时候,我们也可以把图像中的“高频词”放在一起来识别图像。这里的“词”是什么?直观地说就是小的图像块。比如我们要识别一张人脸,这样的图像上就会有像皮肤一样,或者像眼睛一样的图像块。而相对来说,如果识别自行车,就会出现和车有关的图像块,如:车座、车梁。这些图像块就是“词”。这样就可以采用“词袋”方法。实际上,图像中的词不是我们说的这么直观,而是下方这样的图像小块。它是很底层的图像块,非常小,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的一个学生说,你们这个数据库做得真了不起,花了那么大功夫。他说这是另一个学生做的。其实不是那个学生标的图像,大部分图像都是他妈妈标的,他妈妈退休在家,每天给他标数据,做妈妈的多么了不起。
还有一个华人科学家,也很了不起,叫朱松纯。他说我们应该把图像标得更细。例如这张图片,其中的椅子可以标得非常细,座椅、椅背、腿的轮廓都标得很准确。他们还标了各种各样的椅子。他们雇了几十个美工,一天到晚标数据,干了几年,但是数据库才几十万张图片。所以标数据是一个非常花钱的事。因此做机器学习的人就在考虑,能不能不用那么费心去标数据而把图像识别做得更好一点。比如这张图片,只要你就是告诉我,你这张图片有摩托车,你不用说车在哪儿我也能把车检测和识别出来。
现在还有很多问题没解决。比如说我们现在的技术只是对图像做了一些解析,可以识别出这张图中这个部分鸟、这是树,但是没有对这个图片做更深入的理解。例如:这个算法并不知道这些物体之间的关系是什么。而对于我们理解一张图片来说,理解物体之间的关系非常重要。
在这个方面给大家介绍一下我们做的一个工作,叫imagecaption。这件事好几个单位都在做,微软、百度、Google都在做。给大家看的这些结果是实验室在做的工作。Imagecaption这是一个什么样的工作呢?就是你给我一张图片,你不需要告诉我这儿有一只狗,它叼的是一个什么样的东西。你只需要告诉我一只狗在叼着一个飞碟就够了。我们现在就利用这八万多张图片和对应的自然语言的句子来设计一个模型,并且训练这个模型,使得当你给我一张新的图片的时候,这个算法能生成一个自然语言的句子来描述它。比如这是针对对这张图片生成的句子:火车站旁边的轨道上停了一辆火车。再比如这个图像:一群斑马彼此很紧密地站在一起。还有这张图片:一只狗嘴里叼着飞碟。不仅如此,在做这个时候,还得到了另外一些有意思的结果。这个算法里有一个视觉的注意模型。这个模型可以自动找到关心的图像块。在对这张图像生成的句子Abrowncowisstandinginthegrass时,我们看到brown,cow,grass都对应着正确的图像块。大家注意,我们在训练数据里面并没有告诉算法哪一块是牛,哪一块是草地。这说明,这个算法学习到了这些概念。既然是这样,除此以外,其他的概念是不是也能找对?我们就把其他的一些词所对应的图像块找出来,看一看。比如说这一排是消火栓这个词对应的图像块。这是黑猫这个概念。结果都找对了。比较有意思的是,除了名词以外,程序还找到了动词对应的概念。比如说fillwith(把…填满),你会发现图片全是容器里面盛东西。
这个结果很有意思,非常像小孩在成长过程中学习。我们会教一个一岁多的孩子,告诉他“这是一张桌子”,“这是一个激光笔”。我们不会,也无法说:“一张”是量词,“桌子”是关键词。但是孩子慢慢就能学会这些概念。我们的算法也是这样。
上面列举了我们取得的成果。但是,面前还有很多很多的问题没有解决。比如,我们现在看深度网络很有效,但是它为什么有效?我们还不太明白。除此之外还有其他的模型吗?比如说有一些工程上的问题,那么多数据你能算吗?机器跑得动吗?做机器学习的人非常关心这些问题。
另外,比如说这里有一束花。现在算法可以识别出这是一束花。但是它还不能说出哪里是叶子,哪里是花蕊,哪里是花瓣。我们看起来已经取得了那么多的成果,从某种意义上来说我们也可以把它们做成产品,让他为我们服务,但同时我们看到还有更多的问题没有解决得很好,这就需要我们继续努力。
本文基本上是在讲图像。但是我们看到背后用的很多方法都是机器学习的方法。所以是机器学习人的努力,计算机视觉科学家的努力,大家共同的努力,取得了现在的成果。我们可以用这些成果转化成产品,使我们的生活可以更智能化一点。返回搜狐,查看更多