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