模型下载器和其他自动化工具

此目录包含根据模型目录中的配置文件自动执行某些与模型相关的任务的脚本。

  • downloader.py(模型下载器)从在线资源下载模型文件,并在必要时进行修补以使其更适用于模型优化器;
  • converter.py(模型转换器)使用模型优化器将不属于推理引擎 IR 格式的模型转换为该格式。
  • quantizer.py(模型量化器)使用训练后优化工具套件,将 IR 格式的全精度模型量化为低精度版本。
  • info_dumper.py(模型信息转储器)以稳定的机器可读格式打印有关模型的信息。

请使用这些工具而不是尝试直接解析配置文件。它们的格式没有记录,并且可能会在未来版本中以不兼容的方式更改。

提示:您还可以使用 OpenVINO™ 深度学习工作台 (DL Workbench) 中的模型下载器。DL Workbench 是一个基于 OpenVINO™ 构建的平台,提供基于 Web 的图形环境,使您能够优化、微调、分析、可视化和比较深度学习模型在各种英特尔® 架构配置上的性能。在深度学习工作台中,您可以使用大多数 OpenVINO™ 工具套件组件。
继续从 Docker 轻松安装以开始。

前提条件

  1. 安装 Python(3.6 或更高版本)
  2. 使用以下命令安装工具的依赖项:
python3 -mpip install --user -r ./requirements.in

对于模型转换器,您还需要安装 OpenVINO™ 工具套件以及模型优化器的必备库。请参阅 OpenVINO 工具套件文档以了解详细信息。

要从某些框架转换模型,您还需要安装其他依赖项。

对于来自 Caffe2 的模型:

python3 -mpip install --user -r ./requirements-caffe2.in

对于来自 PyTorch 的模型

python3 -mpip install --user -r ./requirements-pytorch.in

对于来自 TensorFlow 的模型:

python3 -mpip install --user -r ./requirements-tensorflow.in

模型下载器使用

基本用法是像以下方式运行脚本:

./downloader.py --all

这将下载所有模型。--all 选项可以被其他过滤器选项取代,仅下载一小组模型。请参阅“共享选项”部分。

默认情况下,脚本会将模型下载到以当前目录为根的目录树中。要下载到其他目录,请使用 -o/--output_dir 选项:

./downloader.py --all --output_dir my/download/directory

您可以使用 --precisions 标志以指定要下载的权重精度(逗号分隔)。

./downloader.py --name face-detection-retail-0004 --precisions FP16,FP16-INT8

默认情况下,脚本只会尝试下载每个文件一次。您可以使用 --num_attempts 选项进行更改,并提高下载过程的稳健性:

./downloader.py --all --num_attempts 5 # attempt each download five times

您可以使用 --cache_dir 选项使脚本使用指定的目录作为缓存。该脚本将在缓存中放置每个下载文件的副本,或者,如果已经存在,则从缓存中检索而不是再次下载。

./downloader.py --all --cache_dir my/cache/directory

缓存格式旨在在未来的 Open Model Zoo 版本中保持兼容,因此您可以使用缓存来避免在更新 Open Model Zoo 时重新下载大多数文件。

默认情况下,脚本将进度信息输出为非结构化、人类可读的文本。如果要以编程方式使用进度信息,请使用 --progress_format 选项:

./downloader.py --all --progress_format=json

当此选项设置为 json,脚本的标准输出被机器可读的进度报告取代,其格式记录在“JSON 进度报告格式”部分。此选项不会影响错误和警告,错误和警告仍将以人类可读的格式打印到标准错误流中。

您也可以将此选项设置为 text 以显式请求默认文本格式。

该脚本可以同时下载多个模型的文件。要启用此功能,请使用 -j/--jobs 选项:

./downloader.py --all -j8 # download up to 8 models at a time

有关脚本接受的其他选项的信息,请参阅“共享选项”部分。

JSON 进度报告格式

本节记录了当指定了 --progress_format=json 选项时脚本生成的进度报告的格式。

