工程师深度学习,第5部分:部署深度学习模型
从系列中:面向工程师的深度学习
布莱恩•道格拉斯
一旦你有了一个深度神经网络来分类你的数据,你就可以把它合并到一个更大的设计中。本视频介绍了额外的工作和注意事项,以帮助您获得信心,使模型能够处理未查看的数据,并按预期与其他系统组件交互。您还可以将深度神经网络部署到需要特定性能特征的目标设备上。
在上个视频中,我展示了如何通过重新训练现有的深度神经网络来构建击掌计数器。我从基本上什么都没有变成了大约2小时就能跑完的东西,这真是太棒了!
但是,简单地获得一个可以对数据进行分类的模型并不是深度学习工作流程的终点。我们需要考虑的其他一些事情是,训练过的网络通常是一个更大系统的一部分,我们希望能够将其纳入到完整的设计中。我们还希望对模型能够处理不可见的数据以及它能够像预期的那样与其他系统组件交互有一定的信心。最终我们想把它部署到一个需要特定性能特征的目标设备上。每一个都需要在上个视频中所做的以外做更多的工作和考虑。这就是我们现在要讲的内容。我希望你能坚持下去。我是Brian,欢迎来到MATLAB,科技讲座。
我们可以用一个问题来总结这个视频。我有一个训练有素的网络,接下来呢?在我们开始之前,我想重申我一贯的警告,这个视频并不打算涵盖所有内容。我只想介绍一些概念让你们思考整个问题。我在描述中留下了更深入的资源链接。
好吧,我们开始吧。
在上一集视频的最后,我们得到了一个GoogleNet模型它被重新训练来识别两种模式,它在寻找这些粉红色的火山并将它们归类为击掌,而我们通过网络发送的任何其他东西都被归类为不击掌。那么,下一步是什么?嗯,我认为想要知道网络是否有效是合理的。现在,我们知道它在某种程度上是有效的,因为在训练过程中,它使用了40张验证图像来评估模型的准确性,而它只标注错了40张中的一张。
这当然很棒,但有两件事我想指出。首先,尽管我们对这个模型适用于40张验证图像有一定的信心,但我们不一定知道它适用于尚未见过的图像。现在,如果40个验证图像很好地覆盖了整个解决方案空间,那么我们可以确信网络只会遇到与这些图像之一类似的情况。然而,在这种情况下,40张图像足以获得我正在制作的视频的信心,但我认为这不足以覆盖网络在现实生活中可能看到的所有可能的手臂运动,所以如果我们要将这个网络部署到现场,我们将想要做一些额外的测试。
关于这个模型,我想指出的第二件事是,我们用相互不相关的标量图来验证它。我的意思是每一个都来自于它自己独立的手臂运动,但这不是我如何使用这个网络的情况。记住,我希望传递一个连续的标量图流,我想计算数据中击掌的次数。这意味着当数据穿过窗口时,我将传入多个包含相同击掌的帧,我的网络将连续多次返回击掌标签。由于网络中的错误——它漏掉了1 / 40——其中一些帧将被错误标记。这两件事都会导致计数器关闭如果我只是假设每个标为击掌的标量图实际上是它自己唯一的运动。
所以,神经网络只是我的计数器需要的整体逻辑的一部分。这几乎肯定是所有深度神经网络解决方案的情况。万博 尤文图斯你将开发一个可以对数据进行分类的模型,你显然想知道它是否有效,但除此之外,还有其他逻辑使网络成为实际产品,重要的是,系统作为一个整体也能工作。
现在,我的项目相当简单,如果它不能正常工作,风险也很低,但让我回顾一下我如何构建其余的击掌计数逻辑。我构建了一个MATLAB脚本,可以读取加速度数据,并将最新的1.4秒数据保存在缓冲区中。然后每隔第三个采样时间,将缓冲的数据预处理成一个标量图,确保没有大于1的像素值,然后用分类函数在训练好的网络中运行。如果距离上次击掌超过1.4秒,我才会计算一次新的击掌。这就是我如何确保我只计算每个击掌一次,因为它将在我寻找新的击掌之前完全离开缓冲区。我是在MATLAB中做的,因为这个项目只需要几行代码,但这整个东西也可以在Simulink中开发。万博1manbetx
事实上,这是我击掌计数器的Simulink万博1manbetx版本。嗯,几乎完全一样。不同之处在于,我没有实时读取加速度计,而是选择读取我之前保存的5秒加速配置文件。我的想法是,我可以收集几个这样的5秒片段,在这些片段中我确切地知道数据中有多少个击掌,然后在我更新网络或其他逻辑时将它们用于回归测试。
除此之外,这个逻辑的其余部分是做同样的事情。我正在更新加速缓冲区,将其预处理为标量图,用我训练过的网络对其进行分类,然后计算击掌的次数。让我们打开作用域并运行它,这样您就可以看到它的实际运行。
最上面的图表显示了加速度剖面的读数,在开始的时候有一个单独的击掌。正如预期的那样,计数器只记录了一个击掌,尽管你可以看到几个符号被标记为击掌,因为粉红色的火山在图像上划过。另一件需要注意的事情是,实际击掌和计算击掌的时间之间存在延迟。这是因为我的神经网络被训练成在图像中间,或者在它发生后的几十秒内就能识别出击掌。
好的,Simulink的好处在于,我现在可以万博1manbetx将这个逻辑打包到它自己的子系统中,并可以将它作为一个更大的系统的一部分使用。例如,这个模型展示了一个作用在机械臂上的多环PI控制器的实现。也许如果我愿意的话,我可以用我的新子系统来确定这个机械臂是否做过类似击掌的动作。一旦我对这个实现感到满意,我就可以使用Simulink编码器来构建嵌入式C代码,并将所有这些逻辑包括我的深度神经网络部署万博1manbetx到手臂本身。
现在我实际上不打算进一步构建这个,因为我只是做一个视频来演示一些事情,但如果我真的想继续这个项目,我的下一步将是系统地尝试我能想到的所有不同的手臂动作,包括击掌和非击掌的动作。我甚至可能会让来自不同文化的人来试试击掌。每一个用户动作被系统错误分类的实例,我都会保存这些数据,并将其添加到我的训练数据集中,以重新训练和优化网络。
现在,通过这种方式,我无法保证拥有一个完美运行的网络,但我正在增加解决方案空间,我相信它将在其中执行。这是深度神经网络的标准方法。我们还没有一个很好的系统的方法来验证它们,所以我们依靠这些抽样方法,比如蒙特卡罗方法,来获得整个解空间上网络的信心。这很可能也是你的项目的情况,无论你是在寻找材料缺陷,挑选音频中的口头命令,还是分类射频调制方案。你要把训练过的神经网络集成到你的整个系统中,并在各种情况下进行测试。
但是正如您所看到的,无论我运行多少不同的测试,解决方案空间中总会有未测试的部分。
这就是合成数据的强大之处。还记得在第二集视频中,我们合成了射频数据吗,我们的想法是用它来训练一个网络?好了,现在我们可以使用它来生成数百万个不同的测试用例,并生成解决方案空间的一个非常密集的采样。只要合成的数据反映了现实,我们就会对这个系统有很大的信心。现在,我不能在击掌项目中这样做,因为我对击掌中可能出现的加速度模式没有很好的理解,因此不能很容易地综合它。对于我的项目,物理测试比综合测试数据更容易。
但是不管您是否可以综合测试数据,您都希望在真实世界中在真实硬件上对系统进行最终测试。这就引出了我想讲的另一件事,那就是将网络和其他代码部署到目标计算机上。
部署是很重要的,因为你的代码是否可以运行并不重要,如果它不能在它应该运行的硬件上运行。我在描述中链接了大量关于直接从MATLAB和Simulink为嵌入式gpu、cpu和fpga生成深度学习网络优化代码的信息。万博1manbetx这里我就不详细讲了。相反,我想用最后几分钟的时间具体谈谈训练过的网络的规模和速度。
对于要部署到手表上的嵌入式CPU上的击掌计数器,考虑网络的大小是很重要的。我从GoogleNet开始,如果我打开深度网络设计器,我可以很快地了解这个网络的大小。这个神经网络有七百万个参数。这对于一个简单的击掌计数程序来说是相当庞大的。
如果内存空间或执行速度是一个问题,那么我将不得不找到一种方法使它更小。有几个选择。首先,我可以从一个较小的预训练网络开始——比如Squeezenet,它只有100多万个参数,然后再次使用迁移学习来重新训练它来击掌。这个想法可能是我不需要更大的GoogleNet提供的准确性或功能细节。在这里,我做了和上个视频中一样的迁移学习步骤,重新训练了Squeezenet。至少对于这些特定的参数这个网络的准确率是90%所以,它比GoogleNet稍差一点。现在我可以将重新训练的SqueezeNet导出到工作空间,并在MATLAB或Simulink仿真中运行它。万博1manbetx但是看看这个,我们可以看到这个百万参数的网络仍然是3兆字节。
现在,如果这个规模仍然是一个问题,而不是寻找一个更小的相关网络,我也可以尝试通过修剪或量化来减少我的网络的规模。剪枝是删除网络中对特定数据分类没有多大帮助的一些参数。量化意味着将网络中的单精度或双精度权重和偏差量化为8位比例整型数据类型。其思想是,我们仍然可以从网络中获得相同的性能,而不必使用高精度的数据类型。
为了让你了解在一个实例中减少网络会是什么样子,让我向你展示量化我训练过的网络的结果。我正在使用深度网络量化器应用程序来引入我训练过的模型,并将其量化为8位缩放的整数。这花了我几分钟的时间,我跳过了,但这里重要的度量是网络被压缩了75%,并且它对其准确性没有可测量的影响。
所以,它有相同数量的参数,但是内存大小只有四分之一。除此之外,我还可以尝试修剪网络,以一种不影响准确性的方式减少参数的数量,但我现在将保持这个模型不变。
希望您可以看到,通过预先训练的网络、迁移学习、修剪和量化,您可能能够得到一个适合应用程序的足够大的模型和效率。
但如果不能,那么最后一个选择是从头构建自己的网络架构。这个选项需要最多的训练数据和最多的训练时间,因为一开始网络没有任何概念,所以它必须学习所有东西。
另一个缺点是需要很好地理解不同的网络架构才能从头创建一个高效的网络架构。但是,这就是需要权衡的地方。您需要从头开始进行多少专门的开发,以及您需要您的体系结构有多高效和快速。
我的击掌计数器可能受益于一个更小、更专业的架构,因为它必须部署到手表上的嵌入式处理器上,而寻找材料缺陷的系统可以在带有GPU的专用桌面计算机上运行。如果不需要获得即时结果,它甚至可能不需要实时运行。
所以,我想让你们从中学到的是,关于深度学习,有一些事情是你需要考虑的。其中一些问题是网络需要多深才能找到数据中的模式并对其进行分类?你能通过一个相关的网络和迁移学习吗?你将如何访问标记的训练数据,你将如何确保数据覆盖整个解决方案空间?一般来说,你需要更多的训练数据来训练更大的网络,并从头开始训练网络。你将如何在你的网络和整个系统中获得信心?你能综合数据吗,你能运行模拟吗,还是所有的测试都需要在现场完成?
每个项目都没有统一的答案,但希望你能开始看到深度学习的好处和可能性。也许您现在正在处理一个工程问题,解决方案可以归结为能够检测和标记数据中的复杂模式。如果是这样,深度学习是一种你可能想要考虑作为你的贸易研究的一部分的方法。这可能比你想象的要简单。
这就是我这集视频要讲到的地方。不要忘记查看我在视频描述中留下的资源。那里有很多好东西。如果你不想错过其他Tech Talk视频,不要忘记订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我在那里介绍了更多的控制主题。感谢收看,我们下期见。
相关产品s manbetx 845
了解更多
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。