深度学习之PyTorch实战计算机视觉(txt+pdf+epub+mobi电子书下载)


发布时间:2020-11-26 16:37:59

点击下载

作者:唐进民

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

深度学习之PyTorch实战计算机视觉

深度学习之PyTorch实战计算机视觉试读:

版权信息书名:深度学习之PyTorch实战计算机视觉作者:唐进民排版:辛萌哒出版社:电子工业出版社出版时间:2018-05-01ISBN:9787121341441本书由电子工业出版社授权北京当当科文电子商务有限公司制作与发行。— · 版权所有 侵权必究 · —内容简介

计算机视觉、自然语言处理和语音识别是目前深度学习领域很热门的三大应用方向,本书旨在帮助零基础或基础较为薄弱的读者入门深度学习,达到能够独立使用深度学习知识处理计算机视觉问题的水平。通过阅读本书,读者将学到人工智能的基础概念及Python编程技能,掌握PyTorch的使用方法,学到深度学习相关的理论知识,比如卷积神经网络、循环神经网络、自动编码器,等等。在掌握深度学习理论和编程技能之后,读者还会学到如何基于PyTorch深度学习框架实战计算机视觉。本书中的大量实例可让读者在循序渐进地学习的同时,不断地获得成就感。

本书面向对深度学习技术感兴趣、但是相关基础知识较为薄弱或者零基础的读者。前 言“人工智能”(Artificial Intelligence,简称AI)一词在很久以前就有了,被大众津津乐道却是近几年的事情,这和机器学习(Machine Learning)、深度学习(Deep Learning)等技术的崛起有着千丝万缕的联系,而这一切又得益于大数据的发展和计算机处理性能的不断提升。

本书将带领读者了解人工智能的相关技术和发展近况,通过一些实例来掌握必备的技能,并能够独立使用相关技术完成对计算机视觉问题的分析和处理。本书各个章节的知识要点如下。

第1章主要介绍人工智能、神经网络和计算机视觉的发展历史,让读者对这一领域有一个全面的认识。

第2章主要介绍在理解和掌握后面章节的内容时需要用到的数学知识,以及在实战操作的过程中进行环境搭建及安装相关软件的方法。本书中数学相关的大部分知识都集中在本章中,其主要目的是让读者先对这个领域的知识产生兴趣,这样才能更好地深入学习和研究。在本章中不会插入大量的数学公式,这样做会让初学者望而却步,在不断消化公式的过程中丧失学习兴趣和动力。通过不断实战来学习,可以累积成就感,这种自顶向下的方式不失为一种更好的学习方法。

第3章主要介绍在学习神经网络的过程中会经常遇到的一些概念和定义。比如后向传播(Back Propagation)、激活函数(Activation Function)、监督学习(Supervised Learning)、无监督学习(Unsupervised Learning),等等,这也是为之后学习深度神经网络做准备。在搭建一个完整的深度神经网络模型时,就需要不断地用到本章的内容了。

第4章主要介绍深度神经网络中的卷积神经网络(Convolutional Neural Network,简称CNN)。首先介绍卷积层、全连接层、池化层等相关内容,之后又列举了目前主流的一些卷积神经网络架构,并对比它们之间的相同点和不同点,以便于掌握不同的卷积神经网络的结构和技术细节。

第5章主要介绍Python编程语言的相关知识,目的是让读者掌握Python语言的语法定义和使用方式,并使用 Python语言进行功能代码的编写;还会介绍在处理计算机视觉问题时需要用到的两个重要的Python包:NumPy和Matplotlib。本章内容丰富,而且Python语言自身就很简单且易上手,读者很快就能掌握Python这门编程语言。

第6章主要介绍如何使用PyTorch深度学习框架。PyTorch非常简单易用,能够根据我们的需求快速搭建出我们想要的深度神经网络模型,这在很大程度上归功于PyTorch基于动态图计算的特性,它与基于静态图计算的深度学习框架相比,有更多的优势,比如PyTorch不仅速度快,还有许多功能强大的包可供调用。本章先介绍PyTorch中常用的包和类的使用方法;然后介绍如何使用PyTorch中的一些自动化方法来提升代码的执行效率和简洁度;最后会通过一个综合实例,使用本章的内容解决一个实际的计算机视觉问题。

第7章一开始就是一个关于计算机视觉问题的实战,介绍了一种非常实用的深度神经网络复用方法,即迁移学习(Transfer Learning)。在掌握迁移学习的原理之后,会基于PyTorch对迁移学习进行实战,并解决比之前更复杂的计算机视觉问题。对实战代码的解析会贯穿本章,让读者更深刻地理解代码。

第8章讲解如何基于PyTorch实战图像风格迁移(Neural Style)。通过对本章的学习,读者会发现,利用卷积神经网络不仅能处理图片分类问题,只要有想法和创意,还能做更多、更有趣的事情。