该报告由一系列事件组成,其中每个事件由包含 JSON 编码对象的一行表示。每个事件都有一个名称为 $type 的成员,其值决定了事件的类型,以及其包含的附加成员。

当前定义了以下事件类型:

  • model_download_begin

    其他成员:model(字符串)、num_files(整数)。

    脚本开始下载由 model 命名的模型。num_files是将为此模型下载的文件数量。

    此事件之后将始终是一个相应的 model_download_end 事件。

  • model_download_end

    其他成员:model(字符串)、successful(布尔值)。

    脚本停止下载由 model 命名的模型。如果每个文件都已成功下载,则 successful 为 true。

  • model_file_download_begin

    其他成员:model(字符串)、model_file(字符串)、size(整数)。

    脚本开始下载由 model 命名的模型由 model_file 命名的文件。size 是文件的大小(字节)。

    此事件将始终发生在模型的 model_download_begin 事件和 model_download_end 事件之间,随后始终是相应的 model_file_download_end 事件。

  • model_file_download_end

    其他成员:model(字符串)、model_file(字符串)、successful(布尔值)。

    脚本停止下载由 model 命名的模型由 model_file 命名的文件。如果文件已成功下载,则 successful 为 true。

  • model_file_download_progress

    其他成员:model(字符串)、model_file(字符串)、size(整数)。

    到目前为止,脚本下载了由 model 命名的模型由 model_file 命名的文件的 size 字节。注意:如果下载被中断并重试,可能会在后续事件中减少 size

    此事件将始终发生在该文件的 model_file_download_beginmodel_file_download_end 事件之间。

  • model_postprocessing_begin

    model其他成员:

    该脚本开始对由 model 命名的模型进行下载后处理。

    此事件之后将始终是一个相应的 model_postprocessing_end 事件。

  • model_postprocessing_end

    其他成员:model

    该脚本停止对由 model 命名的模型进行下载后处理。

将来可能会添加其他事件类型和成员。

解析机器可读格式的工具应避免依赖未记录的细节。特别是:

  • 工具不应该假设任何给定的事件都会发生在给定的模型/文件(除非上面另有说明)或只会发生一次。
  • 工具不应假设事件会以超出上面指定的顺序约束的特定顺序发生。特别是,当 --jobs 选项设置为大于 1 的值,不同文件或模型的事件序列可能会交错。

模型转换器使用

基本用法是像以下方式运行脚本:

./converter.py --all

这会将所有模型转换为推理引擎 IR 格式。最初采用该格式的模型将被忽略。PyTorch 和 Caffe2 格式的模型将首先转换为 ONNX 格式。

--all 选项可以被其他过滤器选项取代,仅转换一小组模型。请参阅“共享选项”部分。

当前目录必须是模型下载器创建的下载树的根目录。要指定一个不同的下载树路径,请使用 -d/--download_dir 选项:

./converter.py --all --download_dir my/download/directory

默认情况下,转换后的模型放置在下载树中。要将它们放入不同的目录树中,请使用 -o/--output_dir 选项:

./converter.py --all --output_dir my/output/directory

>注意:中间格式的模型也放置在此目录中。

默认情况下,脚本将生成转换所支持的每个精度的模型。要生成特定精度的模型,请使用 --precisions 选项:

./converter.py --all --precisions=FP16

如果模型不支持指定的精度,则将跳过该模型。

默认情况下,脚本将使用与运行脚本本身相同的 Python 可执行文件来运行模型优化器。要使用不同的 Python 可执行文件,请使用 -p/--python 选项:

./converter.py --all --python my/python

该脚本将尝试使用多种方法找到模型优化器:

  1. 如果指定了 --mo 选项,那么它的值将被用作运行脚本的路径:
./converter.py --all --mo my/openvino/path/model_optimizer/mo.py
  1. 否则,如果选定的 Python 可执行文件可以导入 mo 包,然后将使用该包。
  2. 否则,如果 OpenVINO™ 工具套件的 setupvars.sh/ setupvars.bat 脚本已执行,该脚本设置的环境变量将用于在工具套件中找到模型优化器。
  3. 否则,脚本将失败。

