基于FPGA的深度学习网络原型与调整
深度学习推理的计算量非常大,以至于在基于fpga的应用程序中使用它通常需要对硬件架构和深度学习网络本身进行大量定制。能够在早期探索过程中进行迭代,对于在实现过程中实现您的目标至关重要。
深度学习HDL工具箱™与MATLAB中的深度学习工具箱™密切合作®让深度学习从业者和硬件设计师进行原型设计,并进行大规模更改以满足系统需求。这段视频告诉你如何:
- 在FPGA上对预先训练的工业缺陷检测网络进行原型设计
- 分析FPGA上运行的网络性能
- 调整网络设计并快速建立原型以查看结果
- 将网络和参数量化为int8数据类型
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中检索的数据量。这也减少了延迟。而且它减少了乘法累积所需的硬件资源,因此我们可以并行化更多以提高吞吐量。
从插件资源管理器下载深度学习量化支持包,并调出deepNetworkQuanti金宝appzer应用程序。加载要量化的网络。然后使用我们已经设置好的数据存储进行校准。校准通过现有网络运行一组图像,以收集所需的权重、偏差和激活范围。这些直方图用灰色表示无法用量化类型表示的数据,蓝色表示可以表示的数据,深色表示频率较高的箱。如果这是可接受的,量化参数并加载数据存储以验证量化数据的准确性(您可以在这里看到结果),然后导出网络。
这个量化的网络需要运行在一个同样量化为int8的处理器上。我们可以与硬件团队合作,定制深度学习处理器,以添加更多并行线程,并可能增加时钟频率,但现在让我们看看这在我们下载的zcu102比特流的int8版本上的表现如何。在编译之后,参数现在已经减少到68兆字节。我们仍然得到了正确的预测结果,这将延迟降低到可以以每秒139帧的速度运行,这超过了我们的目标!
因此,通过从MATLAB中获得FPGA性能指标的反馈,我们能够进行一些大的调整,首先删除一些不必要的层,然后量化到int8。现在我们知道我们有一个深度学习网络,它将在FPGA上的深度学习处理器上,具有我们应用程序所需的性能。
相关产品下载188bet金宝搏
特色产品
深度学习HDL工具箱
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。