主要内容

深层网络量化器

数字转换深神经网络对8位整数数据类型

描述

使用深层网络量化器应用以减少内存需求的深层神经网络权重量化,偏见,和激活卷积层8位整数数据类型。使用这个应用程序,您可以:

  • 可视化的动态范围卷积神经网络层深。

  • 选择个人网络层数字转换。

  • 评估量化网络的性能。

  • 生成GPU代码部署量化网络使用GPU编码器™。

  • 生成HDL代码部署量化网络使用深度学习FPGA HDL工具箱™。

  • 生成c++代码部署量化网络手臂Cortex-A单片机使用MATLAB®编码器™

深度学习工具箱™模型量化库支持包是一个免费的插件,你可以下载使用附加Explorer。金宝app另外,看到深度学习工具箱量化模型库。了解数字转换和部署所需的产品深入学习网下载188bet金宝搏络GPU, FPGA,或CPU环境,看看量化工作流先决条件

打开深层网络量化器的应用

  • MATLAB命令提示:输入deepNetworkQuantizer

  • MATLAB将来发布:应用程序选项卡,在机器学习和深度的学习,点击应用程序图标。

例子

全部展开

探索的行为与量化卷积神经网络层,使用深层网络量化器应用。本例中对可学的卷积层的参数squeezenet神经网络后再培训网络分类根据新图像火车深入学习网络对新图像进行分类的例子。

这个示例使用DAG网络与GPU执行环境。

网络数字转换加载到基本工作空间。

负载squeezenetmerch
网= DAGNetwork属性:层:[68×1 nnet.cnn.layer.Layer]连接:[75×2表]InputNames:{“数据”}OutputNames: {“new_classoutput”}

定义校准和验证数据。

运动网络应用程序使用校准数据和收集的动态范围重量和偏见的卷积和完全连接层的网络和动态范围激活所有层的网络。最好的量化结果,校准数据必须输入到网络的代表。

应用程序使用量化后的验证数据来测试网络了解的有限的范围和精度的影响量化可学的卷积层网络的参数。

在这个示例中,使用的图像MerchData定义一个数据集augmentedImageDatastore调整对象的数据网络。然后,将数据分为校准和验证数据集。

解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);[calData, valData] = splitEachLabel (imd, 0.7,“随机”);aug_calData = augmentedImageDatastore ([227 - 227], calData);aug_valData = augmentedImageDatastore ([227 - 227], valData);

在MATLAB命令提示符下,打开应用程序。

deepNetworkQuantizer

在这个应用程序中,单击并选择数字转换网络

应用程序验证你的执行环境。有关更多信息,请参见量化工作流先决条件

在对话框中,选择执行环境和网络数字转换的基础工作。对于这个示例,选择一个GPU执行环境和DAG网络,

应用程序显示选定的网络层图。

校准将来发布的部分校准数据,选择augmentedImageDatastore对象从工作区包含校准数据,calData

点击校准

深层网络量化器运动网络使用校准数据和信息收集范围可学的参数在网络层。

校准完成后,应用程序显示一个表包含重量和偏见的卷积和完全连接层网络和动态范围的各层网络的激活,在校准他们的最小和最大值。右边的表,应用程序显示的动态范围参数的直方图。灰色区域的直方图显示的数据不能代表的量化表示。如何解释这些直方图的更多信息,参见量子化的神经网络

数字转换列的表,指示是否可学的参数进行量化在层。层不卷积层不能量化的,因此不能被选中。层没有量化的量化后留在单精度。

验证将来发布的部分验证数据,选择augmentedImageDatastore从基本工作空间包含验证数据对象,aug_valData

验证将来发布的部分量化的选择,选择默认的度量函数。

点击数字转换和验证

