周一岳
了解如何在MATLAB中量化、校准和验证深层神经网络®使用白盒方法在性能和精度之间进行权衡,然后将量化DNN部署到嵌入式GPU和FPGA硬件板上。
使用深度学习工具箱™模型量化库,您可以量化像Squeezenet这样的深度神经网络。在校准期间,该工具收集权重、偏差和激活的所需范围,然后提供可视化,以两个刻度的幂表示校准动态范围的直方图分布。然后,您可以使用GPU编码器™部署量化网络到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%。
本例使用的是消耗5mb磁盘内存的Squeezenet。
首先,我们从插件浏览器下载深度学习量化支持包,然后启动应用程序。金宝app
一旦我们加载网络以对GPU目标进行量化,然后使用已经设置好的数据存储进行校准。校准通过网络运行一组图像,以收集所需的权重、偏差和激活范围。
可视化表示校准动态范围的直方图分布,以两个刻度的幂表示。直方图中的灰色表示量化类型无法表示的数据,而蓝色表示量化类型可以表示的数据。最后,颜色越深,频率越高。
如果这是可以接受的,我们量化网络并加载数据存储以验证量化网络的准确性。
结果如下:在桌面GPU上测量时,与原来的浮点网络相比,内存减少了74%,而top-1精度没有损失。
一旦我们验证结果并导出DLoCurZeWorksObjor对象,我们可以使用GPU编码器将量化网络部署到英伟达JeTeSon板上。
我们对defect .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国家站点没有针对您所在位置的访问进行优化。