Johanna Pingel,Mathworks
Gabriel Ha,Mathworks
概述
虽然深度学习可以实现对象识别和对象检测的最先进的准确性,但是难以训练,评估和比较深度学习模型。深度学习还需要大量的数据和计算资源。
在这个网络研讨会中,我们将探索Matlab的方式®解决最常见的深度学习挑战,并进入培养准确深度学习模型的程序的洞察。我们将介绍对象识别和对象检测的深度学习和计算机视觉的新功能。
突出了
我们将使用真实世界的例子来演示:
的主持人
Johanna Pingel于2013年加入了MathWorks团队,专门从事Matlab的图像处理和计算机视觉应用。她有一个M.S.Rensselaer Polytechnic Institute和B.A的学位。卡内基梅隆大学的学位。她一直在电脑视觉应用空间工作超过5年,重点是对象检测和跟踪。
记录:2017年8月2日
大家好,我是加布里尔的Johanna,我们将讨论计算机视觉的深度学习。我们有一些很棒的新演示和功能向您展示。让我们开始吧。
是的,所以我们将通过设置一些上下文开始。我们在我们的网站上有其他深入的学习视频,这些视频比这个网络研讨会要短得多,你也应该看起来也应该看。但是,与其他视频相比,主要是我们将在这个网络研讨会中进入更多的深度。我们正在谈论计算机愿景的深度学习。什么是深入学习?它是一种机器学习,可直接从数据学习功能和任务,这可能是图像,文本或声音。
既然我们讨论的是计算机视觉,我们自然会看到图像数据。但请记住,深度学习适用于许多与图像无关的其他任务。
正确的。让我们来看看深度学习的快速工作流程。假设我们有一组图像,其中每个图像包含一种或四种不同的对象。我们想要的是能够自动识别图像中的物体。我们从标签图像开始,这意味着我们告诉深度学习算法图像包含什么。有了这些信息,它就开始了解物体的具体特征,并把它们与相应的类别联系起来。
您将注意到任务直接从数据中学到,这也意味着我们对正在学习的功能没有任何影响。您可能会听到此被称为端到端学习,但在任何情况下,请记住,深度学习直接从数据中学习功能。
这就是深度学习的基本工作流程。虽然深度学习的概念已经存在了一段时间,但由于大量提高了这些分类器的准确性,以至于它们在分类图像方面超过了人类,所以在最近一段时间,深度学习变得更加流行。因此,也有几个因素可以使深度学习成为可能,包括大量的标记数据,强大的gpu来加速训练,以及以他人的工作为起点来训练自己的深度神经网络的能力,我们将在后面讨论。
是的,我们会的。所以在我们开始之前,我们想给你们一些背景和框架来说明为什么我们要做这个网络研讨会。深度学习是困难的。这是一种前沿技术,无论你是在处理网络架构,理解如何训练一个精确的模型,还是整合成千上万的训练图像,它都会变得很复杂。
是的,更不用说每个人最喜欢的任务——试图找出为什么有些东西不工作。
我们希望Matlab能够让每个人都能轻松获得深度学习。在本网络研讨会上,以及我们网站上的其他资源,我们将解释如何快速使用MATLAB快速入门。我们的网络研讨会中的例子还将演示如何处理大集图像,轻松集成GPU以更快地培训深度学习模型,了解模型内部的培训,以及从领域专家的模型构建,所以您没有必须从头开始。而且,让我们进入它。
是的。我们开始做吧。因此,我们将使用佩带的网络覆盖深度学习图像分类的三个例子,转移学习来对新对象进行分类,以及图像和视频的对象检测。所以首先使用佩带的网络是图像分类。所以我在这里有一个我希望能够分类的辣椒的形象。并相信它与否,我可以在四条基本的代码中使用matlab。
首先,导入一个预先训练好的模型。第二,把图像放进来。第三,调整图像大小。第四,对图像进行分类。
好了。
这就是它。
很酷。
好了,接下来是第二个演示
他在开玩笑。
是的,我在开玩笑。我们来谈谈这里发生了什么。
那么在第一行代码中这个alexnet是什么?谁是亚历克斯,为什么我们用他的网?
所以直接回答你的问题,AlexNet是一种卷积神经网络,由许多人设计,包括Alex Krizhevsky。但我应该提供一些背景信息。有一个独立的项目与MATLAB无关它已经存在一段时间了叫做ImageNet项目。它的目标是建立一个巨大的视觉内容库,比如图像,供人们在视觉对象识别方面进行研究和设计。
它始于2010年。他们举办了一场名为ImageNet大规模视觉识别挑战的年度比赛。
哦耶。旧的ILSVRC。
是的,竞争。因此,竞争对手提交了竞争正确分类和检测[听不清]的对象的软件程序。现在,直到2012年,实现计算机愿景的标准方法是通过一个名为特征工程的过程,而不是alexNet,它在基于深度学习的方法上使用和改进。因此,尽可能猜,AlexNet在团队名称监督下提交到2012年ILSVRC,一个单词。它吹出了水的竞争,我猜可以参考竞争对手和竞争本身。
因为人们意识到深度学习不仅仅是理论,所以有很多炒作。它真的很实用,比我们之前做的更好。撇开历史课不讲,AlexNet被训练识别1000个不同的物体,我猜这与ILSVRC 2012的胜利条件有关。它是可以从MATLAB访问的几个预先训练过的网络之一,它还包括VGG-16和19。
我们有历史课吗?
我不会进入那些历史课。所以让我们把它带回我们的四行代码。所以首先看看Matlab如何让它变得易于进口预用的模型。喜欢,它不会比这更容易。如果您在计算机上没有AlexNet,则只需下载一次,无论是通过附加管理器还是使用错误中的链接,如果您运行代码而不下载它。现在,您可以为此演示使用它,并为您想要的其他任何事情使用。
在第二行,把图像带进来。这看起来很简单。但是你为什么要调整图像的大小呢?所以我第一次这么做的时候,我很聪明,只用了三行代码。
没有调整大小?
是的。我收到这个错误,这提到了大小的东西,这意味着,我可以弄清楚它为什么不起作用。
每个人都喜欢做的事情。
因此,如果我做净点层,它会向我展示网络的架构。它看起来首先令人恐惧,但第一层,输入层的大小为227×227像素。结束时的X3是RGB值,因为这是彩色照片。所以看到了,我就像,哦,好的。只需使用MATLAB调整图像大小,因此它不会在通向网络时出错。我们的最终代码行现在可以对图像进行分类。
所以你早些时候提到亚历克网是卷积神经网络。这是什么意思,我可以致电它的CNN吗?
我的意思是,只要观众不会让这个网络研讨会与某个电缆新闻网 - 电缆新闻 - 哦。这就是CNN代表的,不是吗?嗯,除了CNN是一个自信有线电视新闻网络之外,它是一种深入学习图像和计算机视觉问题的流行建筑。独立于亚历克网,了解CNN的三个主要事项是卷积,激活和汇集。
卷积是一种数学操作,您可能会记得从任何大学课程介绍到傅立叶和拉普拉斯变换,无论好坏。我们的想法是我们通过多个转换将输入图像放置,并且它们中的每一个从图像中提取某些功能。激活将转换应用于卷积的输出。一个流行的激活功能是Relu,或Relu,番茄番茄,只需将输出映射到最高的正值。最后,拉动是一种过程,我们通过仅携带一个值来携带到下一层来简化输出,这有助于减少模型需要了解的参数数。
因此,重复这三个步骤以形成整个CNN架构,其可以具有数十或数百层,每一个都会学会检测不同的特征。所以关于MATLAB的一个整洁的事情是它使您可以查看特征映射。因此,如果将功能较近较近初始图层的功能,则它们越来越复杂,从颜色和边缘到似乎更详细的东西。
让我们再来看看AlexNet的各个层次。您可以看到卷积、激活和池化。其他一些网络对这些层有不同的配置,但在最后,它们都有一个执行分类的最后一层。再写几行代码,我们就可以重复地显示AlexNet所认为的图像。有时能理解,有时不能。但这很好,只要物体在最初的1000个集合中。
乞求这个问题,如果不是吗?你能做什么?
嗯,请允许我通过说,这是使用预磨模模型的图像分类。让我们继续前进我们的第二个演示。
好吧。在下一个演示中,我们有汽车视频驾驶高速公路。我们希望能够将这些作为汽车,卡车或SUV分类。我们将使用AlexNet和微调网络只是我们的类别的对象,一个名为Transfer Learning的过程,可用于对不在原始网络中的对象进行分类。
这就是前一个问题的答案。快速跟进。如果你有一个分类任务,你的对象恰好是1000个中的一个,有什么理由你不使用AlexNet。
好问题。在这种情况下传输学习的主要好处是具有特定于您的数据的分类器。如果您在较少的类别上培训,您可以提高准确性。
是有意义的。
所以我从我的手机拿了这个视频,我能够自动把它带进MATLAB使用IP摄像头。这个功能让我可以记录数小时的汽车在办公室窗外行驶的视频。现在,使用MATLAB和计算机视觉,我能够从视频的每一帧中根据汽车的运动提取汽车,使用一个相对简单的过程,称为背景减去。
这只是一个看两个连续图像之间的像素差异并拔出足够不同的东西。
现在,当车辆经过时,我们想把它们分类为汽车,卡车,或SUV。而且AlexNet认为我们看到的不是这个。因此,如果当前模型不能对我们的数据起作用,我们就需要一个新模型。假设我们要对五种不同的车辆进行分类——轿车、卡车、大卡车、suv和面包车。我们的计划是使用AlexNet作为起点,并使用迁移学习来创建一个特定于这五个类别的模型。
所以,您将使用转移学习的原因,例如,从头开始训练网络?
所以从头划伤的训练绝对是你可以尝试的东西。我们为您提供Matlab的所有工具来执行此操作。但是,有几个实际的理由是转移学习。例如,您不必自己设置网络架构,这需要大量的试验和错误来查找良好的图层组合。此外,与从头划痕的训练相比,转移学习不需要几乎是建立准确的模型。最后,您可以利用来自最深刻的研究领域的高级研究人员的知识和专业知识,这些领域已经花费了更多时间训练模型。
听起来不错。
这里有五个文件夹,里面有我们五类的图片。我们想用一种简单的方法把这些数据传递给我们的深度学习算法。早些时候,加布里埃尔用imread来呈现辣椒的形象。但我们不想对每个图像都这么做。相反,我将使用一个名为image data store的函数,这是引入数据的一种有效方式。
我们应该注意,Matlab中有许多不同类型的数据存储,用于不同的大数据和数据分析任务。所以它不仅仅是图像。如果您有大量数据,则数据存储是您的朋友。
一旦那个点图像数据存储到我的文件夹中,它会自动根据包含图像的文件夹的名称来标记我的所有数据。所以没有必要一个一个地做。一旦我做到了这一点,我就可以使用有用的功能,比如查看每个类别有多少张图片,并能够快速地将我的图片分成训练集和测试集。
如果需要,您还可以指定自定义读取功能。图像数据存储为IMRead默认情况下读取所有图像,这对于标准图像格式很棒。但是,如果您碰巧具有IMREAD不知道如何处理的非标准图像格式,则只需编写自己的功能,将其传递到图像数据存储,然后您很好。
即使你有标准的图像格式,你也可以创建一个自定义的读取函数来进行图像预处理,比如调整大小、锐化或去噪。在我们的例子中,使用AlexNet,我们需要将它们的大小调整为227 * 227。我们在这里使用这个自定义的read函数。
我注意到你没有直接调整大小。看起来你在填充图像。原因是什么?
这只是我个人的经验。我试着调整图片的大小,但网络不是很好。当我自己看这些图片的时候,我无法分辨出汽车和suv之间的区别。所以我做了一些有相同效果的裁剪和保持长宽比。因为这有助于保持结构上的差异,我认为这可能有助于网络。之前你们看到AlexNet在对我们的汽车和卡车进行分类方面做得很差。所以我们需要对网络进行微调。
如果我们看一下这些层,你可以看到最后一个完全连接的层,代表了AlexNet接受训练的1000个类别。为了进行迁移学习,我们将这1000个对象替换为5个对象。然后这一行重新设置了分类,这意味着忘掉你学过的1000个物体的名字。你只关心这五个新的。
这就是你需要做出的唯一核心改变吗?
是的。这就是你需要做的所有网络操作。如果你运行这个,你会得到一个输出这五个对象之一的分类器。
所以我想问题是,它有多好?
所以我们事先训练了这个网络,它得到了非常好的结果,比如97%的准确率。
这对代码进行了两个微小的更改,这非常令人印象深刻。
但说实话,你可能不会马上意识到这一点。记住,AlexNet是用数百万张图像进行训练的,包括一些车辆。所以我们可以很自然地假设它会很顺利地转移到我们的数据上。但如果你要把学习转移到,与原始图像集非常不同的图像上,也许你需要做更多的改变。
是有意义的。那么有些东西可以尝试他们以子评估准确性找到自己吗?
你可以尝试很多东西。我们将进入快速的火模式。您可以随附此幻灯片。首先,在开始更改参数之前,您可以做一些事情。检查您的数据。我不能强调这一点。最初,我的火车模型正在错误分类很多图像。我意识到我的一些数据是错误的文件夹。显然,如果您的设置不准确,无论是错误的文件夹还是训练数据错误,您都不会走得太远。
接下来,尝试获取更多数据。有时分类器需要更多的图像来更好地理解问题。最后,尝试一个不同的网络。我们正在与AlexNet合作,但正如我们提到的,还有其他的网络可供你使用。换一个CNN可能会得到更好的结果。
听起来不错。假设我很确定我的设置是正确的。我现在该怎么办?
所以现在这是改变网络和培训过程的问题。让我们从网络开始。更改网络意味着添加,删除或修改图层。您可以将另一个完全连接的图层添加到网络上,这增加了网络的非线性,并且可以有助于提高网络的准确性,具体取决于数据。您还可以修改新图层的学习权重,以便它们比较早期的网络原始层更快地学习。如果您想保留丰富的功能,这是一个有用的网络以前关于其原始数据学到的网络。
至于改变训练过程,这是改变训练选择的问题。你可以尝试更多的阶段,更少的阶段,以及其他的选择,你可以在我们的网站上找到文档。
所以我这么说很公平。所有的选择似乎都是,就像,你把网络当作一个黑盒子。如果你训练它,发现它不是很好,那么你就对它进行一些修改,告诉它开始训练,等待完整的等待时间,然后你就会发现它真的让事情变好了还是变坏了。在这个过程中,我们能做些什么吗?
绝对地。我们有一组输出函数,可以向我们展示网络中发生的事情,因为它是培训。第一个绘制它的训练量的准确性。理想情况下,您希望随着时间的推移查看准确性趋势。如果这不是你所看到的,你可以停止培训并尝试在你可能浪费几个没有改善的事情上浪费时间的训练。您还可以根据某些条件提前停止培训。在这里,如果我达到99.5%的准确性,我会告诉网络停止。
我猜这就是这样,所以你不会超越斜线削减网络。
是的。我们还有检查点的概念。你可以在某个特定的点停止网络训练,看看它在测试集上的表现如何,然后如果你决定它需要更多的训练,你不必从头开始。你可以继续上次的训练。正如你们所料,我们的网站上有很多不同培训方案的文档。如果您看一下这里,您可以看到我刚才概述的选项——绘制训练精度,以及这里,在指定的精度停止。所以一定要试试这些例子。
是的,请。复制粘贴此代码。有些人说永远不要复制,粘贴你在网上找到的代码。我明白他们的意思,比如,不要盲目地复制东西,并期望它能正常工作。不过说真的,让那些没有复制粘贴网络代码的人投出第一条错误信息吧。
您肯定应该复制我们的代码。很好,不必自己写出所有代码,并有一些伟大的起点,以便更好地控制培训过程。
所以让我们说我真的很顽固地让我的网络精细调整,我想尽可能地删除网络的黑匣子方面。所以我想你可能无法直接看到网络看到的内容。但我们如何开始对我们的网络更加亲密的了解?
您可以做的一件事是可视化网络在图像中找到的功能。我们可以查看过滤器,我们可以在应用这些过滤器后查看图像的结果。在第一个卷积中,我们看到我们正在提取边缘,暗和光线模式。它们可能很明显,还是不那么明显。这一切都取决于这些功能在图像中的强度。
所以你可以用你的网络层来做这个吗?
是的。让我们看另一个例子。这个图像的第四次卷积的输出产生了一些更抽象,但有趣的特征。你可以假设这个通道会找到车轮和保险杠作为特征。为了测试我们的理论,让我们尝试另一个图像,其中后轮是不可见的左边的图像。如果我们的假设是正确的,那么这个通道的输出不应该在图像的左侧被激活。这就是我们所看到的。
好了。因此,如果您想调试您的网络,该技术将为您提供网络所看到的可视表示,并可能帮助您更好地理解正在发生的事情。
是的。所有代码都在文档中。网站上的示例通过脸部的发现功能,但这是相同的概念。我们将看看一个您可能会发现有用的叫做深度梦想的工具。深梦可以用来制作非常有趣的,你可能在网上看到的艺术图像。但这是我们可以用来了解网络的另一种工具。深度梦想将输出代表其在整个培训过程中学到的功能的图像。
理解这个的一种方式是,不给网络一个图像,让它连接到一个类,让我们反向进行。我们给网络一个类,然后让它给我们一个图像。为什么这有用呢。
让我们看一下文档。神经网络工具箱有一个关于深度学习的很好的页面。这里的一个概念是深度梦,以及使用AlexNet深度梦的一个例子。我们可以看到这里我要一只母鸡,这是AlexNet训练过的种类之一。而深梦给了我一个有点抽象的母鸡的样子。我们可以为网络中的任何类别创造深层梦境图像。
因此,如果我们看到一些看起来不像类别的东西,我们可以假设我们的网络可能无法正确地学习类别。
是的,这可能是训练数据的问题。让我给你们举个例子。在AlexNet最初的1000个类别中,有一个松鼠类别。我正好有一堆松鼠的照片我们可以在我们的网络上试试。我们看到所有的预测都是正确的,除了这个。如果我们观察松鼠的深层梦境,我们会看到什么?那头发呢,它被误认为是什么?有一些鲜明的颜色,很好地对应了我们尝试的前几个图像。你可以看到尾巴的特征。这些都是这张图片没有的特征。
从中,我猜我们可以添加更多的测试图像,该测试图像包含这些类型的特征或其网络。
现在你有足够的知识开始深度学习,更具体地说,迁移学习。但是我们的例子还没有完全结束。还记得我们之前放的那个视频吗?我们试图用AlexNet进行分类,这就是为什么我们费尽心思创建自己的定制模型。使用与之前相同的算法来检测图像中的汽车,我现在可以使用我们的模型进行分类。我们可以看到我们的模型认为它们是什么以及预测的能力。
非常好。
因此,即开始学习和许多提示和技巧,以了解您的网络和改进。我们希望您已经了解MATLAB如何使大型图像易于处理大量图像,从实地的专家访问模型,可视化和调试网络,并加速GPU的深度学习。
等等,你完全没有覆盖最后一个。
啊,所以你很注意。
是的,我是。
是的,我们没有明确覆盖它。但如果您仔细查看培训剪辑,则输出消息表明我们正在培训单个GPU,NVIDIA®3.0计算能力的GPU,这是使用GPU进行深度学习的最低要求。与MATLAB的GPU计算的美丽是所有人都在幕后处理。而你,作为用户,不必担心它。如果您有一个,Matlab默认使用GPU,如果您使用GPU或云中的GPU群集或GPU群体,则均未更改任何功能,甚至是CPU。
你可以使用,比如,CPU进行培训吗?我喜欢你如何从大,更大,最大,然后缩小到裸骨计算。
是的,从技术上讲,您可以使用CPU。但是,看看这次尝试在CPU与GPU上培训相同的深入学习算法的视频。
哇。这是非常不沮丧的。
是的。所有这些都适用于培训过程的任何部分,无论是培训,测试还是可视化网络。所以,如果CPU是你唯一的选择,那就去了。但我们鼓励您使用GPU进行培训,或者至少确保您在训练模型时休息一下。
好吧。在我们的最后一个演示中,我们将讨论一个我们经常注意到的更有挑战性的问题。看看这张图片。如果我们把它呈现给电视台,他们会怎么想?在任何情况下,到目前为止,我们只展示了将整个图像分类到一个类别的例子。但在这张图片中,很明显有多种类型的车辆分布在多个地点。而我们训练的网络无法告诉我们这些。
这个经典的问题叫做物体检测,或者定位场景中的物体。在这个例子中,我们看的是几辆车的后部。我们的目标是探测它们。因此,我们需要创建一个对象检测器来识别我们所关心的对象。那么,我们应该怎么做呢?
这次网络研讨会的主题是深度学习,那么深度学习呢?
极好的。因此,如果我们要培训车辆探测器来识别汽车后面的汽车,它将需要大量的图像进行培训。现在,问题是我们的图像数据尚未播种到各个车辆,这意味着乍一看,我们必须通过裁剪和标记所有图像的繁琐任务。这个网络研讨会应该多久?
30分钟或更少。
(我想我们做不到。)除非我们有MATLAB。耶。我很抱歉。MATLAB有内置的应用程序来帮助你完成这个过程。首先,你可以快速浏览所有数据,并在场景中的对象周围绘制边界框。现在,即使这比手动裁剪要好,你也不想做100或1000次。因此,如果你有一个视频或图像序列,MATLAB可以自动标记场景中的物体的过程。
在视频的第一帧中,我指定了对象的位置。现在Matlab将在整个视频中跟踪它。就像那样,我有数百个新标签的汽车,而无需完成100次。所以现在我们拥有我们所有关注的对象的边界框的所有图像。同样,对于现实世界和强大的解决方案,您需要数千个或数百万个对象的例子。金宝搏官方网站所以想象没有手动在没有应用程序的情况下做到这一点。
回到深入学习。我们将使用CNN训练物体探测器。我们可以完全进口像以前一样的预押卡网,这完全有效。但要向您展示一些新的东西,我们将从划痕创建CNN架构。所以我们不会实时输入一切,但从Matlab中的划痕创建CNN只是卷积,激活和拉动图层 - 你之前所谈过的三件事。
这就是我们顺序所拥有的。您可以决定要使用的过滤器数量。并且由于我们将使您提供所有这些代码,请随时使用它并从头开始创建自己的CNN湿润。所以现在是时候训练我们的探测器了。使用Matlab的计算机视觉工具,我们实际上有几个对象探测器可以选择。有什么好处是您可以为您选择的任何一个人使用相同的培训数据。因此,您可以从此代码中看到,您可以非常简单地尝试所有这些产品,看看它们是如何做的。
我们有这些探测器的文档,这将提供在特定情况下使用哪种探测器的建议。所以如果你计划使用对象检测,一定要看这个。
是的。所以我们训练了我们的探测器。我们会在样本图像上尝试。您可以在此处看到结果。看起来非常好。但对于更令人印象深刻的演示,让我们在视频上尝试一下。在那里,如你所见,驾驶高速公路。它正在分类所有汽车。这非常漂亮。对于高级用户,您可以访问帮助程序功能以更好地了解其性能。
以下是MATLAB如何轻松地进行对象检测,从快速将数据与内置应用程序一起标记数据,并通过深入学习和计算机视觉中的其他工具培训您的算法。为了把事情包装起来,请记住,虽然我们在我们的例子中使用了很多车辆,但Matlab和深度学习不限于分类车辆。那么是人们的脸,狗品种还是巨大的松鼠收集,你可以用matlab轻松完成。
我想快速呼唤我们的支持,以解决深入学习的回归问题,这意味着输出金宝app数值而不是输出类或类别。我们有一些例子,您可以在那里检测道路上的车道边界。对于那些厌倦了听到汽车的人来说,我们有一个我们预测面部关键点的地方,可用于预测一个人的面部表情。
所以今天我们看到了你可以用matlab和深度学习做的一些新事物。我们希望您能够清楚地看到Matlab如何使深度学习的艰巨任务更容易。因此,请务必查看网络研讨会中使用的所有代码,并在您自己的数据上尝试。
如果你去Add On Manager,在那里你得到我们预先训练的网络,你可以在相同的地方找到一些其他的资源,以启动和运行深度学习,包括一个视频,显示如何使用MATLAB快速分类对象与网络摄像头。
查看我们网站上的其他资源,了解如何开始深度学习,如果有任何问题,请随时给我们发邮件image-processing@mathworks.com..
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。