第9章介绍一种多模型融合方法,在现有的模型遭遇性能提升瓶颈时,可通过搭建一种经过科学融合的新模型达到超过预期的泛化能力。本章依然会基于PyTorch对多模型融合方法进行实战。

第10章介绍一种区别于卷积神经网络的新神经网络结构,即循环神经网络(Recurrent Neural Network,简称 RNN)。不同于卷积神经网络强大的图像特征提取能力,循环神经网络主要用于处理有序输入的数据。为了方便读者理解模型如何对有序数据进行处理,本章会基于PyTorch使用循环神经网络来处理一个计算机视觉问题。

第11章讲解自动编码器,它是一种使用非监督学习方法的神经网络。自编码器能够实现很多功能,本章会选取一个图像去噪问题来进行自动编码器实战。

本书前6章的内容可作为后5章的铺垫,前6章的知识偏向基础和理论,不过,只有掌握了这些内容,才能从容应对后5章的实战。这个循序渐进的过程会让读者对知识的理解更深刻,技能提升更迅速。

人工智能在近几年大热,网络上的相关资料良莠不齐且没有体系,即使有优秀的干货,对于基础薄弱的初学者来说起点也太高。本书也是出于对这一现状的考虑,通过从基础到实战、由浅入深的过程,让读者基于PyTorch来使用深度学习方法实际解决一些计算机视觉相关的问题,这样,读者在获取知识的过程中会更有成就感,学起来也会更积极、主动。

感谢家人的鼓励和支持,也感谢张国霞编辑的帮助和付出,笔者才能以更好的方式将这部作品呈现在读者的面前。希望读者能遵从敏捷学习的思路,多实战、多思考并不断进步。在本书中会有很多实例,读者可以举一反三、不断实践,在发现问题时要多思考,毕竟本书涉及的内容有限,若想让自己的能力得到更高层次的提升,则需要获取更多的资料来充实自己。唐进民2018年5月

轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。

◎提交勘误:您对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。

◎交流互动:在页面下方读者评论处留下您的疑问或观点,与我们和其他读者一同学习交流。 页面入口:http://www.broadview.com.cn/34144第1章浅谈人工智能、神经网络和计算机视觉

目前,关于人工智能,有不少值得我们期待的新技术涌现,比如自动驾驶、智能图像识别、智能医疗、智能金融等,这些技术正不断被应用到真实的场景中,而且真实的场景还在不断丰富,这势必在无形之中改变各行各业的现状。本章将对人工智能及其相关知识进行简单介绍,带领读者对人工智能及其相关知识进行初步了解。1.1 人工还是智能

人工智能可以细分为强人工智能和弱人工智能,弱人工智能更注重“人工”的重要性,强人工智能更注重“智能”的重要性。

通俗地讲,在弱人工智能机器对某个问题进行决策时,人仍然需要积极参与其中,所以弱人工智能也被称作限制领域的人工智能或应用型人工智能。弱人工智能只能在特定的领域解决特定的问题,而且其中的一些问题已经有了明确的答案,比如作为人的智能助手,在某方面代替人的日常重复劳动。弱人工智能技术已经在某些特定领域落地,并对互联网、金融、制造业、医疗等各个领域产生了不小的冲击,而且会持续下去。

而我们在使用强人工智能机器对问题进行决策时,就不再需要人参与其中,因为强人工智能机器能够“思考”,进而不断优化和拓展自己解决问题的能力,甚至能够创造出全新的技能,所以强人工智能也被称作通用人工智能或完全人工智能,即已经具备了能够完全替代人在各领域工作的能力。

人工智能的舞台是巨大的,改变世界的机会无处不在,相信通过我们的不断努力,人工智能技术会发展得更好,应用场景会更丰富,人们的生活、工作方式也将因此发生翻天覆地的变化。1.2 人工智能的三起两落

人工智能技术发展至今,已经是第3次受到公众的高度关注了,这得益于计算机和大数据的发展,更重要的是人们看到了能够真正落地应用的产品。下面让我们回顾一下人工智能三起两落的历史。1.2.1 两起两落

1956年夏季,John McCarthy、Marvin Minsky、Claude Shannon等人在美国举办的达特茅斯会议(Dartmouth Conference)上首次提出了“人工智能”的概念。这是人类历史上第1个有真正意义的关于人工智能的研讨会,也是人工智能学科诞生的标志,具有十分重要的意义。人工智能概念一经提出,便收获了空前的反响,人工智能历史上的第1股浪潮就这样顺理成章地形成了,该浪潮随即席卷全球。当时,普通大众和研究人工智能的科学家都极为乐观,相信人工智能技术在几年内必将取得重大突破和快速进展,甚至预言在20年内智能机器能完全取代人在各个领域的工作。这种乐观情绪持续高涨,直到1973年《莱特希尔报告》的出现将其终结,该报告用翔实的数据明确指出人工智能的任何部分都没有达到科学家一开始承诺达到的影响力水平,至此人工智能泡沫被无情地戳破,在人们幡然醒悟的同时,人工智能历史上的第1个寒冬到来,人们对人工智能的热情逐渐消退,社会各界的关注度和资金投入也逐年减少。

