什么是计算机视觉
人类获取外部信息的80%来自视觉。 在我们获得的所有信息中,视觉信息是最复杂和最丰富的。 经过长期的生理进化过程,我们可以轻松地看到和理解周围的事物,但是计算机处理这些视觉信息非常困难。 直到1970年代,神经科学家马尔将神经心理学的知识与人工智能相结合,提出了具有代际意义的“计算视觉理论”,将计算机视觉标记为一门独立的学科。 因此,与AI的某些学科相比,计算机视觉是一个相对较晚才开始的新学科。 在图像,视频等的识别和分析中,经常使用计算机视觉。 在机器人等应用场景中,通常称为机器视觉。 计算机视觉主要解决了“使机器外观变幻”的问题。 在人类中,两个世界主要通过耳和眼的两种重要感觉来认识世界。 对于多台计算机,计算机语音技术使其清晰可见,而计算机视觉技术使其可见且可见。 计算机视觉研究使用诸如相机之类的视觉传感设备来代替人眼来识别,跟踪和测量物体,并且计算机处理视觉信息以实现对诸如人眼之类的事物的感知和认知。 简而言之,计算机视觉是“看见”的科学,并且可以成为人类的第二双眼睛。
1970年代,麻省理工学院著名的AI实验室由Berthold Horn教授首次开设了“机器视觉”课程。Marr在1977年被命名为“机器视觉”,他首先描述了计算机视觉领域,其中包括计算机视觉和计算神经科学两个子学科,他还将计算机视觉处理描述为三个阶段:第一阶段输入原始图像并提取基本特征,例如角点,边缘,纹理,线条和边界。特征集成为原始图;第二阶段包括输入图像和基础。元图可以还原场景可见部分的深度,轮廓等。这不是对象的真实的三维表示,而是二维的半图像。第三阶段基于输入图像,原始图像和二维半图像恢复并识别三维物体。
2012年,谷歌大脑(Google Brain)通过自己观看视频,认出了一只猫。谷歌大脑有吴恩达领衔创建。2010年,时任斯坦福大学副教授的吴恩达加入谷歌开发团队X实验室(XLab)。2011年,吴恩达建立了谷歌大脑项目,该项目为分布式计算的大规模人工神经网络。吴恩达团队用了16000个GPU芯片,构建了拥有10亿突触的人工大脑,尽管与人脑突触数目的还要差上好几个量级,但这已经是目前最庞大的深度学习神经网络系统了。随后吴恩达被百度给挖走,并在百度创建了百度大脑。
计算机视觉原理是什么?
计算机视觉系统中信息的处理和分析大致可以分成两个阶段:图象处理阶段又称视觉处理中的低水平和中水平阶段;图象分析、理解阶段又称视觉处理中的高水平处理阶段。
在图象处理阶段,计算机对图象信息进行一系列的加工处理,这主要是:
1、校正成象过程中系统引进的光度学和几何学的畸变,抑制和去除成象过程中引进的噪声—统称为图象的恢复。
2、从图象信息如亮度分布信息中提取诸如边沿信息,深度信息图象点沿轴方向的尺度,表面三维倾斜方向信息等反映客观景物特征的信息。
3、根据抽取的特征信息把反映三维客体的各个图象基元,如轮廓、线条、纹理、边缘、边界、物体的各个面等从图象中分离出来,并且建立起各个基元之间的拓朴学上的和几何学上的关系—称之基元的分割和关系的确定。
在图象分析和理解阶段,计算机根据事先存贮在数据库中的预知识模型,识别出各个基元或某些基元组合所代表的客观世界中的某些实体称之为模型匹配以及根据图象中各基元之间的关系在预知识的指导下得出图象所代表的实际景物的含义,得出图象的解释或描述。
必须强调的是,预知识在视觉系统中起着非常重要的作用。在知识前数据库中,存储可能实际遇到的各种物体的知识模型,并存储实际场景中各种物体之间的约束关系。计算机的功能是根据所分析图像中的原语及其相互关系,以预先知识为指导,最后通过匹配,搜索和推理获得图像的描述。知识前时刻为整个过程提供了处理证据和证据。随时将每个步骤的结果与预知识进行比较。有时,该过程的中间结果和最终结果会作为知识的更新和积累被馈送到预知识库。
图像分割研究
图像分割是图像处理与机器视觉的基本问题之一。其要点是:把图像划分成若干互不交迭区域的集合。这些区域要么对当前的任务有意义,要么有助于说明它们与实际物体或物体的某些部分之间的对应关系。图像分割的应用十分广泛,几乎出现在有关图像处理的所有领域,并涉及各种类型的图像。例如,在遥感应中,合成孔径雷达图像中目标的分割;遥感云图中不同云系和背景分布的分割;在交通图像分析中,把车辆目标从背景中分割出来。在这些应用中,分割通常是为了进一步对图像进行分析、识别、压缩编码,分割的准确性直接影响后续任务的有效性。
一般来讲,分割出的区域需同时满足均匀性和连通性的条件。其中均匀性是指在该区域中的所有象素点都满足基于灰度、纹理、彩色等特征的某种相似性准则;连通性是指在该区域内存在任意两点的路径。尽管图像处理和机器视觉界的研究者们为此付出了长期的努力,符合以上两点的通用性分割仍面临着巨大的困难;大部分研究成果都是针对某一类型图像、某一具体应用的分割。可以概括为以下内容。
数据驱动的分割
常见的数据驱动分割包括基于边缘检测的分割、基于区域的分割、边缘与区域相结合的分割等。对于基于边缘检测的分割,其基本思想是先检测图像中的边缘点,再按一定策略连接成轮廓,从而构成分割区域。难点在于边缘检测时抗噪声性能和检测精度的矛盾,若提高检测精度,则噪声产生的伪边缘会导致不合理的轮廓;若提高抗噪声性能,则会产生轮廓漏检和位置偏差。为此,人们提出各种多尺度边缘检测方法,根据实际问题设计多尺度边缘信息的结合方案,以较好地兼顾抗噪声性能和检测精度。
基于区域的分割的基本思想是根据图像数据的特征将图像空间划分成不同的区域。常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征。方法有阈值法、区域生长法、聚类法、松弛法等。
边缘检测能够获得灰度或彩色值的局部变化强度,区域分割能够检测特征的相似性与均匀性。将两者结合起来,通过边缘点的限制,避免区域的过分割;同时通过区域分割补充漏检的边缘,使轮廓更加完整。例如,先进行边缘检测与连接,再比较相邻区域的特征(灰度均值、方差),若相近则合并;对原始图像分别进行边缘检测和区域生长,获得边缘图和区域片段图后,再按一定的准则融合,得到最终分割结果。
模型驱动的分割
常见的模型驱动分割包括基于动态轮廓(Snakes)模型、组合优化模型、目标几何与统计模型。Snakes模型用于描述分割目标的动态轮廓。由于其能量函数采用积分运算,具有较好的抗噪声性,对目标的局部模糊也不敏感,因而适用性很广。但这种分割方法容易收敛到局部最优,因此要求初始轮廓应尽可能靠近真实轮廓。
近年来对通用分割方法的研究倾向于将分割看作一个组合优化问题,并采用一系列优化策略完成图像分割任务。主要思路是在分割定义的约束条件之外,根据具体任务再定义一个优化目标函数,所求分割的解就是该目标函数在约束条件下的全局最优解。以组合优化的观点处理分割问题,主要是利用一个目标函数综合表示分割的各种要求和约束,将分割变为目标函数的优化求解。由于目标函数通常是一个多变量函数,可采用随机优化方法。
基于目标几何与统计模型的分割是将目标分割与识别集成在一起的方法,常称作目标检测或提取。基本思想是将有关目标的几何与统计知识表示成模型,将分割与识别变为匹配或监督分类。常用的模型有模板、特征矢量模型、基于连接的模型等。这种分割方法能够同时完成部分或全部识别任务,具有较高的效率。然而由于成像条件变化,实际图像中的目标往往与模型有一定的区别,需要面对误检与漏检的矛盾,匹配时的搜索步骤也颇为费时。
图像分割的半自动方法
从人工参与程度来看,图像分割可分为人工、半自动、自动等三种类型。其中人工分割完全由操作者利用鼠标勾画出分割区域的轮廓,费时费力,且容易受操作者主观因素的影响,重复性差。自动分割不需人机交互,但适应性差,很难实现对一批图像同时获得满意的分割效果。半自动分割将人机交互与自动分割相结合,能够适应不同的图像和需求,且有效降低计算复杂度。目前半自动分割中人机交互的方式有:勾画目标的大致轮廓,构成自动分割的初始化;根据特定的图像和任务调整算法参数;在分割过程中加入人工交互节等。总之,从实用化的角度看,自动分割仍是长期努力的方向。目前更为现实的是在自动分割前或分割过程中加入人机交互的半自动分割。其发展方向为尽可能少和简便的人机交互。可见,图像分割是图像处理和机器视觉必不可少的重要环节,也是图像理论发展的瓶颈之一。随着计算机速度与容量的快速进展,图像处理与机器视觉实用化系统硕果累累。例如,基于内容的图像检索系统、智能监视系统、视觉引导的智能交通系统、手写体字符/人脸/指纹/虹膜识别系统等。然而有关的理论研究并没有取得突破性进展。
计算机视觉能做什么?
1.图像分类(Image Classification)
图像分类,也可以称为图像识别,顾名思义,就是辨别图像是什么,图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类根据不同分类标准可以划分为很多种子方向。
图像分类包括通用图像分类、细粒度图像分类。通用图像分类例如分出图片中的狗或者猫,如图2-2所示,细粒度图像分类就比如分辨出花的种类。
图像分类已广泛应用于许多领域,包括安全领域中的人脸识别和智能视频分析,交通领域中的交通场景识别,互联网领域中基于内容的图像检索和自动相册分类以及医疗领域中的图像识别。
2.图像分割(Object Segmentation)
图像分割是基于图像检测的,它需要检测到目标物体,然后把物体分割出来。图它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。
下面给出一个具体的分割实例。这个例子不仅可以区分出脑部区域,而且能够用于脑部肿瘤的识别和分割。下图2-3是肿瘤分割过程示意图。
3.风格迁移(Style Transfer)
风格迁移是指将一个领域或者几张图片的风格应用到其他领域或者图片上。比如将抽象派的风格应用到写实派的图片上。如下图2-4所示
4.图像修复((Image Inpainting)
图像修复(Image Inpainting),其目的就是修复图像中缺失的地方,比如可以用于修复一些老的有损坏的黑白照片和影片。或者是为黑白照片着色。还可以修复分辨率低的图像。例如由Google Brain发布的一个名为Pixel Recursive Super Resolution的AI系统,能提高像素乱化处理后的照片分辨率,也就是能够清除马赛克。如图2-5所示。
5. 图像生成(Image Synthesis)
图像生成是根据一张图片生成修改部分区域的图片或者是全新的图片的任务。例如通过单一侧面照片合成正面人脸图像。
熟悉图像识别需要哪些知识储备
ImageNet
在图像识别领域学术界和AI行业的许多同行都在不遗余力地研究同一个概念就是研发出一个无论数据质量如何都能做出更好决策的算法。但李飞飞意识到了这种方式的局限性——如果供算法学习的数据无法反映真实世界,即便是最好的算法也不会有良好的效果。她觉得应该构建一个更好的数据集。在研究中她发现了 WordNet。WordNet 可以给每个单词配一张图片,主要是作为参考,而不是构建计算机视觉数据集。但是李飞飞打算构建一个庞大的数据集,给每个单词配以多个例子。ImageNet 数据集里既包括熊猫、教堂这种实物,也包括“爱”这种抽象概念。李飞飞的第一个想法就是以10美元每小时的价钱雇佣本科生,让他们以人工的方式寻找照片并添加进数据集。但她很快发现,按照这种收集照片的速度,大约需要90年才能完成。李飞飞听说亚马逊的Mechanical Turk 网站,这是一个众包平台,可以雇佣世界各地的人用电脑远程完成一些任务,而且费用也很低廉。使用 Mechanical Turk 服务也面临不少困难,比如,每张照片需要找几个人过目呢?确定一张猫咪的照片可能两个人就够了,但是确定一张哈士奇狗崽的照片可能就需要经过十轮的反复验证。还有如果在网站上雇佣的人想偷懒怎么办?李飞飞的团队最后针对雇佣人员的工作开发了一款统计模型,用以确保数据集只包含正确的照片。数据集最终也花费了两年半的时间完成。包含了 320 万张标记的照片,分为 5247 个种类,划分为 12 个子树,比如“哺乳物”、“机车”和“家具”等。人们惊讶的发现经 ImageNet 训练后的模型可以用作其它识别任务的启动模型。你可以先用 ImageNet 训练模型,然后再针对其它任务调试模型。
在2012年ImageNet 大赛上来自加拿大多伦多大学的 Jeoffrey Hinton, Ilya Sutskever,和 Alex Krizhevsky 提交了一个叫做 Alexnet 的深度卷积神经网络架构,Alexnet 夺得了当年的 ImageNet 冠军,成绩比第二名高出达41%。在短短七年时间内,利用 ImageNet 数据集分类物体的最高准确率从71.8%提升至97.3%,超过了人类的识别水平,有效的证明了数据越大,做出的决策会更好。如下图2-6所示,可看出历年ImageNet比赛的成绩变化趋势。
当年参与ImageNet挑战的编程人员如今几乎遍布技术领域的各个角落,其中不少人成为人工智能研究领域的前沿专家,2010年,ImageNet 挑战赛的首届赢家后来都出任过百度、谷歌和华为的高管。2013年的冠军 Matthew Zeiler 后来创办了 Clarifai,如今已获得4000万美元的风险投资。2014年 ImageNet 大赛由来自牛津大学的两位研究者拔得头筹,他们很快就被谷歌看中,并加入了谷歌刚收购的 DeepMind 实验室。李飞飞曾说过将致力于“AI大众化”,让AI进入所有人的生活。她说,“我们将努力降低AI的使用门槛,让尽可能多的用户、开发者、企业都能享受到AI的便利。”
OpenCV
OpenCV是一个机器视觉库,是CV领域目前全球应用最广、最知名的开源组织之一。OpenCV的创始人Gary Bradski是斯坦福大学Stanford CS项目顾问,联合创立了StanfordAI Robotics (STAIR)课程,并由此催生了PR1和PR2机器人、ROS机器人操作系统、Willow Garage和其他11个公司。也曾创立Industrial Perception、Arraily等业内知名公司。是一名连续创业者。Gary Bradski曾组织了Stanley机器人团队中的视觉团队,帮助其赢得2005年美国穿越沙漠DARPA机器人挑战大赛桂冠。而大赛中所用到的技术,也为后来Google的自动驾驶奠定了重要基础。
OpenCV是使用C++进行编写的、以BSD许可证开放源代码的、跨平台的计算机视觉库。它提供了上百种计算机视觉、机器学习、图像处理等相关算法,新版本的OpenCV支持Tensorflow、Caffe等深度学习框架。OpenCV的底层优化处理得很好,能够支持多核处理,能够利用硬件实现加速。由于该库是以BSD许可证进行开源的,因此可以被免费应用在科学研究与商业应用中。OpenCV在诸多领域得到了广泛的应用,例如物体检测、图像识别、运动跟踪、增强现实(AR)、机器人等场景。OpenCV中的图片以RGB的形式存储,只不过再OpenCV中的颜色通道顺序不是RGB而是BGR。这可以归结为一个历史遗留原因。因为OpenCV库的研发历史比较“悠久”,在那个时代,BGR是数码相机设备的主流表示形式。OpenCV 只是一个算法库,能为我们搭建计算机视觉应用提供“砖头”。我们并不需要完全精通了算法原理之后才去使用 OpenCV,只要了解了“砖头”的功能,就可以动手了。在实践中学习才是最高效的学习方式。
2018年9月份这位世界级CV专家,OpenCV创始人Gary Bradski成了中国创业公司蓝胖子机器人的首席科学家。
OCR
光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。通常,图像信息通过扫描仪、照相机、电子传真软件等设备获取并存储在图像文件中,然后OCR软件读取、分析图像文件并通过字符识别提取出其中的字符串。根据识别场景,可大致将OCR分为识别特定场景的专用OCR和识别多种场景的通用OCR。比如现今方兴未艾的证件识别和车牌识别就是专用OCR的典型实例。通用OCR可以用于更复杂的场景,也具有更大的应用潜力。但由于通用图片的场景不固定,文字布局多样,因此难度更高。
典型的OCR的技术路线如下图所示
在OCR技术中,图像预处理通常是针对图像的成像问题进行修正。输入文本经过扫描仪进入计算机后,由于纸张的厚薄、光洁度和印刷质量都会造成文字畸变,产生断笔、粘连和污点等干扰,所以在进行文字识别之前,要对带有噪声的文字图像进行处理。由于这种处理工作是在文字识别之前,所以被称为预处理。预处理一般包括灰度化、二值化,几何变换(透视、扭曲、旋转等),畸变校正,去除模糊、图像增强和光线校正,行、字切分,平滑,规范化等等。
OCR技术的步骤繁多,涉及的算法复杂。但随着识别算法的不断改进和成熟,文字编码库更加精准,OCR识别的准确率大幅提升,目前OCR文字特征的主流算法,文字识别率几乎能达到95%以上,同时,也有比较成熟的OCR引擎,能够帮助开发人员提高开发效率。