杰克erickson,Mathworks
深度学习推理是如此密集的计算,以至于在基于fpga的应用程序中使用它常常需要对硬件架构和深度学习网络本身进行大量定制。能够在早期探索中进行迭代对于在执行过程中实现目标至关重要。
深度学习HDL Toolbox™与Matlab中的深度学习工具箱™密切合作®让深度学习从业者和硬件设计师原型并进行大规模变化以满足系统要求。此视频显示如何:
FPGA是用于在边缘应用中的深度学习推理的流行设备,因为编程定制硬件提供速度和功率效率。但在固定硬件资源上实施深度学习是具有挑战性的。
如果在像亚历尼网这样简单的网络中,就在第一个卷积层中,有96个过滤器为11x11x3。单精度数据是32位,因此过滤参数为140k的RAM。但现在作为这些过滤器跨越图像,每个滤波器都是矩阵乘法 - 所以这是1.15亿浮点的操作。这些乘法累积映射到FPGA上的专业资源,但即使是高端设备也只有几千种。并且这些过滤器参数真正加起来,因为您在网络中深入了解。
深度学习HDL工具箱附带了一个通用的深度学习处理器,该处理器架构为时多路卷积层,因此您可以将各种各样的网络定位到FPGA。但是激活和参数需要进出内存,这就增加了延迟,而计算本身也增加了延迟。
为了说明问题,本示例检查螺母和螺栓的缺陷,并使用经过训练的AlexNet网络对其进行分类。预处理调整尺寸,选择感兴趣的区域,然后使用网络对零件进行分类,判断零件是否有缺陷,然后后处理对结果进行注释。
让我们说这是在检查生产线,所以我们需要使用高速摄像头,每秒处理120帧。
我们可以在MATLAB算法中添加5行MATLAB代码,使其在FPGA上运行。
注意,在编译之后,参数需要140兆字节——我们将在后面讨论这个问题。在部署和运行之后,结果看起来不错,但概要文件显示,有太多的延迟,以保持传入帧率。
如果系统要求是我们无法丢弃帧,我们需要进行一些重大变化,这将在深度学习网络和处理器的设计者之间进行一些合作。
我们可以看的第一件事是网络设计。每个层都会增加网络延迟。如果例如,深度学习工程师可以从系统架构师保证,所有图像都像测试集中的那样简单,那么他们可以在网络的后一部分中删除一些卷积层。这导致新的自定义网络几乎是原始AlexNet的大小的一半。我们重新培训了这个新网络,并确认了准确性没有太大降低。
因此,我们可以在同一FPGA比特流中再次加载新的网络和原型。您将注意到的第一件事是需要减少内存,从140MB到84MB。在FPGA上运行表明,我们仍然获得正确的分类结果,具有显着的速度。但它仍然缺乏我们的目标。
另一个有很大区别的领域是量化网络。例如,如果我们量化为int8数据类型,我们可以真正减少需要存储在芯片外RAM中的数据量和从芯片外RAM中检索的数据量。这也减少了延迟。它减少了乘法积累所需的硬件资源,因此我们可以进行更多的并行操作来提高吞吐量。
从Add-On Explorer下载深度学习量化支持包,并打开deepNetwo金宝apprkQuantizer应用程序。加载你想量化的网络。然后使用我们已经建立的数据存储进行校准。校准通过现有网络运行一组图像,以收集所需的权重、偏差和激活范围。这些直方图以灰色表示无法用量化类型表示的数据,蓝色表示可以表示的数据,深色表示频率较高的箱子。如果可以接受,量化参数并加载数据存储以验证量化数据的准确性——您可以在这里看到结果——然后导出网络。
这个量子化的网络需要在一个也量子化为int8的处理器上运行。我们可以与硬件团队一起定制深度学习处理器,以添加更多并行线程,并可能增加时钟频率,但现在让我们看看这在我们下载的zcu102位流的int8版本上的执行情况。编译后,参数现在已经减少到68兆字节。我们仍然可以得到正确的预测结果,这将延迟减少到可以运行在139帧每秒,这超过了我们的目标!
因此,通过从MATLAB内部获得关于FPGA性能指标的反馈,我们能够通过首先删除一些不必要的层,然后量化到int8来进行一些较大的调整。现在我们知道,我们有一个深度学习网络,它将在FPGA上的深度学习处理器上运行,具有我们的应用程序所需的性能。
特色产品
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。