+CNN实战AI图像处理,轻松入行计算机视觉
下栽ke呈:
计算机视觉必须有图像处理的帮助,而图像处理倚仗与模式识别的有效运用,而模式识别是人工智能领域的一个重要分支,人工智能与机器学习密不可分。纵观一切关系,发现计算机视觉的应用服务于机器学习。各个环节缺一不可,相辅相成。
计算机视觉( ),用计算机来模拟人的视觉机理获取和处理信息的能力。就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,用电脑处理成为更适合人眼观察或传送给仪器检测的图像。计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。计算机视觉的挑战是要为计算机和机器人开发具有与人类水平相当的视觉能力。机器视觉需要图象信号,纹理和颜色建模,几何处理和推理,以及物体建模。一个有能力的视觉系统应该把所有这些处理都紧密地集成在一起。
图像处理(image ),用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。基本内容图像处理一般指数字图像处理。数字图像是指用数字摄像机、扫描仪等设备经过采样和数字化得到的一个大的二维数组,该数组的元素称为像素,其值为一整数,称为灰度值。图像处理技术的主要内容包括图像压缩,增强和复原,匹配、描述和识别3个部分。常见的处理有图像数字化、图像编码、图像增强、图像复原、图像分割和图像分析等。图像处理一般指数字图像处理。
模式识别( )是指对表征事物或现象的各种形式的(数值的、文字的和逻辑关系的)信息进行处理和分析,以对事物或现象进行描述、辨认、分类和解释的过程,是信息科学和人工智能的重要组成部分。模式识别又常称作模式分类,从处理问题的性质和解决问题的方法等角度,模式识别分为有监督的分类( )和无监督的分类( )两种。模式还可分成抽象的和具体的两种形式。前者如意识、思想、议论等,属于概念识别研究的范畴,是人工智能的另一研究分支。我们所指的模式识别主要是对语音波形、地震波、心电图、脑电图、图片、照片、文字、符号、生物传感器等对象的具体模式进行辨识和分类。模式识别研究主要集中在两方面,一是研究生物体(包括人)是如何感知对象的,属于认识科学的范畴,二是在给定的任务下,如何用计算机实现模式识别的理论和方法。应用计算机对一组事件或过程进行辨识和分类,所识别的事件或过程可以是文字、声音、图像等具体对象,也可以是状态、程度等抽象对象。这些对象与数字形式的信息相区别,称为模式信息。模式识别与统计学、心理学、语言学、计算机科学、生物学、控制论等都有关系。它与人工智能、图像处理的研究有交叉关系。
机器学习( )是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。机器学习在人工智能的研究中具有十分重要的地位。一个不具有学习能力的智能系统难以称得上是一个真正的智能系统,但是以往的智能系统都普遍缺少学习的能力。随着人工智能的深入发展,这些局限性表现得愈加突出。正是在这种情形下,机器学习逐渐成为人工智能研究的核心之一。它的应用已遍及人工智能的各个分支,如专家系统、自动推理、自然语言理解、模式识别、计算机视觉、智能机器人等领域。机器学习的研究是根据生理学、认知科学等对人类学习机理的了解,建立人类学习过程的计算模型或认识模型,发展各种学习理论和学习方法,研究通用的学习算法并进行理论上的分析,建立面向任务的具有特定应用的学习系统。这些研究目标相互影响相互促进。
人类研究计算机的目的,是为了提高社会生产力水平,提高生活质量,把人从单调复杂甚至危险的工作中解救出来。今天的计算机在计算速度上已经远远超过了人,然而在很多方面,特别是在人类智能活动有关的方面例如在视觉功能、听觉功能、嗅觉功能、自然语言理解能力功能等等方面,还不如人。
这种现状无法满足一些应用的要求。例如,我们希望计算机能够及早地发现路上的可疑情况并提醒汽车驾驶员以避免发生事故,我们更希望计算机能帮助我们进行自动驾驶,目前的技术还不足以满足诸如此类应用的要求,还需要更多的人工智能研究成果和系统实现的经验。
什么是人工智能呢?人工智能,是由人类设计并在计算机环境下实现的模拟或再现某些人智能行为的技术。一般认为,人类智能活动可以分为两类:感知行为与思维活动。模拟感知行为的人工智能研究的一些例子包括语音识别、话者识别等与人类的听觉功能有关的“计算机听觉”,物体三维表现的形状知识、距离、速度感知等与人类视觉有关的“计算机视觉”,等等。模拟思维活动的人工智能研究的例子包括符号推理、模糊推理、定理证明等与人类思维有关的“计算机思维”,等等。
从图像处理和模式识别发展起来的计算机视觉研究对象之一是如何利用二维投影图像恢复三维景物世界。计算机视觉使用的理论方法主要是基于几何、概率和运动学计算与三维重构的视觉计算理论,它的基础包括射影几何学、刚体运动力学、概率论与随机过程、图像处理、人工智能等理论。计算机视觉要达到的基本目的有以下几个:
(1) 根据一幅或多幅二维投影图像计算出观察点到目标物体的距离;
(2) 根据一幅或多幅二维投影图像计算出目标物体的运动参数;
(3) 根据一幅或多幅二维投影图像计算出目标物体的表面物理特性;
(4) 根据多幅二维投影图像恢复出更大空间区域的投影图像。
计算机视觉要达到的目的是实现利用计算机对于三维景物世界的理解,即实现人的视觉系统的某些功能。
在计算机视觉领域里,医学图像分析、光学文字识别对模式识别的要求需要提到一定高度。又如模式识别中的预处理和特征抽取环节应用图像处理的技术;图像处理中的图像分析也应用模式识别的技术。在计算机视觉的大多数实际应用当中,计算机被预设为解决特定的任务,然而基于机器学习的方法正日渐普及,一旦机器学习的研究进一步发展,未来“泛用型”的电脑视觉应用或许可以成真。
人工智能所研究的一个主要问题是:如何让系统具备“计划”和“决策能力”?从而使之完成特定的技术动作(例如:移动一个机器人通过某种特定环境)。这一问题便与计算机视觉问题息息相关。在这里,计算机视觉系统作为一个感知器,为决策提供信息。另外一些研究方向包括模式识别和机器学习(这也隶属于人工智能领域,但与计算机视觉有着重要联系),也由此,计算机视觉时常被看作人工智能与计算机科学的一个分支。
机器学习是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演译。
为了达到计算机视觉的目的,有两种技术途径可以考虑。首先是仿生学方法,即从分析人类视觉的过程入手,利用大自然提供给我们的参考系——人类视觉系统,建立起视觉过程的计算模型,然后用计算机系统实现之。第二种是工程方法,即脱离人类视觉系统框框的约束,利用一切可行和实用的技术手段实现视觉功能。此方法的一般做法是,将人类视觉系统作为一个黑盒子对待,实现时只关心对于某种输入,视觉系统将给出何种输出。这两种方法理论上都是可以使用的,但面临的困难是,人类视觉系统对应某种输入的输出到底是什么,这是无法直接测得的。而且由于人的智能活动是一个多功能系统综合作用的结果,即使是得到了一个输入输出对,也很难肯定它是仅由当前的输入视觉刺激所产生的响应,而不是一个与历史状态综合作用的结果。
不难理解,计算机视觉的研究具有双重意义。其一,是为了满足人工智能应用的需要,即用计算机实现人工的视觉系统的需要。这些成果可以安装在计算机和各种机器上,使计算机和机器人能够具有“看”的能力。其二,视觉计算模型的研究结果反过来对于我们进一步认识和研究人类视觉系统本身的机理,甚至人脑的机理,也同样具有相当大的参考意义。
AI产品经理计算机视觉
计算机视觉( )对我来说也算是老朋友了,我最开始接触人工智能就是计算机视觉相关的知识。最近受益于老大每日带我去旁听的算法例会,又加上看了徐立(商汤)的《计算机视觉的完整链条,从成像到早期视觉再到识别理解》,发现很多信息,当时不觉得有什么,现在想想,每一步都是有意义的。
今天,我会根据亲身经理的项目案例和平时所学,从产品实践的角度,谈谈计算机视觉。
一、前言
计算机视觉( )是使用计算机以及相关设备对生物视觉的一种模拟。它主要任务是通过对采集的图片或视频进行处理以获得相应场景的三维信息。
在徐立的分享中,将计算机视觉的完整链条分为了三部分:
成像(image)
早期视觉(early )
识别理解()
本文也将根据徐立对整个链条的三部分分类,分别用实际例子结合谈谈产品在三部分中可以关注的内容。
二、成像(image)
成像就是模拟的相机原理,就是在解决怎样把拍摄照片的质量进行提升的问题。
我们在实际工业运用中,经常发现实际数据和实验室数据相差过大,实验数据的质量远远差于实验室数据。更甚者在最开始训练模型的时候,我们会发现实验室模型在实际场景毫无效用。
经过多次试验测试,我们发现影响图像质量的因素大概有以下几类:
光照影响
过暗或过亮等非正常光照环境,会对模型的效果产生很大干扰。在解决光照影响这个问题上,我想可以通过两种方式:
1)从产品角度控制:
a.在用户可以更换环境的前提下(比如手机自拍等),可语音/界面提示用户目前环境不理想,建议换一个环境。
b.用户不能控制更换环境的情况下(比如人脸识别、车辆识别等摄像头固定的场景),只能通过调试硬件设施弥补这个问题。
夜晚:在工业上我们碰到过曝或者过暗的情况更多都是在晚上,由于摄像头在晚上会自动切换到黑夜场景(从图片上看就是从彩色切换为黑白),因此在晚上强光下(例如车灯照射)图像就会过曝,这样的情况我们可以通过强制设置摄像头环境为白天(图像为彩色)来避免。过暗的情况从节省成本角度看,我们可以在摄像头旁边增加一个光线发散、功率不高的灯来弥补。当然这两个问题也可以通过购买高质量的摄像头解决,但这样做也意味着更高的成本。
白日:白天也会出现光线过亮的情况,这种情况可以考虑用滤光片等等。
2)算法角度控制
用算法将图片进行处理,可以将图片恢复得让人眼看清的程度。徐立在文中举例了这样一张图片:
这张图片从暗到明,经过算法的处理我们可以显而易见地观察到整个图片的内容。这个办法非常灵活,但也对公司的算法提出了更高的要求。我们知道每一次算法的过滤时间是非常重要的,如果在对时间要求非常严格的场景(人脸识别、车辆识别),这样在识别之前还要对图片进行转化,无疑是增加了输出结果的时间。技术实力不那么强的公司可能是需要权衡一下的。
模糊(blur)
模糊也是工业中经常遇到且令人十分头痛的问题。这里我们先将模糊分下类:
运动模糊:人体移动、车辆移动
对焦模糊:摄像头距离等因素构成,类似近视眼,图像中低频存在,高频缺失。所以需要用算法设法补齐高频部分。
低分辨率差值模糊:小图放大等,图像中低频存在,高频缺失。所以需要用算法设法补齐高频部分。
混合模糊:多种模糊类型共同存在
对于模糊产品上能控制的场景比较少,仅针对于第一种运动模糊且产品和用户有交互的情况下才能做到。其他类型的模糊均需要采用算法进行处理。
我们发现大多数模型(包括face++等技术比较前沿公司的模型),也会出现大量正常图像被判为模糊。从算法角度讲这可能不是很理想,但从工业角度讲这是可以被接受的,被误判为模糊图像的正常图像会被过滤掉或者经过算法处理后再识别,这对用户来说不会造成使用上的不适。而且我们也能保证阈值以上的图都是正常图片,对模型训练来说也是有利的。所以,产品需要关注的精确率和召回率在某种特定情况下可以降低要求。
影响图像质量的因素除了光照、模糊还有很多比如噪声、分辨率等等问题,这些问题大多也是从算法和硬件上去优化,值得注意的是我之前提过的,需要考虑到时间和成本的权衡。
三、早期视觉(early )
early 这部分其实我之前没有总的概念,看了徐立的分享,回头来才发现“哦!原来大家当时做的是这个部分的内容”。
early 主要是做哪些工作呢?主要是图像分割、边缘求取、运动和深度的估计。这些内容其实没有直接的结果应用,是一个“中间状态”。
图像分割是指将特定的影像分割成【区域内部属性一致】而【区域间不一致】的技术,是图像处理中最基础和最重要的领域之一。
图像分割方法有很多种,比如灰度阈值分割的方法、边缘检测法和区域跟踪等方法。很多种类的图像或景物都有相对应的分割方式对其分割,但同时有些分割方法也仅限于某些特殊类型的图像分割。
拿边缘检测来说,其目的是找到图像中亮度变化剧烈的像素点构成的集合,表现出来就是轮廓。
徐立提出了early 现目前的两个问题:
结果不精确
需要长时间的知识沉淀才能做到
第一个问题的解决办法是用端到端的方式,第二个问题的解决办法可以依靠数据驱动。
这部分产品介入的比较少吧,平时跟算法同事沟通听见比较偏多的反馈是在图像分割上有一些缺陷。像徐立说的“怎么样用这种中间的结果去得到更好的应用,至今来说觉得这都是一个比较难回答的问题”,因此产品或许可以去考虑早期视觉直接应用的场景。
四、识别理解()
识别理解是需要把一张(输入)图对应到一张(输出)图,或者说一张(输入)图对应到一个中间结果。简单来说就是把一张图对应到一个文字或标签。这其中有两个重要的因素:标签、数据。这两个因素广度和精度越高,针对模型最后的识别效果就越好。
标签
标签的定义其实也就是规则的定义,我在上一篇文章《AI产品经理需要了解的数据标注工作》里有提过,越精确的标签肯定对模型的结果有利,但同时越精确的标签意味着这类标签下的数据量就会越少,产品也需要考虑到这个因素。
还有一些会被主观因素影响的标签定义,比如颜值,每个人对颜值的评价都是不一样的。徐立说在他们的颜值模型里会分为“漂亮”“不漂亮”两个标签,主要是靠社交网站上的评分和明星与大众的区别来标注。其实我以前也跟过颜值的模型,在我的模型里对颜值更加细化了:有好看、普通、丑。除了根据社交网站打分、明星打分这种方式,我的经验是关注数据的场景类型,很多数据被归为一类都是场景相似的。比如如花,我们觉得丑吧?大多数男扮女的装扮也都会被定义为丑。
另外更细的标签细分会有更多的落地可能性,我印象最深的就是以前颜值模型有一个节日运营活动,主题是扮丑,办得越丑的人还会有小礼品,这个活动上线后在友商的用户圈内引起了很高的关注度。当时我接到这个活动的时候思想其实是被颠覆的,因为我最开始认为颜值模型可能存在的场景主要是去识别美的人,比如在直播等平台中去区分主播的颜值,推荐更优质的主播上首页等等后端的应用,没有想过还能反着用。经过这个活动的启发,后来我们也发现颜值模型在娱乐性上可以有更多挖掘的可能性。
这样看来由于我们的模型多了一个标签定义,就多了一种落地的可能性,标签的重要性也就不言而喻了。
数据优化
数据的数量和质量对模型来说举足重轻。最近刚接收到的重磅消息:阿法狗的弟弟阿法元没有任何先验知识的前提下,通过完全的自学,打败了由数据训练出来的阿法狗。我相信以后这个技术肯定会越来越多的应用,说不定以后确实在某些领域不利用海量数据也能完成模型训练。但是就目前而言,在计算机视觉领域,数据的大量性是重中之重的。
我们大家肯定都知道,数据优化可以使模型越来越好。什么类型的功能表现得不好,就要填补那些对应的数据。而除了这个常识外,其实数据优化还可以用来解决我们经常在训练过程中出现的问题:过拟合。
什么是过拟合?
通常来讲是模型把数据学习过深,数据中的细节和噪音也学习进去了,这样就导致模型泛化的性能变差。过拟合的表现是,一个模型(一个假设)在训练集上表现得很好,但是在测试集上表现的确不是很好。
那该如何通过数据限制过拟合呢?
重新清洗数据。数据的噪音太多会影响到模型效果,清洗数据能够把由于这个因素造成的过拟合问题规避
增加训练集的数据量。如果训练集占总数据的比例太少,也会造成过拟合。
当然也能通过算法限制这个问题的,比如正则化方法和法,以后有空我们可以再深入讨论。
五、项目实践 (以车型识别举例)
车辆检测系统下有很多CV相关的应用,比如车型识别、车牌识别、车颜色识别等等。我们从车型识别这一个例子着手,探索项目的具体流程。
项目前期准备
1.数据准备:
车型这个主题说大不大,说小不小。全世界的车辆品牌数目大约三四百个,每个品牌下面又有几十种车系。我们从0开始立项,至少需要把常见的车辆车系都包含。像大众、丰田、奔驰、宝马、奥迪、现代等等热门车辆品牌更是需要拿全数据。每一种车型至少有车头、车尾、车身三种基础数据。
比如奔驰C200:
这三张图片代表了三种数据,不同场景下这三种数据的重要性大为不同。在项目前期假设我们定下来识别车型这个需求主要应用场景是“停车场识别车辆”,那车头这个数据相对而言就更加重要,需要花更多心思收集。为什么呢?我们可以想象,停车场的车辆识别摄像头为了捕捉车牌号,一般会将摄像头正对车辆,摄像头传上来的数据很少会有纯侧面车身的数据甚至车尾数据。我们为了项目更快地应用落地,其他类型数据比较缺少的情况是可以暂时放下后期再做优化的。
在数据准备的过程中,首先需要爬虫从网上爬取数据,再由人工筛选过滤到不可用的数据,将数据统一整合,才能进行下一步工作。
2.文档准备
A)数据标注文档,包括我们项目一共所含多少钟车型、每一种车型分别对应什么样式。数据标注中需要注意的问题,多辆车的图片、角度刁钻的图片是否需要舍弃等等。
B)产品文档,包括落地场景说明、需求说明文档等常规文档。这里拿工业车辆识别需求分析下系统设计:
算法需求描述(识别的种类、范围、速度、准确率、稳定性等等)
摄像头设备硬件需求描述、环境描述、数据传送描述、摄像头配置描述
平台程序设计(车辆识别系统平台前后端设计)
数据关联描述(车辆信息分析统计关联)
如果摄像头在局域网,且有布控功能(识别车辆黑名单的需求)还需要:
下发程序(考虑云端到本地的图像特征下发)
点播程序设计(可以从互联网查看本地摄像头)
项目流程跟踪
1.软硬件端:按照常规的软硬件项目跟踪开发
2.算法:车型识别的流程基本如下:
车型图像上传:通过过摄像头/web上传
图像预处理:包含了上文成像部分中的模糊图像恢复处理(运动模糊有快速算法去模糊:通过已知速度V、位移S,确定图像中任意点的值)
early 中的图像分割(将目标图像从背景图中标识出来,便于图像识别,可以考虑边缘检测方法)、图像二值化(将图像中的像素点的灰度值设置为0或者255,使用轮廓跟踪让目标轮廓更为凸显)
图像特征提取
特征比对
项目测试
摄像头测试
摄像头与点播程序测试
点播程序(可实时查看摄像头的程序)与平台后台程序测试
算法与平台后台测试、备用接口测试
模型识别时间测试
模型识别准确率、召回率测试
服务器稳定性测试
网络带宽限制测试
正反向测试
其他平台、硬件产品常规测试
项目验收
产品按照流程功能逐一验收