- Python 深度学习
- 吕云翔 刘卓然 关捷雄等编著
- 4291字
- 2025-02-28 02:11:26
1.1 计算机视觉
1.1.1 定义
计算机视觉是使用计算机及相关设备对生物视觉的一种模拟。它的主要任务是通过对采集的图片或视频进行处理以获得相应场景的三维信息。计算机视觉是一门关于如何运用照相机和计算机来获取被拍摄对象的数据与信息的学问。可简单形象地理解为我们给计算机安装上眼睛(照相机)和大脑(算法),让计算机能够感知环境。
1.1.2 基本任务
计算机视觉的基本任务包含图像处理、模式识别、图像识别、景物分析或图像理解等。此外,它还包括空间形状的描述、几何建模及认识过程。实现图像理解是计算机视觉的终极目标。下面为大家展开介绍图像处理、模式识别和图像理解。
● 图像处理技术可以把输入图像转换成具有所希望特性的另一幅图像。例如,通过处理使输出图像有较高的信噪比,或通过增强处理以突出图像细节,便于操作员检验。在计算机视觉研究中经常利用图像处理技术进行预处理和特征抽取。
● 模式识别技术根据抽取图像的统计特性或结构信息,将其分成预定的类别。例如,文字识别或指纹识别。在计算机视觉中模式识别技术常用于对图像中的某些部分(如分割区域)的识别和分类。
● 图像理解技术是对图像内容信息的理解。给定一幅图像,图像理解程序不仅描述图像本身,而且描述和解释图像所代表的景物,以便对图像代表的内容做出决定。在人工智能研究初期常使用景物分析这个术语,以强调二维图像与三维景物之间的区别。图像理解除了需要复杂的图像处理外,还需要具有关于景物成像的物理规律和与景物内容有关的知识。
1.1.3 传统方法
在深度学习算法出现之前,视觉算法大致可分为5个步骤:特征感知、图像预处理、特征提取、特征筛选、推理预测与识别。早期的机器学习中,占优势的统计机器学习群体对特征的重视是不够的。
何为图片特征?通俗来讲是指最能表现图像特点的一组参数,常用特征类型包括颜色、纹理、形状和空间关系。为了让机器尽可能完整且准确地理解图片,需要将包含庞杂信息的图像简化抽象为若干个特征量以便后续计算。在深度学习技术没有出现前,图像特征需要研究人员手动提取,这是一个繁杂且冗长的工作,因为很多时候研究人员并不能确定什么样的特征组合是有效的,而且常常需要研究人员手动设计新的特征。在深度学习技术出现后,问题显著简化了许多,各种各样的特征提取器以人脑视觉系统为理论基础,尝试直接从大量数据中提取出图像特征。
过去的算法主要依赖于特征算子,例如最著名的SIFT算子,即所谓的对尺度旋转保持不变的算子。它被广泛地应用在图像比对,特别是三维重建应用中,有一些成功的应用例子。另一个是HoG算子,它可以提取比较鲁棒的物体边缘,在物体检测中扮演着重要的角色。
另外还包括Textons、Spin image、RIFT和GLOH算子,它们都在深度学习诞生之前或深度学习真正流行起来之前占领视觉算法的主流。
这些特征和一些特定的分类器组合取得了一些成功或半成功的例子,基本达到了商业化的要求:一是20世纪八九十年代的指纹识别算法,在指纹图案上寻找具有特殊几何特征的点,然后把指纹关键点进行比对,以判断是否匹配;二是2001年基于Haar的人脸检测算法,在当时的硬件条件下已经能够达到实时人脸检测,目前所有手机的人脸检测功能,都是基于它的变种;三是基于HoG特征的物体检测,它与所对应的SVM分类器组合成著名的DPM算法(DPM算法在物体检测上超过了所有的算法,取得了比较不错的成绩)。但这种成功案例太少,因为手工设计特征需要大量的经验,需要研究人员对这个领域和数据特别了解,在设计出来特征后还需要大量的调试工作。另一个难点在于,研究人员不仅需要手工设计特征,还要在此基础上有一个比较合适的分类器算法。同时设计特征,然后选择一个分类器,这两者合并达到最优的效果,几乎是不可能完成的任务。
1.1.4 仿生学与深度学习
如果不手动设计特征,不挑选分类器,那有没有别的方案能同时学习特征和分类器?即输入某一个模型时,输入只是图片,输出却是它自己的标签。如输入一位明星头像(如图1.1神经网络示例),模型输出的标签是一个50维的向量(如果要在50个人里识别),其中对应明星的向量是1,其他的向量是0。