20世纪80年代,专家系统(Expert System)出现又让企业家和科学家看到了人工智能学科的新希望,继而形成人工智能历史上的第2股浪潮。专家系统是指解决特定领域问题的能力已达到该领域的专家能力水平,其核心是通过运用专家多年积累的丰富经验和专业知识,不断模拟专家解决问题的思维,处理只有专家才能处理的问题。专家系统的出现实现了人工智能学科从理论走向专业知识领域的应用,各种应用场景不断丰富,在人工智能历史上是一次重大突破和转折,具有深远的意义。真正意义上的计算机视觉、机器人、自然语言处理、语音识别等专业领域也诞生于这个阶段。但是随着时间的推移,专家系统的缺点也暴露无遗,最为致命的就是专家系统的应用领域相对狭窄,在很多方面缺乏常识性知识和专业理论的支撑,这直接将第2股人工智能浪潮推向了寒冬。

20世纪90年代后期,机器学习(Machine Learning)、深度学习(Deep Learning)等技术成为人工智能的主流,再加上大数据和计算机硬件的快速发展,使人工智能再次卷土重来,这一次,以语音识别、计算机视觉、自然语言处理为代表的专业领域均取得了巨大突破和进展。1.2.2 卷土重来

第3股人工智能浪潮的兴起与机器学习、深度学习技术被广泛应用和研究有着千丝万缕的联系。但是深度学习和机器学习不是什么新兴技术,并且深度学习还是机器学习的一个分支,人工智能、机器学习和深度学习之间的包含关系如图1-1所示。图1-1

机器学习也被称为统计学习方法,顾名思义,机器学习中的大部分学习算法都是基于统计学原理的,所以机器学习和深度学习技术具备一个共同的特点:它们都需要使用尽可能多的数据来完成对自身模型的训练,这样才能让最终输出的模型拥有强大的泛化能力。

因为本书涉及的是计算机视觉相关的内容,所以我们重点看看计算机视觉领域因为第3股人工智能浪潮的冲击又发生了哪些变化。计算机视觉是人工智能学科中最能体现智能成分的技术,如果计算机视觉问题得到了完美解决,就可以说人类在人工智能领域又迈进了一大步。当前在计算机视觉领域应用得最好的技术是深度学习方法,也可以说深度学习之所以有如此大的影响力,和它在计算机视觉领域取得的突出成绩是分不开的,所以计算机视觉和深度学习成就了彼此。

使用深度学习方法处理计算机视觉问题的过程类似于人类的学习过程:我们搭建的深度学习模型通过对现有图片的不断学习总结出各类图片的特征,最后输出一个理想的模型,该模型能够准确预测新图片所属的类别。图1-2展示了两个不同的学习过程,上半部分是通过使用深度学习模型解决图片分类问题,下半部分是人通过学习总结的方式解决物体识别分类问题,它们之间的工作机理非常相似,这也让深度学习技术拥有了更浓郁的智能色彩。图1-2

在使用深度学习方法解决计算机视觉问题的过程中,用得最多的网络架构是一种叫作卷积神经网络(Convolutional Neural Network)的模型。卷积神经网络是人工神经网络的变化和升级,是科学家通过模拟人类大脑的工作原理而发明的。人们发现人工神经网络模型能够很好地提取输入图像中的重要特征,而卷积神经网络在图像特征提取方面具有更明显的优势。就拿近几年举办的专业图像识别大赛来说,取得优异成绩的参赛队伍基本上都使用了卷积神经网络模型,这也证明了深度学习方法在图像识别、图像处理、图像特征的提取上要比目前的一些主流的传统机器学习方法效果更好。

人工智能技术是未来各行各业的生产力,国外的 Google、Facebook、Microsoft 等,以及国内的百度、腾讯和阿里巴巴等,都在大量招揽人工智能方向的人才,许多国家也已经将人工智能技术的发展提升到国家战略高度,人工智能相关技术领域的薪酬也是水涨船高,大家都在为通过人工智能学科改变相关领域和行业时刻准备着。1.3 神经网络简史

神经网络的概念来自生物学科,人脑中错综复杂的生物神经网络承担着对人自身庞大的生物信息的处理工作。之后出现的人工神经网络其实是科学家根据人脑中生物神经网络的工作原理而抽象出的一种可以用数学进行定义的模型,但这个抽象的过程仅限于认知领域,因为在实际情况下生物神经网络的工作机理会比用数学定义的人工神经网络的表达式复杂许多。即便如此,人工神经网络在处理问题时效果却非常出众。如图1-3所示是我们对机械脑和人脑的一个臆想。图1-31.3.1 生物神经网络和人工神经网络

