前言
接着上文,我们知道了Int8量化的操作过程是:
- 转换数据集获得Annotations文件。
- (可选的)评估低精度模型性能。
- 校验模型。
- 评估结果模型。
可以看到在用Calibaration Tool进行Int8量化之前需要先解决如何将我们的原始数据集转为Annotations文件以及我们如何用精度检查工具(Accuracy Checker Tool)去评估我们的量化后模型的表现。其中将原始数据集转换为Annotations文件的时候用命令是比较方便,如果懒得写配置文件的话。而要使用精度检查工具,则必须写配置文件了,具体见本文后面的详细介绍。
精度检查器
精度检查实例
在这个例子中,我们来浏览一下要评估一个深度学习模型需要哪些步骤,我们以SampLeNet作为例子。
1. 下载和解压数据集
在这个示例中,我们将使用玩具数据集,我们称之为示例数据集,它包含10个不同类别的总共10k
个图像(分类问题),实际上是CIFAR10数据集转换为png
(图像转换将在评估过程中自动完成)。你可以从官网下载CIFAR10数据集。然后解压下载下来的CIFAR10数据集到sample文件夹:
tar xvf cifar-10-python.tar.gz -C sample
2. 评估示例拓扑
通常需要编写配置文件,描述拓扑的评估过程。已经有了使用OpenVINO框架评估SampLeNet的配置文件,请仔细阅读。你需要安装Caffe的模型优化器来运行Caffe模型。如果你不想使用Caffe,请直接将Caffe模型转换成:
model: SampleNet.xml
weights: SampleNet.bin
accuracy_check -c sample/sample_config.yml -m data/test_models -s sample
使用参数:-c
评估配置文件的路径,-m
模型被存储的路径,-s
数据集的路径。
如果一切正常,你应该能得到75.02%
的准确率。
现在尝试编辑配置文件,在其他设备或框架(如Caffe、MxNet或OpenCV)上运行SampLeNet,或者直接转到你的拓扑!
注意,拓扑就是指的网络,因为我们知道网络实际上就是一个有向无环图(DAG)。
如何配置Caffe启动程序
要使用Caffe启动器,你需要在你的配置文件下的lunchers
段添加caffe
字段然后提供下面的参数:
device
- 指定要用于推断的设备(cpu、gpu_0
等)。model
- Caffe的prototxt文件的路径。weights
-Caffe的weights文件的路径。adapter
- 解决将原始输出转换为数据集表示的问题,一些适配器是特定于框架的。后面会详细介绍adapter
的详细使用说明。
你还可以使用batch
为模型指定批处理大小,并允许使用特定参数将输入层reshape
为数据形状:allow_reshape_input
(默认值为False
),这个应该是Faster-RCNN的ROI Pooling之类的层会使用。
在配置中指定模型输入
如果你的模型有几个输入,你应该在你配置文件的启动器子段用一个inputs
参数提供一个输入列表。每个输入说明应包含以下信息:
name
- 网络的输入层名字。type
- 输入值的类型,它对填充策略有影响。可选:CONST_INPUT
- 常量填充,需要提供一个常量值。IMAGE_INFO
- 用于将有关输入形状的信息设置到网络层的特定值(用于基于Faster RCNN的拓扑中)。 你不需要提供值,因为它将在运行时计算。 格式值为Nx [H,W,S]
,其中N
是批处理大小,H
-原始图像高度,W
-原始图像宽度,S
-原始图像通道数(默认为1
)。INPUT
- 网络输入的数据流(例如图像)。 如果你有多个数据输入,则应提供标识符的正则表达式作为值,以指定