图1.1 神经网络示例
这种设定符合人类脑科学的研究成果。1981年诺贝尔生理学或医学奖颁发给了一位神经生物学家David Hubel。他发现了视觉系统信息处理机制,证明大脑的可视皮层是分级的。其贡献主要是他认为人的视觉功能一个是抽象,一个是迭代。抽象是把非常具体的形象元素,即原始光线像素等信息,抽象形成有意义的概念。这些有意义的概念又会往上迭代,变成更加抽象、人可以感知到的抽象概念。
像素是没有抽象意义的,但人脑可以把这些像素连接成边缘(边缘相对像素来说就变成了比较抽象的概念),边缘进而形成球形,球形形成气球,大脑最终就知道看到的是一个气球。
模拟人脑识别人脸(见图1.2),也是抽象迭代的过程。从最开始的像素到第二层的边缘,再到第三层人脸的部分,最后到第四层整张人脸,是一个抽象迭代的过程。

图1.2 人脑与神经网络
再比如认识到图片中的物体是摩托车的过程,人脑只需要几秒就可以处理完毕,但这个过程中经过了大量的神经元抽象迭代。对计算机来说最开始看到的根本也不是摩托车,而是RGB图像三个通道上不同的数字。
特征或者视觉特征,就是把这些数值给综合起来,用统计或非统计的形式把摩托车的部件或者整辆摩托车表现出来。深度学习流行前,大部分设计图像特征就是基于此,即把一个区域内的像素级别信息综合表现出来,利于后面的分类学习。
若要完全模拟人脑,我们也要模拟抽象和递归迭代的过程,把信息从最细琐的像素级别抽象到“种类”的概念,让大脑能够接受。
1.1.5 现代深度学习
计算机视觉里常使用卷积神经网络(CNN),它是一种对人脑比较精准的模拟。人脑在识别图片的过程中,并不是对整张图同时进行识别,而是感知图片中的局部特征,之后将局部特征综合起来再得到整张图的全局信息。卷积神经网络模拟了这一过程,其卷积层通常是堆叠的,低层的卷积层提取图片的局部特征,如角、边缘、线条等,高层卷积从低层的卷积层中提取更复杂的特征,从而实现图片的分类和识别。
在计算机视觉里卷积是两个函数之间的相互关系,把卷积当作一个抽象的过程,将小区域内的信息统计抽象出来。
比如,对于一张爱因斯坦的照片,可以学习n个不同的卷积和函数,然后对这个区域进行统计。也可以用不同的方法统计,比如着重统计中央或着重统计周围,这就导致统计的和函数的种类多种多样,达到可以同时学习多个统计的累积和。
如图1.3所示,如何从输入图像到最后卷积,再到生成响应map。首先用学习好的卷积和对图像进行扫描,然后每一个卷积和会生成一个扫描的响应图,(我们称之为response map或是feature map)。如果有多个卷积和,就有多个feature map,即从一个输入图像(RGB三个通道)可以得到256个通道的feature map,因为有256个卷积和,所以每个卷积和代表一种统计抽象的方式。

图1.3 卷积
在卷积神经网络中,除了卷积层,还有一种叫池化的操作。它在统计上的概念更明确,就是一个对一个小区域内求平均值或者求最大值的统计操作。
带来的结果是,如果之前输入有两个通道或者256通道卷积的响应feature map,每一个feature map都经过一个求最大的一个池化层,会得到一个比原来feature map更小的256的feature map。
在下面这个例子里(见图1.4),池化层对每一个大小为2×2的区域求最大值,然后把最大值赋给生成的feature map的对应位置。如果输入图像的大小是100×100像素的,那输出图像的大小会变成50×50像素,feature map变成原有的一半。同时保留的信息是原有2×2区域里面最大的信息。

