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是一个由各种人士设计的卷积神经网络,包括一个亚历克斯克里兹韦斯基。但我应该提供一些背景。因此,这项独立项目与Matlab无关,虽然是一段时间,但虽然被称为Imagenet项目。其目标是拥有庞大的视觉内容存储库,如图像,用于人们在视觉对象识别中进行研究和设计。
所以它始于2010年。他们每年竞争称为想象成的大规模视觉认可挑战。
哦,是的。老ILSVRC。
是的,那竞争。所以竞争对手提交软件程序竞争正确分类和检测物体在[听不清]。现在,直到2012年,实现计算机视觉的标准方法是通过一个称为特征工程的过程,而不是使用和改进基于深度学习的方法的AlexNet。所以你可能已经猜到了,AlexNet以team name Supervision提交给了2012 ILSVRC。它把竞争对手彻底击败了,我猜这个词既可以指竞争对手,也可以指竞争本身。
因为人们意识到深度学习不仅仅是理论,所以有很多炒作。它真的很实用,比我们之前做的更好。撇开历史课不讲,AlexNet被训练识别1000个不同的物体,我猜这与ILSVRC 2012的胜利条件有关。它是可以从MATLAB访问的几个预先训练过的网络之一,它还包括VGG-16和19。
我们有历史课吗?
我不会为这些人上历史课。让我们回到我们的四行代码。所以,首先检查一下MATLAB如何使导入预先训练的模型变得非常容易。没有比这更容易的了。如果你的电脑上没有AlexNet,你只需要下载一次,不管是通过附加管理器还是使用错误中的链接,如果你没有下载代码就运行了代码。现在你可以把它用于这个演示和其他任何你想要的东西。
所以在第二行中,你带来了图像。这似乎非常简单。但是你为什么调整图像大小?所以我第一次做到这一点,我试图全部聪明,并在三行代码中做到这一点。
没有调整吗?
是的。我收到这个错误,这提到了大小的东西,这意味着,我可以弄清楚它为什么不起作用。
每个人都喜欢做的事情。
因此,如果我做净点层,它会向我展示网络的架构。它看起来首先令人恐惧,但第一层,输入层的大小为227×227像素。结束时的X3是RGB值,因为这是彩色照片。所以看到了,我就像,哦,好的。只需使用MATLAB调整图像大小,因此它不会在通向网络时出错。我们的最终代码行现在可以对图像进行分类。
你之前提到过AlexNet是一个卷积神经网络。这是什么意思,我能把它简称为CNN吗?
我的意思是,只要观众不会让这个网络研讨会与某个电缆新闻网 - 电缆新闻 - 哦。这就是CNN代表的,不是吗?嗯,除了CNN是一个自信有线电视新闻网络之外,它是一种深入学习图像和计算机视觉问题的流行建筑。独立于亚历克网,了解CNN的三个主要事项是卷积,激活和汇集。
卷积是一种数学运算你们可能还记得大学课程中介绍过的傅里叶和拉普拉斯变换,无论好坏。我们把输入的图像进行多次变换每一次都从图像中提取特定的特征。激活对卷积的输出应用一个变换。一个流行的激活函数是ReLU,或ReLU,西红柿西红柿,它只是获取输出并将其映射到最高的正值。最后,拉取是一个简化输出的过程,只取一个值带到下一层,这有助于减少模型需要了解的参数数量。
因此,重复这三个步骤以形成整个CNN架构,其可以具有数十或数百层,每一个都会学会检测不同的特征。所以关于MATLAB的一个整洁的事情是它使您可以查看特征映射。因此,如果将功能较近较近初始图层的功能,则它们越来越复杂,从颜色和边缘到似乎更详细的东西。
让我们再来看看AlexNet的各个层次。您可以看到卷积、激活和池化。其他一些网络对这些层有不同的配置,但在最后,它们都有一个执行分类的最后一层。再写几行代码,我们就可以重复地显示AlexNet所认为的图像。有时能理解,有时不能。但这很好,只要物体在最初的1000个集合中。
乞求这个问题,如果不是吗?你能做什么?
请允许我这样回答,这是使用预训练模型进行的图像分类。让我们继续第二个演示。
好的。在下一个演示中,我们有汽车视频驾驶高速公路。我们希望能够将这些作为汽车,卡车或SUV分类。我们将使用AlexNet和微调网络只是我们的类别的对象,一个名为Transfer Learning的过程,可用于对不在原始网络中的对象进行分类。
并有我们对上一个问题的答案。快速跟进给您。因此,如果您有一个分类任务,您的对象发生在1,000中的一个,则是否有任何原因您不仅仅是使用AlexNet。
好问题。在这种情况下传输学习的主要好处是具有特定于您的数据的分类器。如果您在较少的类别上培训,您可以提高准确性。
说得通。
所以我从我的手机上拍了这个视频,我能够使用IP网络摄像头自动将其带入Matlab。此功能允许我记录在办公窗口外行驶的汽车视频。现在,使用MATLAB和计算机愿景,我能够使用一个名为背景减法的相对简单的过程,根据其运动来从每个帧视频中提取汽车。
这只是观察两个连续图像之间的像素差异然后找出足够不同的东西。
现在,由于车辆通过,我们希望将它们分类为汽车,卡车或SUV。这不是AlexNet认为我们正在看的。因此,如果我们当前的模型不适用于我们的数据,我们需要一个新的模型。所以让我们说我们想要分类五种不同的车辆汽车,卡车,大型卡车,SUV和货车。我们的计划是将AlexNet作为起点,并使用传输学习创建特定于这五个类别的型号。
那么为什么你会使用迁移学习而不是从零开始训练一个网络呢?
所以从头划伤的训练绝对是你可以尝试的东西。我们为您提供Matlab的所有工具来执行此操作。但是,有几个实际的理由是转移学习。例如,您不必自己设置网络架构,这需要大量的试验和错误来查找良好的图层组合。此外,与从头划痕的训练相比,转移学习不需要几乎是建立准确的模型。最后,您可以利用来自最深刻的研究领域的高级研究人员的知识和专业知识,这些领域已经花费了更多时间训练模型。
听起来不错。
所以这里有五个文件夹,包含我们五个类别的大量图像。我们希望一种简单的方法来带来这些数据来传递给我们的深度学习算法。早些时候,加布里埃尔使用IMREAD作为一种带来辣椒形象的方式。但我们不想为每种图像做到这一点。相反,我将使用称为图像数据存储的函数,这是带入数据的有效方式。
我们应该注意,Matlab中有许多不同类型的数据存储,用于不同的大数据和数据分析任务。所以它不仅仅是图像。如果您有大量数据,则数据存储是您的朋友。
一旦那个点图像数据存储到我的文件夹中,它会自动根据包含图像的文件夹的名称来标记我的所有数据。所以没有必要一个一个地做。一旦我做到了这一点,我就可以使用有用的功能,比如查看每个类别有多少张图片,并能够快速地将我的图片分成训练集和测试集。
如果需要,还可以指定自定义读函数。图像数据存储为imread默认读取所有图像,这是伟大的标准图像格式。但如果你碰巧有一些imread不知道如何处理的非标准图像格式,你只需要编写自己的函数,把它传递到图像数据存储中,然后就可以了。
甚至如果您确实有标准图像格式,则可以进行自定义读取功能,该读取功能是图像预处理,如调整大小,锐化或去噪。在我们的情况下,使用AlexNet,我们需要将它们调整为227到227。因此,我们在此处使用此自定义读取功能。
所以我注意到你没有直接调整大小。看起来你填充了图像。这是什么原因?
所以这只是个人经历。我尝试调整图像的大小,网络并没有很好。当我自己看着图像时,我无法讲述汽车和SUV之间的差异。所以我做了一些具有相同效果的裁剪和维持纵横比。并且由于这有助于维持结构差异,我认为这可能有助于网络。所以早些时候,你看到亚历克网在自己分类汽车和卡车的情况下做得很差。所以我们需要微调网络。
如果我们查看图层,您可以看到最终完全连接的图层,代表亚历纳特培训的1,000个类别。为了进行转移学习,我们将五个替换五个类别的五类对象。然后,此线重置分类,这意味着忘记您学习的1,000个对象的那些名称。你只关心这五个新的。
这是您所需的唯一核心变化?
是的。这就是你需要做的所有网络操作。如果你运行这个,你会得到一个输出这五个对象之一的分类器。
所以我想问题是,它有多好?
所以我们事先训练了这个网络,它得到了非常好的结果,比如97%的准确率。
这对代码进行了两个微小的更改,这非常令人印象深刻。
但是,让我们说实话,你可能无法立即到达那一点。请记住,AlexNet培训了数百万图像,包括一些车辆。因此,假设它发生在非常顺利地转移到我们的数据是合理的。但是,如果您要转移了其他,从原始集合中的截然不同的图像,也许您可能必须进行更多更改。
说得通。那么有些东西可以尝试他们以子评估准确性找到自己吗?
你可以尝试很多事情。我们将进入快速开火模式。你们可以跟着这张幻灯片走。首先,在开始改变参数之前,你可以做一些事情。检查你的数据。我怎么强调都不为过。最初,我的火车模型对很多图像进行了错误分类。我意识到我的一些数据放错了文件夹。显然,如果你的设置不准确,不管是错误的文件夹还是错误的训练数据,你都不会走得很远。
接下来,尝试获取更多数据。有时分类器需要更多的图像以更好地了解问题。最后,尝试不同的网络。我们正在使用AlexNet,但正如我们所提到的那样,您还有其他可供您使用的网络。并且可以提供不同的CNN可能提供更好的结果。
听起来不错。所以让我们说我很确定我的设置是否正确。我现在能做什么?
所以现在的问题是改变网络和训练过程。让我们从网络开始。改变网络意味着添加、删除或修改层。你可以在网络中添加另一个完全连接的层,它可以增加网络的非线性,并根据数据帮助提高网络的准确性。您还可以修改新层的学习权值,以便它们比网络早期的原始层学习得更快。如果您希望保留网络以前了解的原始数据的丰富特性,这是很有用的。
至于改变培训过程,这是改变培训选择的问题。您还可以尝试更多阶段,更少的阶段和其他选项,以及您可以在我们的网站上找到文档。
所以这对我来说很公平。所有选项似乎都是如此,你像黑匣子一样对待网络。如果你训练它并不是很好,那么你就抛出了其中一个修改,告诉它开始培训,等待完整的等待时间,然后你发现它真的更好或更糟的事情。所以我们可以做些什么,说,在过程中间吗?
绝对的。我们有一组输出函数可以告诉我们在网络训练时发生了什么。第一个是在训练时绘制网络的准确性。理想情况下,您希望看到精度随时间而上升的趋势。如果这不是你所看到的,你可以停止训练,并尝试修复它,在你可能浪费时间在一些没有改善的东西上之前。你也可以根据某些条件提前停止训练。这里我告诉网络,如果我的准确率达到99。5%就停止。
我猜这就是这样,所以你不会超越斜线削减网络。
是的。我们也有检查站的概念。您可以在特定点停止网络培训,看看测试集中的工作程度如何,然后如果您决定需要更多培训,则您不必从头开始。你可以拿起你离开的训练。正如您所预期的那样,我们的网站有文档供我们许多不同的培训选择。如果您看看这里,您可以看到我刚刚概述的选项 - 绘制训练准确性,并以指定的准确性停止。所以肯定会尝试这些例子。
是的,请。复制粘贴此代码。有些人说永远不要复制,粘贴你在网上找到的代码。我明白他们的意思,比如,不要盲目地复制东西,并期望它能正常工作。不过说真的,让那些没有复制粘贴网络代码的人投出第一条错误信息吧。
你绝对应该复制我们的代码。这很好,不用自己编写所有的代码,并且有一些很好的起点来更好地控制培训过程。
假设我非常热衷于优化网络我希望尽可能地消除网络的黑盒特性。所以我想你们可能无法直接看到网络所看到的。但是我们如何开始对我们的网络有更深入的了解呢?
您可以做的一件事是可视化网络在图像中找到的功能。我们可以查看过滤器,我们可以在应用这些过滤器后查看图像的结果。在第一个卷积中,我们看到我们正在提取边缘,暗和光线模式。它们可能很明显,还是不那么明显。这一切都取决于这些功能在图像中的强度。
所以你可以对网络的任何一层都这样做?
是的。让我们看看另一个。此图像的第四次卷积的输出产生了更摘要,但有趣的功能。您可以假设这个特定的频道正在寻找车轮和汽车的保险杠作为特征。为了测试我们的理论,让我们尝试另一个图像,其中在图像的左侧不可见后轮。如果我们的假设是正确的,那么该频道的输出不应在图像的左侧激活。这就是我们所看到的。
好了。因此,如果您有的话来调试您的网络,这种技术会为您提供网络所看到的视觉表示,并可能帮助您更好地了解正在发生的事情。
是的。所有的代码都在文档中。网站上的例子是寻找脸部特征,但概念是一样的。我们来看看另一个你可能会觉得有用的工具,那就是深梦。深梦可以用来制作你可能在网上看到的非常有趣、有艺术气息的图像。但这是我们用来理解网络的另一个工具。深度梦输出的图像将代表它在整个训练过程中学习到的特征。
理解这个的一种方式是,不给网络一个图像,让它连接到一个类,让我们反向进行。我们给网络一个类,然后让它给我们一个图像。为什么这有用呢。
让我们看一下文档。神经网络工具箱有一个关于深度学习的很好的页面。这里的一个概念是深度梦,以及使用AlexNet深度梦的一个例子。我们可以看到这里我要一只母鸡,这是AlexNet训练过的种类之一。而深梦给了我一个有点抽象的母鸡的样子。我们可以为网络中的任何类别创造深层梦境图像。
所以,如果我们看到一些不像类别的东西,我们可以假设我们的网络可能没有正确地学习我们的类别。
是的,可能是培训数据的问题。让我给你举个例子。在AlexNet的原始1,000类中,它有一个松鼠类别。我碰巧有一堆松鼠的照片,所以我们可以尝试在我们的网络上。除了这个,我们看到所有预测都是正确的。如果我们看看松鼠的深梦,我们看到了什么?头发怎么样,误认为是什么?有一些充满活力的颜色,与我们尝试过的前几个图像相同。您可以看到与尾部相关联的功能。这些是这种图像没有的强大功能。
我想我们可以在我们的网络中添加更多包含或不包含这些特征的测试图像。
所以现在你有足够的深入学习,更具体地,转移学习。但我们并不完全通过我们的榜样。还记得那个视频我们展示了一段时间的车辆驾驶路上的车吗?我们尝试使用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就像我们之前做的那样,这完全行得通。但是为了给大家展示一些新的东西,我们将从零开始创建CNN的架构。所以我们不会实时输入所有东西,但是在MATLAB中从头创建一个CNN仅仅是卷积,激活,和拉层的问题——这是你之前讲过的三件事。
这就是我们顺序所拥有的。您可以决定要使用的过滤器数量。并且由于我们将使您提供所有这些代码,请随时使用它并从头开始创建自己的CNN湿润。所以现在是时候训练我们的探测器了。使用Matlab的计算机视觉工具,我们实际上有几个对象探测器可以选择。有什么好处是您可以为您选择的任何一个人使用相同的培训数据。因此,您可以从此代码中看到,您可以非常简单地尝试所有这些产品,看看它们是如何做的。
我们有这些探测器的文档,这将为哪一个在某些方案中使用的建议提供建议。因此,如果您计划利用对象检测,请务必查看它。
是的。所以我们训练了我们的探测器。我们会在样本图像上尝试。您可以在此处看到结果。看起来非常好。但对于更令人印象深刻的演示,让我们在视频上尝试一下。在那里,如你所见,驾驶高速公路。它正在分类所有汽车。这非常漂亮。对于高级用户,您可以访问帮助程序功能以更好地了解其性能。
以下是MATLAB如何轻松地进行对象检测,从快速将数据与内置应用程序一起标记数据,并通过深入学习和计算机视觉中的其他工具培训您的算法。为了把事情包装起来,请记住,虽然我们在我们的例子中使用了很多车辆,但Matlab和深度学习不限于分类车辆。那么是人们的脸,狗品种还是巨大的松鼠收集,你可以用matlab轻松完成。
我想快速呼唤我们的支持,以解决深入学习的回归问题,这意味着输出金宝app数值而不是输出类或类别。我们有一些例子,您可以在那里检测道路上的车道边界。对于那些厌倦了听到汽车的人来说,我们有一个我们预测面部关键点的地方,可用于预测一个人的面部表情。
所以今天我们看到了你可以用matlab和深度学习做的一些新事物。我们希望您能够清楚地看到Matlab如何使深度学习的艰巨任务更容易。因此,请务必查看网络研讨会中使用的所有代码,并在您自己的数据上尝试。
如果您转到Manager的添加到您获得预用网络的情况下,您可以在同一个地方找到其他一些资源,并使用深度学习启动和运行,包括一个视频,该视频显示如何使用MATLAB快速对象进行分类摄像头。
查看我们网站上的其他资源,了解如何开始深度学习,如果有任何问题,请随时给我们发邮件image-processing@mathworks.com..
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。