杰克·埃里克森MathWorks
深度学习推理是如此密集的计算,以至于在基于fpga的应用程序中使用它常常需要对硬件架构和深度学习网络本身进行大量定制。能够在早期探索中进行迭代对于在执行过程中实现目标至关重要。
深度学习HDL工具箱™与MATLAB中的深度学习工具箱™紧密合作®让深度学习的实践者和硬件设计人员进行原型,并进行大规模的更改,以满足系统需求。本视频演示如何:
fpga是边缘应用中用于深度学习推断的流行设备,因为编程定制硬件可以提供速度和功耗效率。但是,在固定硬件资源上实现深度学习具有挑战性。
如果你看一个像AlexNet这样的简单网络,仅仅在第一个卷积层,就有96个11x11x3的过滤器。单精度数据是32位的,所以滤波器参数有140k的RAM。但现在,当这些滤镜跨越图像时,每个滤镜都是一个矩阵乘法累加——所以这是1.05亿个浮点运算。这些倍数累积映射到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国家站点没有针对您所在位置的访问进行优化。