深层网络量化器量化权重、激活和偏见的卷积层网络扩展8位整数数据类型和使用验证数据网络运动。应用程序决定了一个默认度量函数用于验证基于网络的类型是量子化的。一个分类网络,应用程序使用(精度。

验证完成后,应用程序显示的结果验证,包括:

  • 度量函数用于验证

  • 度量函数量化前后的结果

  • 内存需求量化(MB)之前和之后的网络

如果你想使用一个不同的度量函数进行验证,例如使用前5精度度量函数而不是默认的(精度度量函数,您可以定义一个自定义的度量函数。这个函数保存在一个本地文件。

函数精度= hComputeModelAccuracy (predictionScores,净,数据存储)% %计算模型级精度的统计数据%负载地面实况tmp = readall(数据存储);groundTruth = tmp.response;%与预测标签与实际地面真理predictionError = {};idx = 1:元素个数(groundTruth)[~,类似]= max (predictionScores (idx:));yActual = net.Layers(结束). class(补贴);predictionError{结束+ 1}= (yActual = = groundTruth (idx));% #好吧结束%和所有预测错误。predictionError = [predictionError {}):;精度= (predictionError) /元素个数之和(predictionError);结束

使用这个自定义度量函数,重新验证网络量化的选择,输入自定义度量函数的名称,hComputeModelAccuracy。选择添加添加hComputeModelAccuracy可用的指标函数列表的应用程序,选择hComputeModelAccuracy作为度量函数来使用。

自定义指标函数必须的道路上。如果度量函数没有路径,这一步将产生一个错误。

点击数字转换和验证

应用程序对网络和显示自定义度量函数的验证结果。

应用程序验证结果表中只显示标量值。查看验证结果与非标量输出自定义度量函数,导出dlquantizer对象如下所述,然后验证使用验证函数在MATLAB命令窗口。

量化和验证网络之后,您可以选择导出量化网络。

单击出口按钮。下拉选择出口数字转换器创建一个dlquantizer对象的基本工作空间。打开GPU编码器应用程序并生成GPU从量化神经网络代码,选择生成代码。生成GPU代码需要一个GPU编码器许可证。

如果量化网络的性能不满意,你可以选择不量化表中的一些层通过取消勾选层。看到效果,点击数字转换和验证一次。

这个例子展示了如何导入dlquantizer对象从基本工作空间深层网络量化器应用。这允许您开始量化的深层神经网络使用命令行或应用程序,并恢复你的工作后的应用程序。

打开深层网络量化器应用程序。

deepNetworkQuantizer

在这个应用程序中,单击并选择进口dlquantizer对象

深层网络量化器进口dlquantizer对象

在对话框中,选择dlquantizer从基工作区对象导入。对于这个示例,使用quantObj您在上面的示例中创建的数字转换为GPU神经网络的目标。

选择要导入的dlquantizer对象

应用进口中包含任何数据dlquantizer对象,收集在命令行。这个数据可以包括网络数字转换,校准数据,验证数据,校准数据。

这个应用程序显示一个包含中包含校准数据导入表dlquantizer对象,quantObj。右边的表,应用程序显示的动态范围参数的直方图。灰色区域的直方图显示的数据不能代表的量化表示。如何解释这些直方图的更多信息,参见量子化的神经网络

深层网络量化器的应用

探索的行为量化卷积层神经网络,使用深层网络量化器应用。本例中对可学的卷积层的参数LogoNet神经网络。

对于这个示例,您需要的产品上市下载188bet金宝搏FPGA量化工作流先决条件

额外的要求,请参阅量化工作流先决条件

创建一个文件在你当前的工作目录getLogoNetwork.m。在文件中,输入:

函数网= getLogoNetwork如果~ isfile (“LogoNet.mat”)url =“//www.tatmou.com/金宝appsupportfiles/gpucoder/cnn_models/logo_detection/LogoNet.mat”;websave (“LogoNet.mat”url);结束data =负载(“LogoNet.mat”);网= data.convnet;结束

加载pretrained网络。

snet = getLogoNetwork;
snet = SeriesNetwork属性:层:[22×1 nnet.cnn.layer.Layer] InputNames: {“imageinput”} OutputNames: {“classoutput”}

为量化定义校准和验证数据使用。

运动网络应用程序使用校准数据和收集的动态范围重量和偏见的卷积和完全连接层网络。软件还练习的动态范围激活LogoNet网络的所有层。最好的量化结果,校准数据必须输入LogoNet网络的代表。

量化后,应用程序使用验证数据集测试网络了解的有限的范围和精度的影响量化可学的卷积层网络的参数。

在这个示例中,使用的图像logos_dataset校准和验证LogoNet网络数据集。定义一个augmentedImageDatastore调整对象的数据网络。然后,将数据分为校准和验证数据集。

加快校准和验证过程中使用的一个子集calibrationDatavalidationData。存储新的减少校准数据集calibrationData_concise和新的减少验证数据集validationData_concise

curDir = pwd;newDir = fullfile (matlabroot,“例子”,“deeplearning_shared”,“数据”,“logos_dataset.zip”);拷贝文件(newDir curDir);解压缩(“logos_dataset.zip”);imageData = imageDatastore (fullfile (curDir“logos_dataset”),“IncludeSubfolders”,真的,“FileExtensions”,“jpg”,“LabelSource”,“foldernames”);[calibrationData, validationData] = splitEachLabel (imageData, 0.5,“随机”);calibrationData_concise = calibrationData.subset (1:20);validationData_concise = vaidationData.subset (1:1);

在MATLAB命令提示符,打开深网络量化器的应用。

deepNetworkQuantizer

点击并选择数字转换网络

应用程序验证你的执行环境。

选择执行环境和网络数字转换的基本工作空间。对于这个示例,选择一个系列FPGA执行环境和网络snet

选择一个网络和执行环境

应用程序显示选定的网络层图。

校准部分应用程序将来发布的校准数据,选择augmentedImageDatastore从包含校准的基本工作空间数据对象calibrationData_concise

点击校准

深层网络量化器运动网络应用程序使用校准数据和信息收集范围可学的参数在网络层。

校准完成后,应用程序显示一个表包含重量和偏见的卷积和完全连接层网络。也显示的动态范围内各层网络的激活,在校准他们的最小和最大值。应用程序显示直方图动态范围的参数。灰色区域的直方图显示的数据不能代表的量化表示。如何解释这些直方图的更多信息,参见量子化的神经网络

深层网络量化器校准

数字转换列的表,指示是否可学的参数进行量化在层。你不能数字转换层不卷积层。层不量化留在单精度。

验证部分应用程序将来发布的验证数据,选择augmentedImageDatastore从包含验证的基本工作空间数据对象validationData_concise

硬件设置将来发布的部分,选择从表中列出的选项:

模拟环境 行动
MATLAB (MATLAB模拟) 在MATLAB模拟了量化网络。验证单精度的量化网络通过比较性能的网络版本。
英特尔Arria 10 SoC (arria10soc_int8)

将量化网络部署到一个英特尔®Arria®10 SoC董事会通过arria10soc_int8比特流。验证单精度的量化网络通过比较性能的网络版本。

Xilinx ZCU102 (zcu102_int8)

部署Xilinx量化网络®Zynq®UltraScale +™MPSoC ZCU102 10 SoC董事会通过zcu102_int8比特流。验证单精度的量化网络通过比较性能的网络版本。

Xilinx ZC706 (zc706_int8)

部署量化网络Xilinx zynq - 7000 ZC706董事会通过zc706_int8比特流。验证单精度的量化网络通过比较性能的网络版本。

当您选择英特尔Arria 10 SoC (arria10soc_int8),Xilinx ZCU102 (zcu102_int8),或Xilinx ZC706 (zc706_int8)选项,选择要使用的接口部署和验证量子网络。的目标接口表中列出的选项。

目标的选择 行动
JTAG 项目目标FPGA板中选择模拟环境通过使用一个JTAG电缆。有关更多信息,请参见JTAG连接(深度学习HDL工具箱)
以太网 项目目标FPGA板中选择模拟环境通过以太网接口。为你的目标在指定的IP地址IP地址

对于这个示例,选择Xilinx ZCU102 (zcu102_int8)中,选择以太网,并输入IP地址。

深层网络量化器硬件设置

验证部分应用程序将来发布的量化的选择,选择默认的度量函数。

点击数字转换和验证

深层网络量化器应用量化权重、激活和偏见的卷积层网络扩展8位整数数据类型和使用验证数据网络运动。应用确定度量函数用于验证基于网络的类型是量子化的。

类型的网络 度量函数
分类

(精度——网络的准确性

对象检测

平均精度——平均精度检测结果。看到evaluateDetectionPrecision(计算机视觉工具箱)

回归

均方误差——网络的均方误差

语义分割 evaluateSemanticSegmentation(计算机视觉工具箱)-评估语义分割数据与地面真理
单射探测器(SSD)

WeightedIOU——平均每个类的借据,加权类像素的数量

验证完成后,应用程序显示的结果验证,包括:

  • 度量函数用于验证

  • 度量函数量化前后的结果

深层网络量化器验证

如果你想使用一个不同的度量函数进行验证,例如使用前5精度度量函数而不是默认的(精度度量函数,您可以定义一个自定义的度量函数。这个函数保存在一个本地文件。

函数精度= hComputeAccuracy (predictionScores,净,数据存储)% %计算模型级精度的统计数据%负载地面实况tmp = readall(数据存储);groundTruth = tmp.response;%比较预测标签与地面真理predictionError = {};idx = 1:元素个数(groundTruth)[~,类似]= max (predictionScores (idx:));yActual = net.Layers(结束). class(补贴);predictionError{结束+ 1}= (yActual = = groundTruth (idx));% #好吧结束%和所有预测错误。predictionError = [predictionError {}):;精度= (predictionError) /元素个数之和(predictionError);结束

重新验证网络通过使用这个自定义度量函数,量化的选择,输入自定义度量函数的名称hComputeAccuracy。选择添加添加hComputeAccuracy可用的指标函数列表的应用程序,选择hComputeAccuracy作为度量函数来使用。

自定义指标函数必须的道路上。如果度量函数没有路径,这一步骤产生一个错误。

深层网络量化器选择自定义度量函数

点击数字转换和验证

应用程序对网络和显示自定义度量函数的验证结果。

深层网络量化器和自定义验证度量函数

应用程序验证结果表中只显示标量值。查看验证结果与nonscalar输出自定义度量函数,导出dlquantizer对象,然后验证量化网络使用验证函数在MATLAB命令窗口。

量化和验证网络之后,您可以选择导出量化网络。

单击出口按钮。在下拉列表中,选择出口数字转换器创建一个dlquantizer对象的基本工作空间。你可以量化的网络部署到你的目标FPGA板和检索利用MATLAB的预测结果。看到的,部署量化网络的例子(深度学习HDL工具箱)

相关的例子

参数

默认情况下,深层网络量化器应用确定度量函数用于验证基于网络的类型是量子化的。

类型的网络 度量函数
分类

(精度——网络的准确性

对象检测

平均精度——平均精度检测结果。看到evaluateDetectionPrecision(计算机视觉工具箱)

回归

均方误差——网络的均方误差

语义分割

WeightedIOU——平均每个类的借据,加权类像素的数量。看到evaluateSemanticSegmentation(计算机视觉工具箱)

您还可以指定一个自定义度量函数来使用。

介绍了R2020a