构成生物神经网络系统和功能的基本单位是生物神经细胞,也叫作生物神经元,一个生物神经元由细胞核、树突、轴突、突出等组织构成,而一个完整的生物神经网络系统由成千上万个生物神经元构造而成。如图1-4所示就是一个生物神经元的简单图例。图1-4

在图1-4中左边类似于树枝的是树突,树突是神经元的信息输入端,一个神经元通过树突就可以接收来自外部神经元的信息传入;图中中间的长条是轴突,轴突是神经元的信息输出端,神经元通过轴突可以把神经元中已处理完成的信息传递到突触;图中右边同样类似于树枝但是带有小圆点的是突触,突触是本神经元和外部神经元之间的连接接口。大量的神经元通过树突和突触互相连接,最后构造出一个复杂的神经网络。生物神经元的信息处理流程简单来说是先通过本神经元的树突接收外部神经元传入本神经元的信息,这个信息会根据神经元内定义的激活阈值选择是否激活信息,如果输入的信息最终被神经元激活,那么会通过本神经元的轴突将信息输送到突触,最后通过突触传递至与本神经元连接的其他神经元。1.3.2 M-P模型

在知道生物神经元的工作机理后,我们来看一个经典的人工神经元模型。人工神经元的基础模型是由W.S.McCulloch和W.Pitts这两位科学家于1943年根据生物神经元的生物特性和运行机理发明的,这个经典的模型被命名为M-P模型,M和P分别是这两位科学家的名字的首字母。如图1-5所示是一个M-P模型的结构示意图。图1-51n

在图1-5中从左向右看,首先是一列从x到x的参数,我们可以1n将从x到x看作类似于生物神经元中的树突接收到的来自外部神经元的信息,不过还需要对这些输入的信息进行相应的处理,处理方法是1j对信息中的每个参数乘上一个对应的权重值,权重值的范围是从wnj到w;图中的圆圈等价于在生物神经元中判断是否对输入的信息进行激活、输出的部分,M-P模型在判断输入的信息能否被激活及输出前会对输入的信息使用∑来完成求和处理,∑就是数学中的累加函数,然后将求和的结果传送给函数f,函数f是一个定义了目标阈值的激活函数,这个激活函数只有在满足目标阈值时才能将信息激活及输j出;O类似于生物神经元中的轴突,用于承载输出的信息。

M-P模型的数学表达式如下:

为了更直观地理解M-P模型,我们通过一个简单的实例进行说明。1212假设某个神经元只有两个信息输入,分别是x和x,其中x=5,x=2,1212x和x对应的权重值分别是w=0.5,w=2,并且定义激活函数的阈值1122为θ=5,且激活函数f的激活条件为:x×w+x×w-θ的计算结果在大于等于0时输出1,在小于0时输出0。通过计算,我们可以得到最后j的输出结果O为1。如果激活条件保持不变,则重新定义激活函数的阈值为θ=7,那么最终得到的输出结果就变成0了。

除了以上M-P模型的常规用法,我们还可以使用M-P模型轻易地构造出逻辑与门、逻辑或门和逻辑非门。首先看看如何构造逻辑与门,0120为了使效果更明显,我们设定三个输入参数x、x和x,其中x=1。12

逻辑与门的M-P模型的输入输出规则如下:当输入x=0且x=0时,121输出的结果为0;当输入x=0且x=1时,输出的结果为0;当输入x=1212且x=0时,输出的结果为0;当输入x=1且x=1时,输出的结果为1。逻辑与门的M-P模型结构如图1-6所示。图1-601

为了实现逻辑与门的功能,我们需要对模型中的权重w、w、2012w的值和激活函数f进行定义。设定w=-8、w=5、w=5,激活函数f01122的激活条件为:1×w+x×w+x×w的计算结果在小于0时输出0,在大于等于0时输出1,这样就构造出了一个逻辑与门。值得注意的是,我们当前使用的权重值和激活函数激活条件的组合并不是逻辑与门的唯一定义方式,使用不同的参数组合也能达到相同的效果。

然后,我们看看如何构造逻辑或门。逻辑或门的M-P模型的输入12输出规则如下:当输入为x=0且x=0时,输出的结果为0;当输入为1212x=0且x=1时,输出的结果为1;当输入为x=1且x=0时,输出的结12果为1;当输入为x=1且x=1时,输出的结果为1。逻辑或门的M-P模型结构如图1-7所示。图1-7

