分类网络模型量化
量化前提
量化前提
- 模型准备
以昇腾模型压缩工具的安装用户将需要量化的TensorFlow模型上传到Linux服务器任意目录下。本章节以sample包中自带的mobilenet_v2.pb网络模型为例进行说明。
用户准备的模型,建议先在TensorFlow环境中执行推理,并确保能成功运行,精度没有异常。
- 数据集准备
使用昇腾模型压缩工具对模型完成量化后,需要对模型进行推理,以测试量化数据的精度。推理过程中需要使用和模型相匹配的数据集。
以昇腾模型压缩工具的安装用户将和模型相匹配的数据集上传到Linux服务器任意目录下。
- 校准集准备
校准集用来产生量化因子,保证精度。
计算量化参数的过程被称为“校准(calibration)”。校准过程需要使用一部分测试图片来针对性计算量化参数,使用一个或多个batch对量化后的网络模型进行推理即可完成校准。
以昇腾模型压缩工具的安装用户将校准集文件上传到Linux服务器任意目录下。
本手册以量化脚本sample包中mobilenetv2网络模型为例进行说明,其中模型文件、数据集中的标签字典在执行量化脚本时会自动下载。
量化示例
下面以sample包中自带的分类网络量化脚本MobileNetV2_sample.py、模型(mobilenet_v2.pb)、数据集(classification.jpg)、校准集(calibration)为例,演示如何执行量化脚本。
- 获取量化脚本。在量化脚本sample包amct_tensorflow_sample.tar.gz所在路径下执行如下解压命令,获取量化脚本。
tar -zxvf amct_tensorflow_sample.tar.gz cd sample
其中:
- mobilenetv2/:分类网络MobileNetV2量化目录。本章节以执行分类网络量化脚本为例进行说明。
- yolov3/:检测网络YOLOv3量化目录,详细使用说明请参见检测网络模型量化。
- resnet_v1_50/:retrain目录,详细使用说明请参见基于retrain的量化。
- tensor_decompose/:张量分解目录,详细使用说明请参见张量分解模型。
其余文件详细说明请参见sample包说明。
- 执行量化。在量化脚本所在目录sample/mobilenetv2,执行如下命令量化mobilenetv2网络模型。
python3.7.5 MobileNetV2_sample.py [-h] [--cfg_define CFG_DEFINE]
各参数解释如表4-3所示。
使用样例如下:
python3.7.5 MobileNetV2_sample.py
若出现如下信息则说明模型量化成功:INFO - [AMCT]:[save_model]: The model is saved in $HOME/amct/amct_tf/sample/mobilenetv2/result/MobileNetV2_quantized.pb ----量化后的可在TensorFlow环境进行精度仿真并可在昇腾AI处理器部署模型名称以及路径 Origin Model Prediction: category index: 699 category prob: 0.560 ----原始模型的推理结果,推理结果根据用户环境会有所不同,请以实际显示的为准 Quantized Model Prediction: category index: 699 category prob: 0.575 ----量化后模型的推理结果,推理结果根据用户环境会有所不同,请以实际显示的为准
- 量化结果说明。量化成功后,在量化后模型的同级目录下还会生成量化配置文件config.json、量化日志文件amct_log/amct_tensorflow.log、量化因子记录文件以及量化结果文件results:
- config.json:描述了如何对模型中的每一层进行量化。如果量化脚本所在目录下已经存在量化配置文件,则再次调用create_quant_config接口时,如果新生成的量化配置文件与已有的文件同名,则会覆盖已有的量化配置文件,否则生成新的量化配置文件。
如果量化后的模型推理精度不满足要求,用户可以修改config.json文件,量化配置文件内容、修改原则以及参数解释请参见量化配置。
- amct_log/amct_tensorflow.log:记录了量化过程的日志信息。
- record.txt:记录量化因子的文件。关于该文件的原型定义请参见量化因子记录文件说明。
- result:量化结果文件,包括量化后的模型文件以及模型量化信息文件MobileNetV2_quant.json(该文件名称和量化后模型名称保持统一),如下所示:
- MobileNetV2_quant.json:量化信息文件,记录了量化模型同原始模型节点的映射关系,用于量化后模型同原始模型精度比对使用。
- MobileNetV2_quantized.pb:量化后的可在TensorFlow环境进行精度仿真并可在昇腾AI处理器部署的模型。
对该模型重新进行量化时,在量化后模型的同级目录下生成的上述结果文件将会被覆盖。
- 昇腾模型压缩工具使用过程中若出现提示资源申请失败的情况,则参见昇腾模型压缩工具使用过程中提示资源申请失败解决。
- 如果用户自己构造了TensorFlow网络模型的推理脚本,并且想使用量化后的模型,重新在原始TensorFlow环境中进行推理,需要导入昇腾模型压缩工具的包,在推理脚本最前面增加如下内容:
import amct_tensorflow
- config.json:描述了如何对模型中的每一层进行量化。如果量化脚本所在目录下已经存在量化配置文件,则再次调用create_quant_config接口时,如果新生成的量化配置文件与已有的文件同名,则会覆盖已有的量化配置文件,否则生成新的量化配置文件。
- (可选)如果用户需要将量化后的模型,转换为适配昇腾AI处理器的离线模型,则请参见《ATC工具使用指导》。
convert_model接口量化示例
量化前提
- 模型、数据集、校准集的准备动作请参见量化前提。
- 量化因子:
以昇腾模型压缩工具的安装用户将用户自己计算得到的量化因子记录文件上传到Linux服务器任意目录下。本手册以sample包中自带的分类网络模型mobilenetv2的量化因子为例进行说明。关于量化因子的详细说明请参见量化因子记录文件说明。
量化示例
- 执行量化脚本,对原始网络模型进行量化。
下面以sample包中自带的分类网络量化脚本MobileNetV2_convert_model.py、模型(mobilenet_v2.pb)、数据集(classification.jpg)、校准集(calibration)为例,演示如何执行量化脚本。
- 在量化脚本所在目录sample/mobilenetv2,执行如下命令量化mobilenetv2网络模型。
python3.7.5 MobileNetV2_convert_model.py
若出现如下信息则说明模型量化成功:INFO - [AMCT]:[save_model]: The model is saved in $HOME/amct/amct_tf/sample/mobilenetv2/convert/result/MobileNetV2_quantized.pb ----量化后的可在TensorFlow环境进行精度仿真并可在昇腾AI处理器部署模型名称以及路径 Origin Model Prediction: category index: 699 category prob: 0.560 ----原始模型的推理结果,推理结果根据用户环境会有所不同,请以实际显示的为准 Quantized Model Prediction: category index: 699 category prob: 0.569 ----量化后模型的推理结果,推理结果根据用户环境会有所不同,请以实际显示的为准
- 量化结果展示。在量化后模型的同级目录下生成量化日志文件amct_log/amct_tensorflow.log、量化结果文件convert/result:
- amct_log/amct_tensorflow.log:记录了量化过程的日志信息。
- convert/result:量化结果文件,如下所示:
- MobileNetV2_quant.json:量化信息文件,记录了量化模型同原始模型节点的映射关系,用于量化后模型同原始模型精度比对使用。
- MobileNetV2_quantized.pb:量化后的可在TensorFlow环境进行精度仿真并可在昇腾AI处理器部署的模型。
对该模型重新进行量化时,在量化后模型的同级目录下生成的上述结果文件将会被覆盖。
- (可选)如果用户需要将量化后的模型,转换为适配昇腾AI处理器的离线模型,则请参见《ATC工具使用指导》。
- 在量化脚本所在目录sample/mobilenetv2,执行如下命令量化mobilenetv2网络模型。