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