同样,为了实现逻辑或门的功能,我们需要对模型中的权重012012w、w、w的值和激活函数f进行定义。设定w=-5、w=8、w=8,01122激活函数f的激活条件为:1×w+x×w+x×w的计算结果在小于0时输出0,在大于等于0时输出1,这样就构造出了一个逻辑或门。我们发现激活函数的激活条件和之前的逻辑与门的激活条件一样,这里我们重点改变了模型的权重值。同样,搭建逻辑或门使用的权重值和激活函数激活条件的组合也不是唯一的。

最后,我们看看如何构造逻辑非门。在逻辑非门中输入的参数只010需有两个,分别是x和x,其中x=1。逻辑非门的 M-P模型的输入输11出规则如下:当输入为x=0时,输出的结果为1;当输入为x= 1时,输出的结果为0。逻辑非门的M-P模型结构如图1-8所示。图1-8

为了实现逻辑非门的功能,在模型中定义的参数变成了权重0101w、w的值和激活函数f。我们设定w=10、w=-20,激活函数f的激011活条件为:1×w+x×w的计算结果在小于0时输出0,在大于等于0时输出1,这样就构造了一个逻辑非门。搭建逻辑非门使用的权重值和激活函数激活条件的组合仍然不是唯一的。

通过对逻辑与门、逻辑或门和逻辑非门进行任意组合,我们可以构造更复杂的神经网络结构,所以M-P模型具备非常实用的特性,当然,它仍有不足之处。1.3.3 感知机的诞生

1957年,科学家Frank Rosenblatt提出了一种具有单层计算单元的神经网络模型,这种模型也叫作感知机(Perceptron),它在结构上和M-P模型极为相似,不同之处是感知机被使用的初衷是解决数据的分类问题,因为感知机本身就是一种能够进行二分类的线性模型。那么什么样的模型可被称作二分类线性模型呢?下面让我们通过图1-9来直观地感受一下。图1-9

在图1-9中用到的数据都是二维的,一条直线将数据一分为二,这条直线就是一个二分类线性模型。在三维空间中同样可以对数据进行二分类,只不过在三维空间中划分数据的不是一条直线,而是一个平面。所以,只要被处理的数据线性可分,就能使用感知机模型不断地进行模型训练和参数优化,最后得到一个能够对数据进行二分类的模型。如果我们处理的数据是线性不可分的,在进行模型训练的过程中就会出现模型一直来回震荡的情况,也就得不到理想的结果了。感知机的数学表达式如下:

其中,参数x为输入向量,w为输入向量对应的权重值,b为偏置,w·x是输入向量x和权重向量w的点积表示。sign为符号函数,符号函数的定义如下:

也就是说,当符号函数的输入值大于0时输出正1,当符号函数的输入值小于0时输出负1。然后,我们使用w·x+b来代替以上公式中的x,得到如下新的公式:

这样就更直观了。如果输入向量x是我们要进行分类的数据,那么输出结果值负1和正1就可以被看作数据经过模型计算后输出的对应标签,这样我们就将输入向量x划分成两类了。如果处于二维空间中,那么w·x+b=0对应的就是对输入数据进行二分类的那条直线,在感知机中我们也把这条直线叫作分割超平面(Separating Hyperplane)。不过感知机也存在极为明显的优缺点,优点是很容易处理线性可分问题,缺点是不能处理异或问题,也就是说不能处理非线性问题。所以,之后出现了能够处理非线性问题的多层感知机模型,如图1-10所示就是一个多层感知机模型的结构图。图1-10

多层感知机和单层感知机的最大区别是多层感知机在它的输入层(Input Layer)和输出层(Output Layer)之间加入了新的网络层次,这个新的网络层次叫作隐藏层(Hidden Layer),我们能够自定义隐藏层的层次数量,层数通常会是一层或者多层。同时,多层感知机具备了一种后向传播能力,我们可以暂时将后向传播理解为多层感知机模型进行自我学习和优化的一种方法。1.3.4 你好,深度学习

多层感知机的出现使神经网络模型在解决问题的能力上得到很大的提升,而且通过累加多层感知机的网络层次,模型有了能够解决现实世界的复杂问题的能力。因此,难免有人误以为只需对网络层次进行机械性累加,就可以得到一个有强泛化能力的多层感知机模型,最后得到的模型效果却差强人意,还引发了新的问题。模型的深度是一把双刃剑,随着模型深度的不断增加,模型本身会面临许多新的问题,最典型的就是通过机械性累加得到的深层次神经网络模型在进行后向传播的过程中会出现梯度消失的问题,梯度消失就意味着我们搭建的神经网络模型已经丧失了自我学习和优化的能力,所以在搭建神经网络模型时并不是网络的层次越深效果就越好。对于深层次神经网络模型,我们必须有特别的优化和控制手段。

对于在深层次神经网络模型训练中出现的梯度消失问题,科学家一直在探索解决方法,在2006年,由Geoffrey E.Hinton提出了一种有效的解决方案,就是通过无监督预训练对权值进行初始化和有监督训练微调模型,这也是本书着重使用的深度学习(Deep Learning)方法。不过随着历史的发展,深度学习方法中的有监督训练微调模型更受到人们的青睐,这种方法利用现有的样本数据,通过科学的方法不断微调模型参数,使模型的预测结果和真实结果之间的误差值不断减小。