图1.4 池化
LeNet网络(Le是人工智能领域先驱LeCun名字的简写)如图1.5所示,它是许多深度学习网络的原型和基础。在之前,人工神经网络层数都相对较少,而LeNet五层网络突破了这一限制。其中LeCun用这一网络进行字母识别,达到了非常好的效果。

图1.5 LeNet网络
LeNet网络输入图像是大小为32×32的灰度图,第一层经过了一组卷积和,生成了6个28×28的feature map,然后经过一个池化层,得到6个14×14的feature map,然后再经过一个卷积层,生成了16个10×10的卷积层,再经过池化层生成16个5×5的feature map。再经过3个全连接层,即可得到最后的输出结果,输出就是标签空间的输出。由于只对0到9进行识别,所以输出空间是10,如果要对10个数字再加上26个大小字母进行识别,输出空间就是62。向量各维度的值代表“图像中元素等于该维度对应标签的概率”,可简单理解为,若该向量第一维度输出为0.6,即表示图像中元素是0的概率是0.6。那么该62维向量中值最大的维度对应的标签即为最后的预测结果。62维向量里,如果某一个维度上的值最大,它对应的字母和数字就是预测结果。
从1998年开始的15年间,深度学习领域在众多专家学者的带领下不断发展壮大。遗憾的是在此过程中,深度学习领域没有产生足以轰动世人的成果,导致深度学习的研究一度被边缘化。到2012年,深度学习算法在部分领域取得不错的成绩,而AlexNet的出现使深度学习算发开始焕发新的生机。
AlexNet由多伦多大学提出,在ImageNet比赛上取得了非常好的成绩。AlexNet识别效果超过了当时所有浅层的方法。经此一役,AlexNet在此后被不断地改进、应用。同时,学术界和工业界也认识到了深度学习的无限可能。
AlexNet是基于LeNet的改进,它可以被看作LeNet的放大版,如图1.6所示。AlexNet的输入是一个大小为224×224的图片,输入图像在经过若干个卷积层和若干个池化层后,最后经过两个全连接层泛化特征,得到最后的预测结果。

图1.6 AlexNet
2015年,特征可视化工具开始盛行。那么,AlexNet的特征是什么样子?其共分为4层:第一层,都是一些填充的块状物和边界等特征;中间层开始学习一些纹理特征;第三层接近分类器的高层,明显可以看到物体形状特征。最后一层是分类层,不同物体的主要特征已经被完全提取出来。
无论对什么物体进行识别,特征提取器提取特征的过程都是渐进的。特征提取器最开始提取到的是物体的边缘特征,继而是物体的各部分信息,然后在更高层级抽象到物体的整体特征。整个卷积神经网络在模拟人的抽象和迭代的过程。
1.1.6 卷积神经网络
卷积神经网络的设计思路非常简洁明了,且很早就被提出。那为什么卷积神经网络时隔20年才占领主流?这一问题与卷积神经网络本身的技术关系不太大,而与其他一些客观因素有关。
首先,如果卷积神经网络的深度太浅,其识别能力往往不如一般的浅层模型,如SVM或者boosting。但如果神经网络深度过大,就需要大量数据进行训练来避免过拟合。而从2006、2007年开始,恰好是互联网开始大量产生图片数据的时期。
其次是运算能力。卷积神经网络对计算机的运算要求比较高,需要大量重复可并行化的计算。在1998年CPU只有单核且运算能力比较低的情况下,不可能进行很深的卷积神经网络训练。随着CPU计算能力的增长,卷积神经网络结合大数据的训练才成为可能。
总而言之,卷积神经网络的兴起与近些年来技术的发展是密切相关的,而这一领域的革新则不断推动了计算机视觉的应用与发展。