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