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