您可以使用 --add_mo_arg 选项,向模型配置中指定的参数添加额外的模型优化器参数。可以重复该选项以添加多个参数:

./converter.py --name=caffenet --add_mo_arg=--reverse_input_channels --add_mo_arg=--silent

该脚本可以同时运行多个转换命令。要启用此功能,请使用 -j/--jobs 选项:

./converter.py --all -j8 # run up to 8 commands at a time

该选项的参数必须是最大并发执行命令数或“自动”,在这种情况下使用系统中的 CPU 数。默认情况下,所有命令都按顺序运行。

该脚本可打印转换命令,而无需实际运行这些命令。为此,请使用 --dry_run 选项:

./converter.py --all --dry_run

有关脚本接受的其他选项的信息,请参阅“共享选项”部分。

模型量化器使用

在运行模型量化器之前,您必须准备一个包含量化过程所需数据集的目录。在下面,此目录将被称为 <DATASET_DIR>。您可以在数据集准备指南中找到关于数据集准备的更多详细信息。

基本用法是像以下方式运行脚本:

./quantizer.py --all --dataset_dir <DATASET_DIR>

这将量化所有支持量化的模型。其他模型被忽略。

--all 选项可以被其他过滤器选项取代,仅量化一小组模型。请参阅“共享选项”部分。

当前目录必须是模型转换器创建的模型文件树的根目录。要指定不同的模型树路径,请使用 --model_dir 选项:

./quantizer.py --all --dataset_dir <DATASET_DIR> --model_dir my/model/directory

默认情况下,量化模型放置在同一模型树中。要将它们放入不同的目录树中,请使用 -o/--output_dir 选项:

./quantizer.py --all --dataset_dir <DATASET_DIR> --output_dir my/output/directory

默认情况下,脚本将生成量化输出所支持的每个精度的模型。要生成特定精度的模型,请使用 --precisions 选项:

./quantizer.py --all --dataset_dir <DATASET_DIR> --precisions=FP16-INT8

默认情况下,脚本将使用与运行脚本本身相同的 Python 可执行文件来运行训练后优化工具套件。要使用不同的 Python 可执行文件,请使用 -p/--python 选项:

./quantizer.py --all --dataset_dir <DATASET_DIR> --python my/python

该脚本将尝试使用多种方法找到训练后优化工具套件:

  1. 如果指定了 --pot 选项,那么它的值将被用作运行脚本的路径:
./quantizer.py --all --dataset_dir <DATASET_DIR> --pot my/openvino/path/post_training_optimization_toolkit/main.py
  1. 否则,如果选定的 Python 可执行文件可以导入 pot 包,然后将使用该包。
  2. 否则,如果 OpenVINO™ 工具套件的 setupvars.sh/ setupvars.bat脚本已执行,该脚本设置的环境变量将用于在 OpenVINO 工具套件中找到训练后优化工具套件。
  3. 否则,脚本将失败。

通过 --target_device 选项,可以指定一个目标设备用于训练后优化工具套件来优化:

./quantizer.py --all --dataset_dir <DATASET_DIR> --target_device VPU

支持的值是训练后优化工具套件的配置文件中的“target_device”选项接受的值。如果未指定此选项,则使用训练后优化工具套件的默认值。

该脚本可打印量化命令,而无需实际运行这些命令。为此,请使用 --dry_run 选项:

./quantizer.py --all --dataset_dir <DATASET_DIR> --dry_run

指定此选项后,仍会创建训练后优化工具套件的配置文件,以便您可以对其进行检查。

有关脚本接受的其他选项的信息,请参阅“共享选项”部分。

模型信息转储器的使用

基本用法是像以下方式运行脚本:

./info_dumper.py --all

这将打印到所有模型的标准输出信息。

脚本接受的唯一选项是“共享选项”部分中描述的选项。

