前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习算法优化系列十四 | OpenVINO Int8量化文档翻译(Calibaration Tool)

深度学习算法优化系列十四 | OpenVINO Int8量化文档翻译(Calibaration Tool)

作者头像
BBuf
发布2020-02-27 13:39:37
1.2K0
发布2020-02-27 13:39:37
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

前言

在2020年以前,OpenVINO(这里以OpenVINO2019年最新的一个版本为例)的Int8量化工具实现在openvino_2019.3.379\deployment_tools\tools\calibration_tool,因为文档比较难读,所以做个翻译记录在这里,便于使用OpenVINO的量化工具上手。要做Int8量化首先需要将你需要部署的模型Caffe/Pytorch/Tensorflow转化为OpenVINO的IR中间模型。此文档的原因为文档为openvino_2019.3.379\deployment_tools\tools\calibration_tool\README.md

Python* Calibaration Tool

介绍

校准工具可量化给定的FP16或FP32模型,并在使模型输入保持原始精度的情况下生成低精度的8位整数(INT8)模型。要了解INT8有关推理的好处的更多信息,请参考./docs/IE_DG/Int8Inference.md)

注意:INT8模型现在只被CPU plugin所支持。有关支持的配置的完整列表,请参见./docs/IE_DG/supported_plugins/Supported_Devices.md

您可以在两种模式下运行校准工具:

  • 标准模式以指定量化后的模型相对于原始模型在精度下降不超过一个阈值的方式运行。标准模式在量化过程中利用精度检查工具(./tools/accuracy_checker/README.md)来测试精度。使用此模式可获得可以在您的应用程序中直接使用的INT8 IR模型。
  • 简化模式生成的IR包含每个层的原始统计信息,而无需任何准确性检查就可以收集这些信息,这意味着带有统计信息的新IR模型的准确性可能会大大降低。因此,所有层均视为在INT8中执行。使用此模式可以了解将模型转换为INT8精度的潜在性能提升,并得出有关运行标准模式例程的结论。

校验工具是一个导入了openvino.tools.calibration包的Python*命令行工具。

系统要求

硬件要求取决于模型。通常,对于公告模型,RAM内存大小必须不少于16GB,硬盘必须具有不少于30 GB的可用空间(独立于操作系统)。临时目录用于在校准期间缓存输出的网络层。

用法

您可以使用一组适当的配置参数以标准或简化模式运行校准工具。

标准模式

在标准模式下,校准工具的配置方式与准确性检查器相同。

注意:出于一致性的原因,一部分参数的名称和含义与准确性检查器中的名称和含义相同,可以重复使用以运行准确性检查器。

要配置该工具,可以使用以下命令行参数:

校准工具和准确性检查器通用的命令行参数

参数

类型

描述

-c, --config

string

Required. 本地配置的yml文件的路径

-d, --definitions

string

Optional. 带有定义信息的yml文件的路径

-m, --models

string

Optional. 模型和权重的前缀路径

-s, --source

string

Optional. 数据集的前缀路径

-a, --annotations

string

Optional. Annotation格式文件路径

-e, --extensions

string

Optional. 扩展文件夹的前缀路径

--cpu_extensions_mode, --cpu-extensions-mode

string

Optional. CPU扩展指令集加速库:avx2或sse4

-C, --converted_models, --converted-models

string

Optional. 存储转换后的模型的路径

-M, --model_optimizer, --model-optimizer

string

Optional. Caffe模型优化器的路径

--tf_custom_op_config_dir, --tf-custom-op-config-dir

string

Optional. Tensorflow模型优化器的路径

--tf_obj_detection_api_pipeline_config_path, --tf-obj-detection-api-pipeline-config-path

string

Optional. 用于Tensorflow目标检测模型优化器的配置文件路径.

--progress

string

Optional. 进程报告: bar, print or None

-td, --target_devices, --target-devices

string

Optional. 用空格分隔的设备列表以进行推断

-tt, --target_tags, --target-tags

string

Optional. 用空格分隔的设备列表以进行启动

校准工具特定的命令行参数

参数

类型

描述

-p, --precision

string

Optional. 校准精度。默认值为INT8。在简化模式下,确定输出IR精度

--ignore_layer_types, --ignore-layer-types

string

Optional. 在量化过程中被跳过的网络层类型

--ignore_layer_types_path, --ignore-layer-types-path

string

Optional.在量化过程中被跳过的网络层类型文件路径

--ignore_layer_names, --ignore-layer-names

string

Optional. 在量化过程中被跳过的网络层名字