在深度学习方法被提出后,科学家们通过不断改进和创新,开发出了基于深度学习方法的众多全新模型,这些模型在解决相关领域的问题的效果上比传统的机器学习方法要好出不少。1.4 计算机视觉

视觉对于生物而言有着非常特殊的意义,远古时代的生物是没有视觉器官的,视觉器官的出现归功于生物长达数万年的进化过程。生物在拥有了视觉器官后也就拥有了一个强有力的图像信息捕获“工具”,通过这个“工具”完成对现实世界的图像分析和处理,这又促进了生物视觉和生物的其他能力的不断进化,所以视觉在某种程度上促进了生物的进化。

再来看看人类的视觉器官眼睛,眼睛是人类获取外部图像信息的重要渠道,通过眼睛和大脑的联动,我们能快速完成对物体的识别、定位等一系列复杂操作。在这个过程中眼睛的主要工作是帮助人类对外界的特定信息进行收集,然后将这些信息全部传递给大脑,并经过大脑的分析和处理,让相应的器官和肢体完成指定的动作。优秀的运动员要完成高难度的肢体动作,就需要不断对这个过程进行反复训练,以形成特定视觉下的肌肉记忆。人类通过视觉获得了了解世界的更好途径,视觉在人类不断探索世界的道路上是一个不可或缺的助推器。

那么,视觉对于机器而言又承载着什么特殊使命呢?其实在计算机被发明之初并没有计算机视觉的概念,我们知道,科学家们发明计算机的初衷是为了得到一个能够进行高精度、低耗时计算的工具,这个工具用于辅助人类更好地工作。在多年之后出现的计算机视觉概念其实和人工智能的发展密不可分,因为机器能否对视觉信息进行收集、处理和分析,是机器智能的一个重要体现途径,所以让机器拥有人类一样的视觉能力就是计算机视觉诞生的初衷。

传统的计算机视觉大致分为信息的收集、信息的分析和信息的处理三部分内容。

计算机获取外部信息主要通过硬件设备来完成,这些硬件设备可以是一些可以实时捕获高清信息的摄像头,当然,计算机还有其他渠道可以获取图像信息,比如将已经存在的视频或者图片作为图像信息提供给计算机进行处理和分析,这与人类进行信息收集的渠道相比是一个重大区别。

即便有了强大的硬件来捕获图像信息或者已经拥有海量的历史图像数据,但是没有进行图像信息的分析和处理的手段,则要想得到一个智能模型,是不切实际的。承担图像信息分析和处理这个艰巨任务的就是计算机视觉的核心算法,目前进行图像信息分析和处理的核心算法都采用了深度学习方法,通过这些核心算法能够处理很多计算机视觉上的问题,比如图片分类、对图像中目标的定位和语义分割,等等,所以在本书中深度学习方法就是在计算机视觉问题中负责对图像进行信息分析和处理的“大脑”。1.5 深度学习+

当深度学习方法开始融入对计算机视觉问题的分析和处理中时,传统的机器学习方法就逐渐被深度学习方法取代了。下面让我们大致了解一下哪些领域正在使用深度学习方法解决计算机视觉问题。1.5.1 图片分类

图片分类具体指的是通过使用深度学习方法让计算机能够对输入图片的信息进行分析、处理并判定图片所属的类别。假设我们需要处理一个图片的二分类问题,现在有大量的苹果和梨的图片,其中一部分图片有类型标注,而另一部分没有,我们要完成的任务就是对没有类型标注的图片打上图片内容真实对应的类别标签,来完成对这部分图片的类型划分。其解决的思路就是将已经有标注的图片输入我们搭建好的计算机视觉模型中进行训练,然后使用训练好的模型对没有类型标注的图片进行类别预测,只要我们的预测结果足够准确,就解决了一个典型的图片二分类问题。当然,这个思路同样可以用于解决图片多分类问题。1.5.2 图像的目标识别和语义分割

图像的目标识别(Object Recognition)和语义分割(Semantic Segmentation)可以说是图片分类的升级版本。图片的分类是指通过使用已经训练好的模型识别出输入图片的特征,然后才能将这些图片归属到具体的类别中。但是,在我们实际获取到的某张图片中不仅仅有一种类别的物品,有时我们还需要对一张图片中的多个物体进行分类和识别,这时就要用到目标识别和语义分割相关的算法了。