该脚本的输出是一个 JSON 数组,其中的每个元素都是一个描述单个模型的 JSON 对象。每个这样的对象都有以下键:

  • name:模型的标识符,经过 --name 选项的接受。
  • composite_model_name: 复合模型名称的标识符,如果模型是多个模型组合的一部分(例如编码器-解码器),否则 null
  • description:描述模型的文本。段落由换行符分隔。
  • framework:一个字符串,用于识别模型下载所用格式的框架。当前可能的值为 dldt(推理引擎 IR)、caffecaffe2mxnetonnxpytorchtf(TensorFlow)。将来可能会添加其他可能的值。
  • license_url:用于分发模型的许可证的 URL。
  • :precisions:模型具有 IR 文件的精度列表。对于以推理引擎 IR 格式以外的格式下载的模型,这些是模型转换器可以生成的 IR 文件的精度。当前可能的值为:

    • FP16
    • FP16-INT1
    • FP16-INT8
    • FP32
    • FP32-INT1
    • FP32-INT8

    将来可能会添加其他可能的值。

  • quantization_output_precisions:模型可以被模型量化器量化到的精度列表。当前可能的值是 FP16-INT8FP32-INT8;将来可能会添加其他可能的值。
  • subdirectory:输出树的子目录,下载或转换的文件将分别由下载器或转换器放置在此处。
  • task_type:一个字符串,用于识别模型执行的任务类型。当前可能的值是:

    • action_recognition
    • classification
    • colorization
    • detection
    • face_recognition
    • feature_extraction
    • head_pose_estimation
    • human_pose_estimation
    • image_inpainting
    • image_processing
    • image_translation
    • instance_segmentation
    • machine_translation
    • monocular_depth_estimation
    • named_entity_recognition
    • noise_suppression
    • object_attributes
    • optical_character_recognition
    • place_recognition
    • question_answering
    • salient_object_detection
    • semantic_segmentation
    • sound_classification
    • speech_recognition
    • style_transfer
    • text_to_speech
    • time_series
    • token_recognition

    将来可能会添加其他可能的值。

共享选项

这是所有工具都接受的某些选项。

-h/--help 可以用于打印帮助消息:

./TOOL.py --help

有几个相互排斥的过滤器选项可以选择工具将处理的模型:

  • --all选择所有模型。
./TOOL.py --all
  • --name使用一个逗号分隔的模式列表,并选择匹配这些模式中至少一个的模型。模式可能包含 shell 风格的通配符。对于复合模型,接受复合模型的名称,以及其组成的单个模型的名称。
./TOOL.py --name 'mtcnn,densenet-*'

请参阅 https://docs.python.org/3/library/fnmatch.html 了解模式语法的完整描述。

  • --list使用一个文件的路径,该文件必须包含一个模式列表,并选择匹配这些模式中至少一个的模型。对于复合模型,接受复合模型的名称,以及其组成的单个模型的名称。
./TOOL.py --list my.lst

该文件必须每行包含一个模式。对于 --name 选项,模式语法相同。以 # 开头的空白行和评论会被忽略。例如:

mtcnn # get all three models: mtcnn-o, mtcnn-p, mtcnn-r
densenet-* # get all DenseNet variants

要查看可用的模型,可以使用 --print_all 选项。指定此选项后,该工具将打印配置文件中定义的所有模型名称并退出:

$ ./TOOL.py --print_all
action-recognition-0001-decoder
action-recognition-0001-encoder
age-gender-recognition-retail-0013
driver-action-recognition-adas-0002-decoder
driver-action-recognition-adas-0002-encoder
emotions-recognition-retail-0003
face-detection-adas-0001
face-detection-retail-0004
face-detection-retail-0005
[...]

必须指定 --print_all 或其中一个过滤器选项。


OpenVINO 是英特尔公司或其子公司在美国和/或其他国家的商标。

版权所有 © 2018-2019, 英特尔公司

根据 Apache 许可证,版本 2.0(“许可证”)获得许可;除非遵守许可证,否则您不得使用此文件。您可以在以下位置获得一份许可证:

http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件是按“原样”分发,没有任何类型明示或暗示的保证或条件。请参阅许可证,了解许可证下适用于权限和限制的特定语言。