--ignore_layer_names_path, --ignore-layer-names-path

string

Optional.在量化过程中被跳过的网络层名字文件路径

--batch_size, --batch-size

integer

Optional. 批次大小,如果没有指定,则使用IR文件里面指定的值

-th, --threshold

float

Optional. 量化模型的准确性下降不应超过此阈值。应该是没有百分号的百分比值。(默认为1%)。

-ic, --benchmark_iterations_count, --benchmark-iterations-count

integer

Optional. 基准迭代次数 (默认为1).

-mn, --metric_name, --metric-name

string

Optional. 校准期间使用的评价指标名字。

-mt, --metric_type, --metric-type

string

Optional. 校准期间使用的评价指标类型。

-o, --output_dir, --output-dir

string

Optional. 用于存储转换后的模型的目录。如果未定义,则使用原始模型目录。

简化模式

此模式下的工具不使用准确性检查器,配置和注释文件,但是您需要指定IR .xml文件和数据集文件夹的路径。(可选)您可以指定扩展文件夹的前缀路径以及数据集文件夹中的图像数:

参数

类型

描述

-sm, --simplified_mode, --simplified-mode

Required.如果指定,校准工具将以简化模式运行以收集数据统计信息,而无需搜索最佳数据阈值.

-m

string

Required. xml文件的路径.

-s, --source

string

Optional. 数据集文件夹的路径

-ss, --subset

integer

Optional. 该选项仅与--simplified_mode一起使用。指定使用-s选项设置的文件夹中的图像数量。

-e, --extensions

string

Optional. 扩展文件夹的前缀路径。

-td, --target_devices, --target-devices

string

Optional. 用空格分隔的设备列表以进行推断。

-p, --precision

string

Optional. 校准精度。默认值为INT8。在简化模式下,确定输出IR精度。

-o, --output_dir, --output-dir

string

Optional. 用于存储转换后的模型的目录。如果未定义,则使用原始模型目录。

典型工作流程示例(标准模式)

介绍

校准工具读取原始FP16或FP32模型,校准数据集并创建低精度模型。低精度模型与原始模型有两个区别:

  • 1.定义了每个通道的统计信息。统计信息具有每个层和每个通道的最小值和最大值。模型统计信息以XML格式存储在Inference Engine中间表示文件(IR)中。
  • 2.定义了quantization_level层属性。该属性定义在推理过程中使用的精度。

先决条件

  • 模型:TensorFlow的Inception v1模型。你可以从这个地址下载模型:https://github.com/tensorflow/models/tree/master/research/slim
  • 数据集:ImageNet。你可以从这里下载:http://www.image-net.org/download.php。
  • YML配置文件:您可以在下面的configs目录中找到YML配置文件和YML定义文件:
    • definitions.yml-定义文件。
    • inception_v1.yml-针对TensorFlow*的Inception V1模型的配置文件。
    • ncf_config.yml -OpenVINO推理引擎中间表示格式的NCF模型的配置文件。
    • ssd_mobilenet_v1_coco.yml - 针对Tensorflow*的Mobilenet v1 ssd模型的配置文件。
    • unet2d.yml-Unet2D的OpenVINO前向推理引擎中间表示模型的配置文件。

如果你的自定以拓扑不支持准确性评价指标或者自定义数据集,请自己在openvino.tools.accuracy_checker Python包中添加其它一些实现部分。想要了解更多关于评价指标实现和数据集支持,可以去./tools/accuracy_checker/README.md查看。

下面是校准和评估模型的步骤:

  1. 转换数据集获得Annotations文件。
  2. (可选的)评估低精度模型性能。
  3. 校验模型。
  4. 评估结果模型。

可以使用校准之前的其他可选步骤来粗略估计可能的INT8性能。

转换数据集获得Annotations文件

校准数据集是训练数据集的子集。使用转换注释工具将ImageNet \ *数据集转换为校准工具可读的数据注释文件。数据注释文件描述了在校准期间使用的图像子集。命令行:

代码语言:javascript
复制
python convert_annotation.py imagenet --annotation_file /datasets/ImageNet/val.txt --labels_file /datasets/ImageNet/synset_words.txt -ss 2000 -o ~/annotations -a imagenet.pickle -m imagenet.json

注意:为简单起见,以下步骤中的所有命令行工具都使用相同的命令行参数。实际上,[Collect Statistics Tool](./ inference-engine / tools / collect_statistics_tool / README.md)使用校准数据集,但是[Accuracy Checker Tool](./ tools / accuracy_checker / README.md)必须使用整个验证数据集 。