同样,在进行图像目标识别和语义分割前,我们首先需要通过训练让我们搭建的模型知道每个类别的重要特征,当在输入图像的信息中包含了我们的模型已经知道的类别特征时,就能很快将图像中的目标全部识别出来。而图像的目标识别和语义分割有一个很大的区别,就是它们对在图像中识别出的目标在结果呈现上有所不同:目标识别会对识别出的类别对象用长方形进行框选并在框上打上标签名,如图 1-11(a)所示;语义分割则会对识别出的类别使用同一种像素进行标识并打上标签,如图1-11(b)所示。图 1-11(a)图 1-11(b)1.5.3 自动驾驶

目前,主流的自动驾驶技术也用到了计算机视觉相关的技术,在自动驾驶的汽车上会安置大量的高清摄像头和传感器,这些硬件设备会收集汽车附近的图像信息并将其输入汽车“大脑”中进行处理、分析,从而判断出汽车附近的实时路面情况。所以计算机视觉在自动驾驶中有着举足轻重的作用,而且自动驾驶对所分析路面状况的安全性和可靠性的要求非常高,因此自动驾驶中的计算机视觉技术比其在其他领域的应用要求更严苛,不能有半点马虎。1.5.4 图像风格迁移

除了图像目标识别和语义分割这类主要用于图像识别和分类问题的计算机视觉应用,人们还发现了一些比较有意思的应用场景,比如图像风格迁移(Neural Style)。我们知道,深度学习方法能够提取图像的重要特征,所以我们可以将提取的这些特征迁移到其他图片中进行融合,到达图像风格迁移的目的,这样,混合了其他图片风格的新图片就诞生了。如图1-12所示就是一个典型的图像风格迁移的应用。图1-12第2章相关的数学知识

在学习深度学习相关的内容之前,我们还需要掌握一些数学知识。本章将介绍一些基础的数学知识,比如如何在线性代数中进行矩阵运算,以及如何在微积分中对函数求导等。2.1 矩阵运算入门

矩阵是线性代数中非常核心的内容,其优势就是能够进行大规模的并行计算,所以将矩阵的计算方式引入计算机中能够很大程度地提升计算机的计算效率。在深度学习方法中有很多的地方会涉及矩阵计算,所以掌握矩阵相关的计算方法和原理对我们理解深度学习的算法流程会有很大的帮助。

受限于篇幅,本章重点介绍在深度学习中涉及的矩阵相关的内容,以便于读者快速理解和上手。2.1.1 标量、向量、矩阵和张量

在线性代数中,我们必须掌握几个核心概念:标量、向量、矩阵和张量,它们是构成线性代数学科的基石。(1)标量(Scalar):标量其实就是一个独立存在的数,比如在线性代数中一个实数5就可以被看作一个标量,所以标量的运算相对简单,与我们平常做的数字算术运算类似。(2)向量(Vector):向量指一列按顺序排列的元素,我们通常习惯用括号将这一列元素括起来,其中的每个元素都由一个索引值来1唯一地确定其在向量中的位置,假设这个向量中的第1个元素是x,2它的索引值就是1,第2个元素是x,它的索引值就是2,以此类推。如下所示就是一个由三个元素组成的向量,这个向量的索引值从1到133分别对应了从x到x的这三个元素:

向量还有一个特性:向量中的不同数字还可以用于表示不同坐标轴上的坐标值。比如,我们可以把下面这个向量看作三个不同的坐标轴上的坐标值,可以假设2是x轴上的坐标值,3是y轴上的坐标值,8是z轴上的坐标值:(3)矩阵(Matrix):矩阵就是一个二维数组结构,我们会用括号将其中的全部元素括起来。向量的索引值是一维的,而矩阵的索引值是二维的,所以在确定矩阵中每个元素的位置时需要两个数字。举11例来说,假设在一个矩阵的左上角存在一个元素x,那么确定这个元素的索引值就是由两个 1构成的二维索引值,即“11”,这个二维索引值代表矩阵中第1行和第1列交汇处的数字,所以前面的一个数字1可以被定义为当前矩阵的行号,后面的一个数字1可以被定义为当前矩阵的列号。如下就是一个三行两列的矩阵:

在本书中统一使用大写字母来表示一个矩阵的简写,这个矩阵由11116个元素组成,其中x的位置是第1行和第1列的交汇处,所以x的索2121引值就是11;同理,x的位置是第2行和第1列的交汇处,所以x的1212索引值就是21;x的位置是第1行和第2列的交汇处,所以x的索引2231值是12;以此类推,最后得到x的索引值是22,x的索引值是31,32x的索引值是32。下面举一个具体的实例,有如下矩阵:

如果我们想要获得索引值是12和33的值,则根据之前的索引值定义规则,可以得到其对应的值分别是3和6。(4)张量(Tensor):若数组的维度超过了二维,我们就可以用张量来表示,所以我们可以将张量理解为高维数组。同理,张量的索引值用两个维度的数字来表示已经不够了,其中的元素的索引值会随着张量维度的改变而改变。2.1.2 矩阵的转置

