从系列:面向工程师的深度学习
布莱恩道格拉斯
一旦你有了对数据进行分类的深度神经网络,你就可以将其整合到更大的设计中。本视频介绍了额外的工作和注意事项,以帮助您确信模型将处理不可见的数据,并按预期与其他系统组件进行交互。也可以将深度神经网络部署到目标设备上,目标设备需要一定的性能特征。
在上一个视频中,我展示了如何通过重新训练现有的深度神经网络来构建一个击掌计数器。我从基本上什么都没有到运行大约2个小时,这是非常棒的!
但是,只需获得可以对数据进行分类的模型并非深入学习工作流的结束。我们需要考虑的其他一些事情是训练有素的网络通常是更大系统的一部分,我们希望能够将其纳入完整的设计中。我们还希望拥有一定程度的信心,即该模型将在看不见的数据上工作,并且它将与其他系统组件的预期相互作用。最终,我们希望将其部署到需要某些性能特征的目标设备上。这些中的每一个都需要额外的工作和考虑到我在最后一段视频中所做的内容。所以这就是我们现在要谈论的东西。我希望你坚持下去。我是Brian,欢迎来到Matlab,Tech Talk。
我们可以用问题汇总这个视频。我有一个训练有素的网络,接下来是什么?在我们进入它之前,我想重申我通常的警告,即这个视频并不旨在涵盖一切。我只想介绍一些概念并让你考虑整体问题。我在描述中留下了对其所有这些深度的资源的链接。
好了,我们开始吧。
在上个视频的最后,我们得到了一个GoogleNet模型它被重新训练来识别两种模式,它寻找这些粉红色的火山并将它们归类为击掌而我们通过网络发送的任何其他信息都被归类为无击掌。所以,接下来是什么?嗯,我认为想知道网络是否有效是合理的。现在,我们知道它在某种程度上是可行的,因为在训练过程中,它使用40张验证图像来评估模型的准确性,而它只错标了40张中的一张。
这肯定是很棒的,但有两件事要指出。首先,即使我们对40个验证图像有一些充满信心的工作,我们并不一定知道它还适用于尚未见过的图像。现在,如果40个验证图像覆盖整个解决方案空间,那么我们可能相信网络只会跨越与其中一个图像类似的情况。However, in this case, 40 images was enough to gain confidence for the video I was making but I don’t think it was enough to cover all of the possible arm motions the network might see in real life and so we’re going to want to do some additional testing if we’re going to deploy this network into the field.
关于这个模型,我想指出的第二件事是我们用彼此不相关的标度图图像来验证它。我的意思是,每一个都来自于它自己独立的手臂运动,但这与我使用这个网络的方式不完全一样。记住,我要传递的是一个连续的标量图流我要计算数据中击掌的次数。这意味着,当数据条纹穿过窗口时,我将传入多个帧,其中有相同的击掌,我的网络将连续几次返回击掌标签。由于网络中的错误——40分之1的缺失——一些帧会被错误标记。如果我假设每个标为击掌的标量图实际上是它自己独特的运动,那么这两个东西都会导致计数器关闭。
所以,神经网络只是我计数器需要的整体逻辑的一部分。这几乎肯定适用于所有的深度神经网络解决方案。金宝搏官方网站你要开发一个可以对数据进行分类的模型,你显然想知道它是否有效,但除此之外,还有其他逻辑使这个网络成为一个实际的产品,重要的是整个系统也能工作。
现在,我的项目相当简单,如果它不能正确运行,风险也很低,但让我来介绍一下构建其余的击掌计数逻辑的方法。我构建了一个MATLAB脚本,可以读取加速数据,并将最新的1.4秒数据保存在缓冲区中。然后每隔三次采样时间,将缓冲后的数据预处理成一个尺度图,确保没有大于1的像素值,然后用分类函数在训练过的网络中运行。只有在距离上次击掌超过1.4秒的时候,我才会数新的击掌。这是我如何确保我只计算每一次击掌,因为它将完全离开缓冲区之前,我寻找一个新的。我是在MATLAB中做的,因为这个项目我只需要几行代码,但这整个东西也可以在Simulink中开发。金宝app
事实上,这是我的高柜台的Simulink版金宝app本。好吧,它几乎完全相同。差异是,而不是阅读加速度计Live,我选择刚刚读到我之前保存的5秒加速度配置文件。这一想法是我可以收集这些5秒的片段中的几个,在那里我确切地知道多少高vifs在该数据中,然后每当我更新网络或其他逻辑时都会在回归测试中使用它们。
除此之外,这个逻辑的其余部分都在做同样的事情。我在更新加速缓冲区,将它预处理成一个标量图,用我训练过的网络对它进行分类,然后计算击掌的次数。让我们打开scope并运行它,这样您就可以看到它的实际作用。
顶部图表显示了在开始时具有单个高五的加速度曲线的读取。柜台只寄存一个高五,如预期的那样,即使您可以看到几个刻度图被标记为高vifs,因为粉红色的火山正在横跨图像。要注意的另一件事是在实际高五个和计算时之间的这种延迟。这是由于我的网络接受了训练,以在图像中间识别高五个,或者发生在发生后大约十分之几秒。
Simulink的优点是,我现在可以把这个逻金宝app辑打包到它自己的子系统中,并把它用作更大系统的一部分。例如,这个模型显示了多回路PI控制器作用于机械臂的实现。也许如果我有足够的倾斜度,我可以用我的新子系统来确定这个机械臂是否做过类似击掌的动作。一旦我对这个实现感到满意,我就可以使用Simulink编码器来构建嵌入式C代码,并部署所有这些逻辑,包括我的深层神经网络金宝app到手臂本身。
我不是要构建这个任何进一步的因为我只是做一个视频演示几件事,但如果我想继续在这个项目中我的下一个步骤将是系统地尝试所有不同的手臂运动我能想到的,高5和non-high五运动。我甚至可能会让其他文化的人尝试一下,他们击掌的方式可能会不同。每一个用户动作被系统错误分类的实例,我都会保存这些数据,并将其添加到我的训练数据集中,以重新训练和完善网络。
通过这种方式,我不能保证有一个完美运行的网络,但我增加了解空间,在这个空间上我确信它会运行。这是深度神经网络的标准方法。我们还没有一个很好的系统的方法来验证它们,所以我们依靠这些抽样方法,比如蒙特卡罗方法来在整个解空间的网络中获得信心。这很可能也适用于您的项目,无论您是在寻找物质缺陷,挑选音频中的口头指令,还是对射频调制方案进行分类。你要把训练过的神经网络整合到你的整个系统中,在各种情况下测试它。
但是,无论我运行多少个不同的测试,无论我运行多少个不同的测试,都将始终存在尚未测试的解决方案空间。
因此,这是合成数据可能如此强大的地方。请记住在我们合成RF数据的第二个视频中,并且我们将使用它来培训网络?嗯,现在我们可以使用它来生成数百万不同的测试用例,并产生一个真正密集的解决方案空间采样。这将使我们在系统中只有一个巨大的信心 - 你知道只要合成的数据反映了现实。现在,我无法用我的高五个项目真的这样做,因为我没有很好地了解高瘘的加速度模式,因此不能容易地合成它。对于我的项目,它更容易物理测试它而不是合成测试数据。
但是不管你是否能够合成测试数据,你都希望在真实的世界中在真实的硬件上对系统进行最终测试。这就引出了我想说的另一件事部署你的网络和其他代码到目标计算机。
部署是很重要的,因为如果您的代码不能在它应该运行的硬件上运行,那么它就不重要了。我在描述中链接了一大堆关于直接从MATLAB和Simulink为嵌入式gpu、cpu和fpga生成深度学习网络优化代码的有用信息。金宝app这里我就不讲了。相反,我想用最后几分钟的时间来具体谈谈经过训练的网络的规模和速度。
对于将要部署到手表上的嵌入式CPU上的击掌计数器,考虑到网络的大小是很重要的。我从GoogleNet开始,如果我打开Deep Network Designer,我可以很快地了解到这个网络的规模。这个神经网络有七百万个参数。这对于一个简单的击掌计数程序来说是相当庞大的。
如果内存空间或执行速度是一个问题,那么我将不得不找到一种方法,使它更小。有几个选择。首先,我可以从一个更小的预先训练过的网络开始——比如Squeezenet,它只有100多万个参数,然后再次使用迁移学习来重新训练它,让它击掌。我的想法是,也许我不需要更大的GoogleNet提供的准确性或功能细节。这里,我做了和上个视频中一样的迁移学习步骤重新训练了Squeezenet。至少对于这些特定的参数,这个网络的准确率是90%。所以,比GoogleNet稍微不准确。现在我可以将重新训练过的SqueezeNet导出到工作空间,并在我的MATLAB或Simulink仿真中运行它。金宝app但是看看这个,我们可以看到这个百万参数的网络仍然是3兆字节。
现在,如果这个大小仍然是个问题,我也可以尝试通过修剪或量化来减少网络的大小,而不是寻找一个更小的相关网络。修剪是删除网络中的一些参数,这些参数对对特定数据的分类没有多大帮助。量化意味着在你的网络中采用单精度或双精度权重和偏差,并将它们量化为8位比例整数数据类型。其思想是,我们仍然可以从网络获得相同的性能,而不必使用高精度的数据类型。
为了让你们对简化网络有个概念,让我给你们看一下对我训练的网络进行量化的结果。我正在使用深度网络量化器应用程序来导入我训练过的模型,并将其量化为8位比例整数。这花了我几分钟的时间,我跳过了,但这里重要的指标是网络被压缩了75%它对其准确性没有可测量的影响。
所以,它有相同数量的参数,但它的内存大小是四分之一。除此之外,我还可以尝试修剪网络,以减少参数的数量,同时也不会影响精确度,但我将暂时保留这个模型。
希望您能够看到,通过预先训练的网络、迁移学习、修剪和量化,您可能能够得到一个规模和效率都足够适合您的应用程序的模型。
但如果不能,那么最后一个选择是从头构建自己的网络体系结构。这个选项需要最多的训练数据和最多的训练时间,因为一开始网络没有任何概念,所以它必须学习所有东西。
另一个缺点是需要对不同的网络架构有很好的理解,才能从零开始创建一个高效的网络架构。但是,这就是可能发生权衡的地方。您需要从头开始进行多少专门的开发?您需要您的体系结构有多高效和多快?
我的high five计数器可能会受益于一个更小、更专业的架构,因为它必须部署到手表的嵌入式处理器上,而一个寻找物质缺陷的系统可以运行在带有GPU的专用桌面电脑上。如果不需要立即返回结果,它甚至可能不需要实时运行。
所以,我想让你们从中学到的是关于深度学习你需要考虑一些事情。其中一些问题是,为了能够找到和分类数据中的模式,网络需要多深?你能通过一个相关的网络和迁移学习吗?您将如何访问已标记的培训数据,以及如何确保数据覆盖整个解决方案空间?一般来说,您需要更多的训练数据来训练更大的网络,并从头开始训练网络。你将如何在你的网络和整个系统中获得信心?你能合成数据吗,你能运行模拟吗,还是所有的测试都需要在现场进行?
每个项目都没有一个答案,但希望您可以开始看到深度学习的好处和可能性。也许你现在有一个工程问题,现在解决方案归功于能够检测到数据中的复杂模式。如果是这样,深度学习是一种方法,您可能希望作为贸易研究的一部分考虑。它可能比你想象的更容易。
这就是我要讲的。不要忘记查看我在视频描述中留下的资源。那里有很多好东西。如果你不想错过任何其他的Tech Talk视频,不要忘记订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制主题。感谢收看,我们下期节目再见。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。