Machine Learning Mastery 计算机视觉教程(九)
深度学习迁移学习入门
最后更新于 2019 年 9 月 16 日
迁移学习是一种机器学习方法,其中为一项任务开发的模型被重新用作第二项任务模型的起点。
这是深度学习中的一种流行方法,在这种方法中,预先训练的模型被用作计算机视觉和自然语言处理任务的起点,因为开发这些问题的神经网络模型需要大量的计算和时间资源,并且它们在相关问题上提供了巨大的技能提升。
在这篇文章中,您将发现如何使用迁移学习来加快培训并提高深度学习模型的表现。
看完这篇文章,你会知道:
- 什么是迁移学习,如何使用。
- 深度学习中迁移学习的常见例子。
- 什么时候在你自己的预测建模问题上使用迁移学习。
用我的新书计算机视觉深度学习启动你的项目,包括分步教程和所有示例的 Python 源代码文件。
我们开始吧。
有关如何在计算机视觉中使用迁移学习的示例,请参见帖子:
深度学习迁移学习简介 图片由迈克的鸟提供,版权所有。
什么是迁移学习?
迁移学习是一种机器学习技术,其中在一个任务上训练的模型被重新用于第二个相关任务。
迁移学习和领域适应指的是这样一种情况,即在一种环境中所学的知识被用来提高在另一种环境中的概括能力
—第 526 页,深度学习,2016。
迁移学习是一种优化,当对第二个任务建模时,它允许快速进步或提高表现。
迁移学习是通过从已经学习过的相关任务中转移知识来改进新任务中的学习。
——第十一章:迁移学习,机器学习应用研究手册,2009。
迁移学习与多任务学习和概念漂移等问题有关,不仅仅是深度学习的研究领域。
然而,考虑到训练深度学习模型所需的巨大资源或训练深度学习模型所基于的庞大且具有挑战性的数据集,迁移学习在深度学习中很受欢迎。
如果从第一个任务中学到的模型特征是通用的,那么迁移学习只在深度学习中起作用。
在转移学习中,我们首先在基础数据集和任务上训练一个基础网络,然后我们重新调整所学习的特征的用途,或者将它们转移到第二个目标网络,在目标数据集和任务上进行训练。如果特性是通用的,即既适用于基础任务又适用于目标任务,而不是特定于基础任务,那么这个过程将会起作用。
深度学习中使用的这种迁移学习形式称为归纳迁移。这是可能模型(模型偏差)的范围通过使用适合不同但相关任务的模型以有益的方式缩小的地方。
归纳迁移的描述 摘自《迁移学习》
如何使用迁移学习?
你可以在自己的预测建模问题上使用迁移学习。
两种常见的方法如下:
- 开发模型方法
- 预训练模型方法
开发模型方法
- 选择源任务。您必须选择具有大量数据的相关预测建模问题,其中输入数据、输出数据和/或在从输入数据到输出数据的映射过程中学习到的概念之间存在某种关系。
- 开发源码模型。接下来,你必须为第一个任务开发一个熟练的模型。该模型必须优于天真模型,以确保已经执行了一些特征学习。
- 复用模型。然后,源任务上的模型拟合可以用作感兴趣的第二个任务上的模型的起点。这可能涉及使用模型的全部或部分,这取决于所使用的建模技术。
- 调谐型号。可选地,模型可能需要根据感兴趣的任务可用的输入输出对数据进行调整或细化。
预训练模型方法
- 选择源型号。从可用模型中选择预先训练的源模型。许多研究机构在大型且具有挑战性的数据集上发布模型,这些数据集可能包含在可供选择的候选模型池中。
- 复用模型。然后,模型预训练模型可以用作感兴趣的第二个任务的模型的起点。这可能涉及使用模型的全部或部分,这取决于所使用的建模技术。
- 调谐型号。可选地,模型可能需要根据感兴趣的任务可用的输入输出对数据进行调整或细化。
这第二种类型的迁移学习在深度学习领域很常见。
深度学习迁移学习的例子
让我们用两个带有深度学习模型的迁移学习的常见例子来具体说明这一点。
利用图像数据进行迁移学习
利用使用图像数据作为输入的预测建模问题来执行转移学习是很常见的。
这可能是一个以照片或视频数据作为输入的预测任务。
对于这些类型的问题,通常使用为大型且具有挑战性的图像分类任务预先训练的深度学习模型,例如 ImageNet 1000 级照片分类竞赛。
为这个竞赛开发模型并且做得很好的研究组织经常在许可的许可下发布他们的最终模型以供重用。这些模型可能需要几天或几周的时间来训练现代硬件。
这些模型可以下载并直接合并到新模型中,新模型需要图像数据作为输入。
这类模型的三个例子包括:
更多示例,请参见 Caffe 模型动物园分享更多预训练模型。
这种方法是有效的,因为图像是在大量照片上训练的,并且要求模型在相对大量的类上进行预测,这又要求模型有效地学习从照片中提取特征,以便在问题上表现良好。
在斯坦福大学的视觉识别卷积神经网络课程中,作者提醒要谨慎选择在新模型中使用多少预先训练好的模型。
[卷积神经网络]特征在早期层中更通用,在后期层中更针对原始数据集
—转移学习,用于视觉识别的 CS231n 卷积神经网络
利用语言数据进行迁移学习
在使用文本作为输入或输出的自然语言处理问题中,执行迁移学习是很常见的。
对于这些类型的问题,使用单词嵌入,即单词到高维连续向量空间的映射,其中具有相似含义的不同单词具有相似的向量表示。
存在有效的算法来学习这些分布式单词表示,并且对于研究组织来说,在许可的许可下发布在非常大的文本文档集上训练的预训练模型是常见的。
这类模型的两个例子包括:
这些分布式单词表示模型可以被下载并结合到深度学习语言模型中,或者将单词解释为输入,或者将单词生成为模型的输出。
在《自然语言处理深度学习》一书中,约夫·戈德堡提醒道:
……人们可以下载在大量文本上训练的预训练单词向量……………训练体系和底层语料库的差异对结果表示有很大影响,可用的预训练表示可能不是[您的]特定用例的最佳选择。
—第 135 页,自然语言处理中的神经网络方法,2017。
什么时候使用迁移学习?
迁移学习是一种优化,是节省时间或获得更好表现的捷径。
一般来说,在开发和评估模型之前,在领域中使用迁移学习是否有好处并不明显。
Lisa Torrey 和 Jude Shavlik 在他们关于迁移学习的章节中描述了使用迁移学习时要寻找的三个可能的好处:
- 更高启动。源模型的初始技能(在优化模型之前)比其他情况下要高。
- 更高的坡度。在源模型的训练过程中,技能提高的速度比其他情况下更快。
- 更高的渐近线。训练模型的收敛技巧比其他情况下更好。
迁移可能改善学习的三种方式。 摘自《迁移学习》。
理想情况下,你会看到成功应用迁移学习的三个好处。
如果您可以识别具有丰富数据的相关任务,并且您有资源为该任务开发模型并在您自己的问题上重用它,或者有一个预训练的模型可以用作您自己模型的起点,那么这是一种值得尝试的方法。
在一些你可能没有太多数据的问题上,迁移学习可以让你开发出你在没有迁移学习的情况下根本无法开发的技巧模型。
源数据或源模型的选择是一个开放的问题,可能需要领域专业知识和/或通过经验形成的直觉。
进一步阅读
如果您想更深入地了解这个主题,本节将提供更多资源。
教程
书
- 深度学习,2016 年。
- 自然语言处理中的神经网络方法,2017。
报纸
- 迁移学习调查,2010。
- 第十一章:迁移学习,机器学习应用研究手册,2009。
- 深度神经网络中的特征是如何转移的?
预训练模型
文章
摘要
在这篇文章中,您发现了如何使用迁移学习来加快培训并提高深度学习模型的表现。
具体来说,您了解到:
- 什么是迁移学习,如何在深度学习中使用。
- 何时使用迁移学习。
- 用于计算机视觉和自然语言处理任务的迁移学习的例子。
你有什么问题吗? 在下面的评论中提问,我会尽力回答。
计算机视觉入门
最后更新于 2019 年 7 月 5 日
计算机视觉,通常缩写为 CV,被定义为寻求开发技术来帮助计算机“看到”和理解照片和视频等数字图像内容的研究领域。
计算机视觉的问题看起来很简单,因为它很容易被人们解决,即使是很小的孩子。然而,这在很大程度上仍然是一个未解决的问题,既因为对生物视觉的有限理解,也因为在动态和几乎无限变化的物理世界中视觉感知的复杂性。
在这篇文章中,你会发现对计算机视觉领域的温和介绍。
看完这篇文章,你会知道:
- 计算机视觉领域的目标及其与图像处理的区别。
- 是什么让计算机视觉的问题具有挑战性。
- 计算机视觉中的典型问题或任务。
用我的新书计算机视觉深度学习启动你的项目,包括分步教程和所有示例的 Python 源代码文件。
我们开始吧。
《计算机视觉入门》摄影:阿克塞尔·克里斯汀森,版权所有。
概观
本教程分为四个部分;它们是:
- 对电脑的渴望
- 什么是计算机视觉
- 计算机视觉的挑战
- 计算机视觉中的任务
对电脑的渴望
我们被图像淹没了。
智能手机有摄像头,拍摄照片或视频并分享从未像现在这样容易,这导致了像 Instagram 这样的现代社交网络令人难以置信的增长。
YouTube 可能是第二大搜索引擎,每分钟上传数百个小时的视频,每天观看数十亿个视频。
互联网由文本和图像组成。索引和搜索文本相对简单,但是为了索引和搜索图像,算法需要知道图像包含什么。很长一段时间以来,图像和视频的内容一直是不透明的,最好用上传者提供的元描述来描述。
为了最大限度地利用图像数据,我们需要计算机“T0”看到一幅图像并理解其内容。
这对于一个人类,甚至是年幼的孩子来说,都是一个微不足道的问题。
- 一个人可以描述自己曾经看过的照片的内容。
- 一个人可以总结自己只看过一次的视频。
- 一个人可以认出一张他们以前只见过一次的脸。
为了解锁我们的图像和视频,我们至少需要计算机具有相同的功能。
什么是计算机视觉?
计算机视觉是一个专注于帮助计算机视觉的研究领域。
在抽象的层面上,计算机视觉问题的目标是使用观察到的图像数据来推断世界的一些事情。
—第 83 页,计算机视觉:模型、学习和推理,2012 年。
这是一个多学科领域,可以广泛地称为人工智能和机器学习的一个子领域,它可能涉及使用专门的方法和使用一般的学习算法。
人工智能与计算机视觉关集成述
作为一个多学科的研究领域,它可能看起来很混乱,技术是从一系列不同的工程和计算机科学领域借用和重用的。
视觉中的一个特定问题可以通过手工统计方法轻松解决,而另一个问题可能需要大量复杂的通用机器学习算法。
计算机视觉作为一个领域是一个智力前沿。像任何前沿领域一样,它令人兴奋且无组织,通常没有可靠的权威可以求助。很多有用的想法没有理论基础,有些理论在实践中毫无用处;发达地区分布很广,往往一个看起来完全无法从另一个到达。
—第十七页,计算机视觉:现代方法,2002 年。
计算机视觉的目标是理解数字图像的内容。典型地,这包括开发尝试再现人类视觉能力的方法。
理解数字图像的内容可能涉及从图像中提取描述,该描述可以是对象、文本描述、三维模型等等。
计算机视觉是从图像中自动提取信息。信息可以是任何东西,从三维模型、相机位置、对象检测和识别到图像内容的分组和搜索。
—第九页,用 Python 编程计算机视觉,2012。
计算机视觉和图像处理
计算机视觉不同于图像处理。
图像处理是从现有图像创建新图像的过程,通常以某种方式简化或增强内容。它是一种数字信号处理,与理解图像内容无关。
给定的计算机视觉系统可能需要将图像处理应用于原始输入,例如预处理图像。
图像处理的例子包括:
- 规范化图像的光度特性,如亮度或颜色。
- 裁剪图像的边界,例如将照片中的对象居中。
- 从图像中去除数字噪声,例如来自低亮度的数字伪像。
计算机视觉的挑战
事实证明,帮助计算机看东西是非常困难的。
计算机视觉的目标是从图像中提取有用的信息。事实证明,这是一项令人惊讶的挑战性任务;在过去的四十年里,它占据了成千上万的智慧和创造性的头脑,尽管如此,我们仍然远远不能建造一台通用的“视觉机器”。
—第 16 页,计算机视觉:模型、学习和推理,2012 年。
计算机视觉似乎很容易,也许是因为它对人类来说太容易了。
最初,人们认为这是一个简单的问题,学生可以通过将相机连接到计算机来解决。经过几十年的研究,“计算机视觉”仍未解决,至少在满足人类视觉能力方面。
人工智能领域的顶尖专家认为,让计算机看起来像 60 年代一个暑期学生项目的难度。40 年过去了,这个任务仍然没有解决,而且似乎很艰巨。
—Xi 页,计算机视觉中的多视图几何,2004。
一个原因是我们对人类视觉是如何工作的没有很强的把握。
研究生物视觉需要理解像眼睛这样的感知器官,以及对大脑内感知的解释。在绘制过程图表和发现系统使用的技巧和捷径方面都取得了很大进展,尽管像任何涉及大脑的研究一样,还有很长的路要走。
感知心理学家花了几十年时间试图理解视觉系统是如何工作的,尽管他们可以设计出视错觉来梳理其一些原理,但这个难题的完整解决方案仍然难以捉摸
—第 3 页,计算机视觉:算法与应用,2010。
这是一个如此具有挑战性的问题的另一个原因是视觉世界固有的复杂性。
给定的对象可以从任何方向、任何照明条件、任何类型的与其他对象的遮挡等被看到。一个真正的视觉系统必须能够在无限多的场景中的任何一个场景中“看到”,并且仍然提取有意义的东西。
*计算机能很好地解决严格约束的问题,而不是像视觉那样开放无界的问题。
计算机视觉中的任务
然而,该领域已经取得了进展,特别是近年来在照相机和智能手机中用于光学字符识别和人脸检测的商品系统方面。
计算机视觉正处于发展的非常时期。这门学科自 20 世纪 60 年代就已经存在,但直到最近才有可能利用计算机视觉的思想来构建有用的计算机系统。
—第十八页,计算机视觉:现代方法,2002 年。
2010 年的计算机视觉教科书名为“计算机视觉:算法和应用””列出了一些我们已经看到计算机视觉成功的高级问题。
- 光学字符识别
- 机器检查
- 零售(如自动结账)
- 三维建模(摄影测量)
- 医学成像
- 汽车安全
- 匹配移动(例如,将 CGI 与电影中的现场演员合并)
- 动作捕捉(mocap)
- 监督
- 指纹识别和生物识别
这是一个广泛的研究领域,有许多专门的任务和技术,以及针对应用领域的专门化。
计算机视觉有各种各样的应用,既有旧的(例如,移动机器人导航、工业检测和军事智能),也有新的(例如,人机交互、数字图书馆中的图像检索、医学图像分析以及计算机图形学中合成场景的逼真渲染)。
—第十七页,计算机视觉:现代方法,2002 年。
鉴于有大量公开的数码照片和视频,放大一些你可能会遇到或感兴趣解决的更简单的计算机视觉任务可能会有所帮助。
许多流行的计算机视觉应用包括试图识别照片中的事物;例如:
- 对象分类:这张照片中对象的大类是什么?
- 对象识别:这张照片中给定的对象是哪种类型的?
- 对象验证:是照片中的对象吗?
- 对象检测:照片中的对象在哪里?
- 对象地标检测:照片中对象的关键点是什么?
- 对象分割:图像中对象属于什么像素?
- 对象识别:这张照片里有什么对象,在哪里?
其他常见的例子与信息检索有关;例如:查找像图像这样的图像或包含对象的图像。
进一步阅读
如果您想更深入地了解这个主题,本节将提供更多资源。
书
- 计算机视觉:模型、学习和推理,2012 年。
- 用 Python 编程计算机视觉,2012。
- 计算机视觉中的多视图几何,2004。
- 计算机视觉:算法与应用,2010。
- 计算机视觉:现代方法,2002。
文章
摘要
在这篇文章中,你发现了对计算机视觉领域的温和介绍。
具体来说,您了解到:
- 计算机视觉领域的目标及其与图像处理的区别。
- 是什么让计算机视觉的问题具有挑战性。
- 计算机视觉中的典型问题或任务。
你有什么问题吗? 在下面的评论中提问,我会尽力回答。*