矩阵的转置是矩阵在进行相关运算时会采用的一种变换方法。在一般情况下,我们通过在矩阵的右上角加上符号“T”来表示其是一个转置矩阵,如下所示就是矩阵X的转置矩阵表示:XT

我们对原矩阵X中的元素在经过变换后得到的相应的转置矩阵做如下定义:

等号左边括号内的内容是原矩阵的转置表示,括号外右下角的i和j分别是原矩阵中元素的行号索引值和列号索引值;等号右边是原矩阵X,但是我们看到它的下标i和j调换了位置,这个位置的调换意义在于把原矩阵中所有位置为ij的元素和位置为ji的元素进行对调,在这个过程中完成的全部操作就是原矩阵的转置。

下面通过一个具体的实例来对比矩阵转置前后的元素的位置,这样就能够更清晰地理解转置的过程。如下所示是一个原矩阵X:

按照之前的原矩阵的转置变换过程,通过将矩阵内元素的位置进行调换后得到如下结果:

在观察转置矩阵之后我们发现,如果原矩阵的维度是不对称的,那么在转置后的矩阵中不仅元素的位置会改变,维度也会有相应的改变,在如上所示的矩阵中原矩阵的三行两列在转置后变成了两行三列。其实,我们可以通过一种更简单的方法来记忆转置的变换过程,就是把原矩阵沿着对角线进行翻转,在翻转后得到的矩阵就是原矩阵的转置矩阵。

再来看两个实际的实例。首先是一个矩阵行号和列号相同的原矩阵X:

我们沿着对角线对原始矩阵进行翻转,其中对角线的矩阵元素是1和4,在翻转后得到原矩阵的转置矩阵如下:

如果矩阵的行号和列号相同,那么对角线上的元素必定在翻转之后还是一样的,而且索引值不会发生变化。我们再来看一个矩阵的行号和列号不相同的实例,原始矩阵X如下:

这时对角线上的矩阵元素变成了1和6,在翻转后得到的原矩阵的转置矩阵如下:

可以看到,转置矩阵的对角线上的元素仍然没有发生变化,但是转置矩阵的对角线上的元素索引值和原矩阵不同了:矩阵中元素1的索引值还是11,但是矩阵中元素6的索引值从原矩阵的32变成了现在的23。2.1.3 矩阵的基本运算

我们通常使用的数学算术运算包含加法运算、减法运算、乘法运算和除法运算,不过这些运算和矩阵中的算术运算稍微有些区别,因为在矩阵中是不能直接进行除法运算的,如果要在矩阵中进行除法运算,就要引入矩阵的逆来解决这个问题。本书不过多介绍矩阵的逆,而是重点讲解矩阵的加法运算、减法运算和乘法运算。

在进行矩阵算术运算前,我们先假设存在三个行号和列号都为2的矩阵,分别使用大写字母A、B和C表示这三个矩阵,其中矩阵A中的元素如下:

矩阵B中的元素如下:

我们把矩阵A和矩阵B进行算术运算后的结果都存储在矩阵C中,矩阵C中的元素如下:

在定义好三个矩阵的结构之后,我们再来看看矩阵中算术运算的公式。

矩阵的加法运算公式如下:

矩阵的减法运算公式如下:

矩阵的乘法运算公式如下:

每个运算公式中的两个公式其实都是矩阵的相应的算术运算法则,只不过第1个公式使用的是矩阵的缩写,而第2个公式使用的是矩阵中的元素,但是为了便于理解,我们平时习惯使用第1种公式。在第2个公式中定义的i和j分别是矩阵的行索引值和列索引值。我们观察到这两个矩阵在进行加法运算和减法运算时,矩阵中对应的矩阵元素具有相同的行索引值i和列索引值j,这也是矩阵进行加法和减法运算的前提条件,即参与运算的矩阵必须具有相同的行数和列数。

不过,矩阵乘法运算的前提条件和加法、减法运算不同:在参与运算的元素索引值中多了一个k值,而且这个k值同时出现在两个参与矩阵乘法运算的元素索引值中,前一个元素的k值代表的是列索引值,而后一个元素的k值代表的是行索引值。

不仅如此,我们还能从矩阵的乘法运算中得到如下有用的信息:若两个矩阵能进行乘法运算,那么前一个矩阵的列数必须和后一个矩阵的行数相等,同时矩阵的乘法运算要满足乘法的分配率和乘法的结合律,即A×(B+C)=A×B+A×CA×(B×C)=(A×B)×C

如上所述是常用的算术运算公式,我们需要特别留意矩阵的加法、减法和乘法运算公式之间的区别和联系,下面来看一些实例。

例1:假设存在两个行号和列号相同的矩阵,其中矩阵,矩阵,计算矩阵C=A+B的运算结果。ijijij

解答:根据矩阵的加法法则c=a+b,可以得到矩阵

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载