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