参数

类型

描述

--config

string

本地配置YML文件的路径

-d

string

YML定义文件的路径

-M

string

模型优化器目录的路径

--models

string

模型和权重的前缀路径

--source

string

数据集的前缀路径

--annotations

string

Annotations文件的路径

--converted_models

string

用于存储转换后的Annotations文件的路径

(可选的)评估低精度模型性能。

校准之前,您可以使用[Collect Statistics Tool](./ inference-engine / tools / collect_statistics_tool / README.md)粗略估计低精度性能。

[Collect Statistics Tool](./ inference-engine / tools / collect_statistics_tool / README.md)忽略YML配置文件中的评价指标,但是你可以使用相同的命令行参数。

命令行:

代码语言:javascript
复制
python collect_statistics.py --config ~/inception_v1.yml -d ~/defenitions.yml -M /home/user/intel/openvino/deployment_tools/model_optimizer --models ~/models --source /media/user/calibration/datasets --annotations ~/annotations --converted_models ~/models

结果模型具有统计信息,可让你以INT8精度推断此模型。要衡量性能,您可以使用[Benchmark App](./inference-engine/tools/benchmark_tool/README.md)。

校验模型

在校准过程中,将对模型进行调整,以进行有效的量化并最小化在校准数据集上的准确度下降。校准工具会生成校准后的模型,将其加载到CPU插件后以低精度8位量化模式执行。

[校准工具](./ inference-engine / tools / calibration_tool / README.md)具有灵活且可扩展的机制,可以启用新的数据集和评价指标。每个网络都有自己的专用网络度量标准和网络训练数据集。数据集描述和网络评价方式可以被多种网络复用。

要插入新数据集,您需要开发YML文件。要开发新的模型评价标准,您需要开发实现度量标准的Python \ *模块并在YML中进行描述。有关详细信息,请参阅[准确性检查器工具](./ tools / accuracy_checker / README.md)。

命令行例子:

代码语言:javascript
复制
python calibrate.py --config ~/inception_v1.yml --definition ~/defenitions.yml -M /home/user/intel/openvino/deployment_tools/model_optimizer --tf_custom_op_config_dir ~/tf_custom_op_configs --models ~/models --source /media/user/calibration/datasets --annotations ~/annotations

评估模型结果

在校验完成后,我们可以使用[准确性检查工具](./ tools / accuracy_checker / README.md)来评估模型。

评估准确率

命令行:

代码语言:javascript
复制
python accuracy_check.py --config ~/inception_v1.yml -d ~/defenitions.yml -M /home/user/intel/openvino/deployment_tools/model_optimizer --tf_custom_op_config_dir ~/tf_custom_op_configs --models ~/models --source /media/user/calibration/datasets --annotations ~/annotations -tf dlsdk -td CPU
评估性能

使用[Benchmark App](./ inference-engine / samples / benchmark_app / README.md)命令行工具可以测量同步和异步模式的延迟和吞吐量。注意,Benchmark App命令行工具使用转换后的OpenVINO *中间表示模型。

同步模式的命令行如下:

代码语言:javascript
复制
./benchmark_app -i <path_to_image>/inputImage.bmp -m <path_to_model>/inception_v1.xml -d CPU -api sync

异步模式的命令行如下:

代码语言:javascript
复制
./benchmark_app -i <path_to_image>/inputImage.bmp -m <path_to_model>/inception_v1.xml -d CPU -api async

典型工作流程示例(简化模式)

要以简化模式运行校准工具,请使用以下命令:

代码语言:javascript
复制
python3 calibrate.py -sm -m <path-to-ir.xml> -s <path-to-dataset> -ss <images-number> -e <path-to-extensions-folder> -td <target-device> -precision <output-ir-precision> --output-dir <output-directory-path>

输入:

  • FP32 和 FP16模型。
  • 图片文件当作数据集。

后记

2019年OpenVINO的量化工具文档就翻译完了,后面有机会再翻译一下数据集转换,模型准确率评估,Benchmark App等的文档,如果你使用OpenVINO希望对你有帮助。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Python* Calibaration Tool
    • 介绍
      • 系统要求
        • 用法
          • 标准模式
          • 简化模式
        • 典型工作流程示例(标准模式)
          • 介绍
          • 先决条件
          • 转换数据集获得Annotations文件
          • (可选的)评估低精度模型性能。
          • 校验模型
          • 评估模型结果
        • 典型工作流程示例(简化模式)
        • 后记
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档