比尔•周MathWorks
了解如何在MATLAB中量化、校准和验证深度神经网络®使用白盒方法权衡性能和精度,然后将量化的DNN部署到嵌入式GPU和FPGA硬件板上。
使用深度学习工具箱™ 模型量化库,可以量化深层神经网络,如挤压网。在校准过程中,该工具收集权重、偏差和激活所需的范围,然后提供可视化,以两个刻度的幂表示校准动态范围的直方图分布。然后可以使用GPU编码器部署量化网络™ 给一个NVIDIA®杰森®AGX Xavier实现了2倍的性能加速和4倍的内存使用减少,与单一精度实现相比,只有约3%的top-1精度损失。
了解如何使用该工具量化网络并将其部署到Xilinx®ZCU102板连接到高速摄像机。最初的深度神经网络的吞吐量为每秒45帧。使用深度学习工具箱模型量化库,您可以将网络量化为INT8,将吞吐量提高到每秒139帧,同时保持正确的预测结果。
在这个演示中,我们将展示量化深度学习网络的工作流,并将它们部署到MATLAB的gpu和fpga上。
将深度学习网络部署到边缘设备是一项挑战,因为深度学习网络的计算密度相当大。例如,像AlexNet这样的简单网络超过200mb,而像VGG-16这样的大型网络超过500mb。
量化通过将网络中使用的浮点值转换为较小的比特宽度,同时将精度损失保持在最小,从而有助于减小网络的大小。
从R2020a开始,我们发布了使用白盒、易于使用的迭代工作流量化深度学习算法的能力。这种方法可以帮助您在性能和准确性之间做出权衡。
要查看此工作流程的实际情况,让我们以检测制造过程中可能发现的螺母和螺栓中的缺陷为例。
假设这是检查生产线的一部分,所以我们需要使用高速摄像机以120帧/秒的速度处理。
系统工程的需求将涉及精度、网络延迟和总体硬件成本等指标…
在网络的设计和实现过程中,它们往往会推动选择的权衡。
这个应用程序包括……
1) 预处理逻辑,用于调整和选择感兴趣的区域。。。
2)利用预先训练好的网络检测出零件的缺陷,…
3) 最后进行后处理,在屏幕上对结果进行注释。
让我们通过查看嵌入式GPU的部署来开始量化工作流。
通过量化和部署到运行在NVIDIA Jetson AGX Xavier上的gpu上,性能提升了2倍,内存减少了4倍,与单一精度实现相比,只有约3%的前1位精度损失。
此示例使用占用5 MB磁盘内存的Squeezenet。
首先,我们从Add-on Explorer下载深度学习量化支持包,然后启动应用程序。金宝app
一旦我们加载网络来量化GPU目标,我们就用已经设置好的数据存储进行校准。校准通过网络运行一组图像,以收集重量、偏差和激活所需的范围。
可视化显示了校准的动态范围的直方图分布,以两倍的比例。直方图中的灰色部分表示量化类型不能表示的数据,蓝色部分表示量化类型可以表示的数据。最后,颜色更深的是频率更高的箱子。
如果这是可接受的,我们量化网络并加载一个数据存储来验证量化网络的准确性。
这是结果。在桌面GPU上测量时,与原来的浮点网络相比,内存减少了74%,但没有损失前1位精度。
一旦我们验证了结果并导出了dlquantizer工作流对象,我们就可以使用GPU编码器将量化网络部署到NVIDIA Jetson板上。
我们对defective.png运行推断,我们希望该图像被分类为defective bolt。
现在,让我们将注意力转向Xilinx ZCU102板的网络量化和部署。该网络使用34 MB内存存储可学习参数,运行时内存为200 MB。
通过这5行MATLAB代码,我们可以加载运行在ZCU102板上的单精度比特流。我们看到它使用84MB内存,吞吐量为每秒45帧。这对我们的高速照相机来说不够快。
让我们选择对FPGA进行量化。
量化工作流完成后,我们将量化网络导出到MATLAB工作区。
量化网络需要在一个量化为INT8的处理器上运行,所以我们将使用下载的zcu102位流的INT8版本。
编译后,参数已减少到68MB,我们可以以每秒139帧的速度运行网络。我们也得到了正确的预测结果。
因此,正如你所看到的,深度学习量化应用程序帮助你减少gpu和fpga的深度学习网络的大小,同时最大限度地减少精度损失。如果您有兴趣了解更多信息,请查看R2020a或最新R2020b中的深度学习工具箱模型量化库。
你也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。