From 712d7fd71b1a8ffcc49d204add9ff1b73af20767 Mon Sep 17 00:00:00 2001 From: yunyaoXYY <109218879+yunyaoXYY@users.noreply.github.com> Date: Wed, 23 Nov 2022 10:13:50 +0800 Subject: [PATCH] [Quantization] Improve the usage of FastDeploy tools. (#660) * Add PaddleOCR Support * Add PaddleOCR Support * Add PaddleOCRv3 Support * Add PaddleOCRv3 Support * Update README.md * Update README.md * Update README.md * Update README.md * Add PaddleOCRv3 Support * Add PaddleOCRv3 Supports * Add PaddleOCRv3 Suport * Fix Rec diff * Remove useless functions * Remove useless comments * Add PaddleOCRv2 Support * Add PaddleOCRv3 & PaddleOCRv2 Support * remove useless parameters * Add utils of sorting det boxes * Fix code naming convention * Fix code naming convention * Fix code naming convention * Fix bug in the Classify process * Imporve OCR Readme * Fix diff in Cls model * Update Model Download Link in Readme * Fix diff in PPOCRv2 * Improve OCR readme * Imporve OCR readme * Improve OCR readme * Improve OCR readme * Imporve OCR readme * Improve OCR readme * Fix conflict * Add readme for OCRResult * Improve OCR readme * Add OCRResult readme * Improve OCR readme * Improve OCR readme * Add Model Quantization Demo * Fix Model Quantization Readme * Fix Model Quantization Readme * Add the function to do PTQ quantization * Improve quant tools readme * Improve quant tool readme * Improve quant tool readme * Add PaddleInference-GPU for OCR Rec model * Add QAT method to fastdeploy-quantization tool * Remove examples/slim for now * Move configs folder * Add Quantization Support for Classification Model * Imporve ways of importing preprocess * Upload YOLO Benchmark on readme * Upload YOLO Benchmark on readme * Upload YOLO Benchmark on readme * Improve Quantization configs and readme * Add support for multi-inputs model * Add backends and params file for YOLOv7 * Add quantized model deployment support for YOLO series * Fix YOLOv5 quantize readme * Fix YOLO quantize readme * Fix YOLO quantize readme * Improve quantize YOLO readme * Improve quantize YOLO readme * Improve quantize YOLO readme * Improve quantize YOLO readme * Improve quantize YOLO readme * Fix bug, change Fronted to ModelFormat * Change Fronted to ModelFormat * Add examples to deploy quantized paddleclas models * Fix readme * Add quantize Readme * Add quantize Readme * Add quantize Readme * Modify readme of quantization tools * Modify readme of quantization tools * Improve quantization tools readme * Improve quantization readme * Improve PaddleClas quantized model deployment readme * Add PPYOLOE-l quantized deployment examples * Improve quantization tools readme * Improve Quantize Readme * Fix conflicts * Fix conflicts * improve readme * Improve quantization tools and readme * Improve quantization tools and readme * Add quantized deployment examples for PaddleSeg model * Fix cpp readme * Fix memory leak of reader_wrapper function * Fix model file name in PaddleClas quantization examples * Update Runtime and E2E benchmark * Update Runtime and E2E benchmark * Rename quantization tools to auto compression tools * Remove PPYOLOE data when deployed on MKLDNN * Fix readme * Support PPYOLOE with OR without NMS and update readme * Update Readme * Update configs and readme * Update configs and readme * Add Paddle-TensorRT backend in quantized model deploy examples * Support PPYOLOE+ series * Add reused_input_tensors for PPYOLOE * Improve fastdeploy tools usage * improve fastdeploy tool * Improve fastdeploy auto compression tool * Improve fastdeploy auto compression tool * Improve fastdeploy auto compression tool * Improve fastdeploy auto compression tool * Improve fastdeploy auto compression tool * remove modify * Improve fastdeploy auto compression tool * Improve fastdeploy auto compression tool * Improve fastdeploy auto compression tool * Improve fastdeploy auto compression tool * Improve fastdeploy auto compression tool * Remove extra requirements for fd-auto-compress package * Imporve fastdeploy-tools package * Install fastdeploy-tools package when build fastdeploy-python * Imporve quantization readme --- python/requirements.txt | 2 +- tools/README.md | 11 +++--- tools/README_EN.md | 10 +++--- tools/auto_compression/setup.py | 22 ------------ .../auto_compression/README.md | 10 ++---- .../auto_compression/README_EN.md | 10 +----- .../auto_compression/configs/README.md | 0 .../auto_compression/configs/README_EN.md | 35 +++++++++++-------- .../mobilenetv1_ssld_quant.yaml | 0 .../classification/resnet50_vd_quant.yaml | 0 .../detection/ppyoloe_plus_withNMS_quant.yaml | 0 .../detection/ppyoloe_withNMS_quant.yaml | 0 .../configs/detection/yolov5s_quant.yaml | 0 .../configs/detection/yolov6s_quant.yaml | 0 .../configs/detection/yolov7_quant.yaml | 0 .../segmentation/pp_liteseg_quant.yaml | 0 .../fd_auto_compress/__init__.py | 0 .../fd_auto_compress/dataset.py | 0 .../fd_auto_compress/fd_auto_compress.py | 0 tools/common_tools/common_tools.py | 2 +- 20 files changed, 33 insertions(+), 69 deletions(-) delete mode 100644 tools/auto_compression/setup.py rename tools/{ => common_tools}/auto_compression/README.md (96%) rename tools/{ => common_tools}/auto_compression/README_EN.md (97%) rename tools/{ => common_tools}/auto_compression/configs/README.md (100%) rename tools/{ => common_tools}/auto_compression/configs/README_EN.md (54%) rename tools/{ => common_tools}/auto_compression/configs/classification/mobilenetv1_ssld_quant.yaml (100%) rename tools/{ => common_tools}/auto_compression/configs/classification/resnet50_vd_quant.yaml (100%) rename tools/{ => common_tools}/auto_compression/configs/detection/ppyoloe_plus_withNMS_quant.yaml (100%) rename tools/{ => common_tools}/auto_compression/configs/detection/ppyoloe_withNMS_quant.yaml (100%) rename tools/{ => common_tools}/auto_compression/configs/detection/yolov5s_quant.yaml (100%) rename tools/{ => common_tools}/auto_compression/configs/detection/yolov6s_quant.yaml (100%) rename tools/{ => common_tools}/auto_compression/configs/detection/yolov7_quant.yaml (100%) rename tools/{ => common_tools}/auto_compression/configs/segmentation/pp_liteseg_quant.yaml (100%) rename tools/{ => common_tools}/auto_compression/fd_auto_compress/__init__.py (100%) rename tools/{ => common_tools}/auto_compression/fd_auto_compress/dataset.py (100%) rename tools/{ => common_tools}/auto_compression/fd_auto_compress/fd_auto_compress.py (100%) diff --git a/python/requirements.txt b/python/requirements.txt index 4f5fc3e11..621864c12 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -3,5 +3,5 @@ requests tqdm numpy opencv-python -fd-auto-compress>=0.0.1 +fastdeploy-tools pyyaml diff --git a/tools/README.md b/tools/README.md index 7a1a36853..b1a873a59 100755 --- a/tools/README.md +++ b/tools/README.md @@ -22,14 +22,11 @@ git clone https://github.com/PaddlePaddle/PaddleSlim.git & cd PaddleSlim python setup.py install ``` -3.安装fd-auto-compress一键模型自动化压缩工具 +3.安装fastdeploy-tools工具包 ```bash -# 通过pip安装fd-auto-compress. +# 通过pip安装fastdeploy-tools. 此工具包目前支持模型一键自动化压缩和模型转换的功能. # FastDeploy的python包已包含此工具, 不需重复安装. -pip install fd-auto-compress==0.0.1 - -# 在当前目录执行以下命令 -python setup.py install +pip install fastdeploy-tools==0.0.0 ``` ### 一键模型自动化压缩工具的使用 @@ -38,7 +35,7 @@ python setup.py install ```bash fastdeploy --auto_compress --config_path=./configs/detection/yolov5s_quant.yaml --method='PTQ' --save_dir='./yolov5s_ptq_model/' ``` -详细使用文档请参考[FastDeploy一键模型自动化压缩工具](./auto_compression/README.md) +详细使用文档请参考[FastDeploy一键模型自动化压缩工具](./common_tools/auto_compression/README.md)

diff --git a/tools/README_EN.md b/tools/README_EN.md index 26305ac91..2cfffa926 100755 --- a/tools/README_EN.md +++ b/tools/README_EN.md @@ -22,14 +22,12 @@ git clone https://github.com/PaddlePaddle/PaddleSlim.git & cd PaddleSlim python setup.py install ``` -3.Install fd-auto-compress package +3.Install fastdeploy-tools package ```bash -# Installing fd-auto-compress via pip +# Installing fastdeploy-tools via pip # This tool is included in the python installer of FastDeploy, so you don't need to install it again. -pip install fd-auto-compress==0.0.1 +pip install fastdeploy-tools==0.0.0 -# Execute in the current directory -python setup.py install ``` ### The Usage of One-Click Model Auto Compression Tool @@ -37,7 +35,7 @@ After the above steps are successfully installed, you can use FastDeploy one-cli ```bash fastdeploy --auto_compress --config_path=./configs/detection/yolov5s_quant.yaml --method='PTQ' --save_dir='./yolov5s_ptq_model/' ``` -For detailed documentation, please refer to [FastDeploy One-Click Model Auto Compression Tool](./auto_compression/README.md) +For detailed documentation, please refer to [FastDeploy One-Click Model Auto Compression Tool](./common_tools/auto_compression/README_EN.md)

diff --git a/tools/auto_compression/setup.py b/tools/auto_compression/setup.py deleted file mode 100644 index 8ee71b618..000000000 --- a/tools/auto_compression/setup.py +++ /dev/null @@ -1,22 +0,0 @@ -import setuptools -import fd_auto_compress - -long_description = "fd_auto_compress is a toolkit for model auto compression of FastDeploy.\n\n" -long_description += "Usage: fastdeploy --auto_compress --config_path=./yolov7_tiny_qat_dis.yaml --method='QAT' --save_dir='../v7_qat_outmodel/' \n" - -setuptools.setup( - name="fd_auto_compress", - version="0.0.1", - description="A toolkit for model auto compression of FastDeploy.", - long_description=long_description, - long_description_content_type="text/plain", - packages=setuptools.find_packages(), - author='fastdeploy', - author_email='fastdeploy@baidu.com', - url='https://github.com/PaddlePaddle/FastDeploy.git', - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: Apache Software License", - "Operating System :: OS Independent", - ], - license='Apache 2.0', ) diff --git a/tools/auto_compression/README.md b/tools/common_tools/auto_compression/README.md similarity index 96% rename from tools/auto_compression/README.md rename to tools/common_tools/auto_compression/README.md index 8c1439997..e672ef094 100644 --- a/tools/auto_compression/README.md +++ b/tools/common_tools/auto_compression/README.md @@ -17,14 +17,8 @@ git clone https://github.com/PaddlePaddle/PaddleSlim.git & cd PaddleSlim python setup.py install ``` -### fastdeploy-auto-compression 一键模型自动化压缩工具安装方式 -``` -# 通过pip安装fd-auto-compress包 -pip install fd-auto-compress - -# 并在上一层目录(非本级目录)执行如下命令 -python setup.py install -``` +### 一键模型自动化压缩工具安装方式 +FastDeploy一键模型自动化压缩不需要单独的安装, 用户只需要正确安装好[FastDeploy工具包](../../README.md)即可. ## 2.使用方式 diff --git a/tools/auto_compression/README_EN.md b/tools/common_tools/auto_compression/README_EN.md similarity index 97% rename from tools/auto_compression/README_EN.md rename to tools/common_tools/auto_compression/README_EN.md index 6c591897a..7e9d114ac 100644 --- a/tools/auto_compression/README_EN.md +++ b/tools/common_tools/auto_compression/README_EN.md @@ -21,16 +21,8 @@ python setup.py install ``` ### Install Fastdeploy Auto Compression Toolkit +FastDeploy One-Click Model Automation compression does not require a separate installation, users only need to properly install the [FastDeploy Toolkit](../../README.md) -Run the following command to install - -``` -# Install fd-auto-compress package using pip -pip install fd-auto-compress - -# Execute the following command in the previous directory (not in the current directory) -python setup.py install -``` ## 2. How to Use diff --git a/tools/auto_compression/configs/README.md b/tools/common_tools/auto_compression/configs/README.md similarity index 100% rename from tools/auto_compression/configs/README.md rename to tools/common_tools/auto_compression/configs/README.md diff --git a/tools/auto_compression/configs/README_EN.md b/tools/common_tools/auto_compression/configs/README_EN.md similarity index 54% rename from tools/auto_compression/configs/README_EN.md rename to tools/common_tools/auto_compression/configs/README_EN.md index e2221a847..c1066409c 100644 --- a/tools/auto_compression/configs/README_EN.md +++ b/tools/common_tools/auto_compression/configs/README_EN.md @@ -5,37 +5,41 @@ In addition to using the configuration files provided by FastDeploy directly in ## Demo + ``` # Global config Global: - model_dir: ./yolov5s.onnx #Path to input model - format: 'onnx' #Input model format, please select 'paddle' for paddle model + model_dir: ./ppyoloe_plus_crn_s_80e_coco #Path to input model + format: paddle #Input model format, please select 'paddle' for paddle model model_filename: model.pdmodel #Quantized model name in Paddle format - params_filename: model.pdiparams #Parameter name for quantized model name in Paddle format - image_path: ./COCO_val_320 #Data set paths for post-training quantization or quantized distillation - arch: YOLOv5 #Model Architecture - input_list: ['x2paddle_images'] #Input name of the model to be quantified - preprocess: yolo_image_preprocess #The preprocessing functions for the data when quantizing the model. Developers can modify or write a new one in . /fdquant/dataset.py + params_filename: model.pdiparams #Parameter name for quantized paddle model + qat_image_path: ./COCO_train_320 #Data set paths for quantization distillation training + ptq_image_path: ./COCO_val_320 #Data set paths for PTQ + input_list: ['image','scale_factor'] #Input name of the model to be quanzitzed + qat_preprocess: ppyoloe_plus_withNMS_image_preprocess # The preprocessing function for Quantization distillation training + ptq_preprocess: ppyoloe_plus_withNMS_image_preprocess # The preprocessing function for PTQ + qat_batch_size: 4 #Batch size -#uantization distillation training configuration + +# Quantization distillation training configuration Distillation: - alpha: 1.0 # Distillation loss weight + alpha: 1.0 #Distillation loss weight loss: soft_label #Distillation loss algorithm Quantization: - onnx_format: true #Whether to use ONNX quantization standard format or not, must be true to deploy on FastDeploye + onnx_format: true #Whether to use ONNX quantization standard format or not, must be true to deploy on FastDeploy use_pact: true #Whether to use the PACT method for training - activation_quantize_type: 'moving_average_abs_max' #Activate quantization methods + activation_quantize_type: 'moving_average_abs_max' #Activations quantization methods quantize_op_types: #OPs that need to be quantized - conv2d - depthwise_conv2d -#Post-Training Quantization +# Post-Training Quantization PTQ: - calibration_method: 'avg' #Activate calibration algorithm of post-training quantization , Options: avg, abs_max, hist, KL, mse, emd + calibration_method: 'avg' #Activations calibration algorithm of post-training quantization , Options: avg, abs_max, hist, KL, mse, emd skip_tensor_list: None #Developers can skip some conv layers‘ quantization -#Traning +# Training Config TrainConfig: train_iter: 3000 learning_rate: 0.00001 @@ -44,8 +48,9 @@ TrainConfig: type: SGD weight_decay: 4.0e-05 target_metric: 0.365 + ``` ## More details -FastDeploy one-click quantization tool is powered by PaddeSlim, please refer to [Automated Compression of Hyperparameter Tutorial](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/example/auto_compression/hyperparameter_tutorial.md) for more details. +FastDeploy one-click quantization tool is powered by PaddeSlim, please refer to [Auto Compression Hyperparameter Tutorial](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/example/auto_compression/hyperparameter_tutorial.md) for more details. diff --git a/tools/auto_compression/configs/classification/mobilenetv1_ssld_quant.yaml b/tools/common_tools/auto_compression/configs/classification/mobilenetv1_ssld_quant.yaml similarity index 100% rename from tools/auto_compression/configs/classification/mobilenetv1_ssld_quant.yaml rename to tools/common_tools/auto_compression/configs/classification/mobilenetv1_ssld_quant.yaml diff --git a/tools/auto_compression/configs/classification/resnet50_vd_quant.yaml b/tools/common_tools/auto_compression/configs/classification/resnet50_vd_quant.yaml similarity index 100% rename from tools/auto_compression/configs/classification/resnet50_vd_quant.yaml rename to tools/common_tools/auto_compression/configs/classification/resnet50_vd_quant.yaml diff --git a/tools/auto_compression/configs/detection/ppyoloe_plus_withNMS_quant.yaml b/tools/common_tools/auto_compression/configs/detection/ppyoloe_plus_withNMS_quant.yaml similarity index 100% rename from tools/auto_compression/configs/detection/ppyoloe_plus_withNMS_quant.yaml rename to tools/common_tools/auto_compression/configs/detection/ppyoloe_plus_withNMS_quant.yaml diff --git a/tools/auto_compression/configs/detection/ppyoloe_withNMS_quant.yaml b/tools/common_tools/auto_compression/configs/detection/ppyoloe_withNMS_quant.yaml similarity index 100% rename from tools/auto_compression/configs/detection/ppyoloe_withNMS_quant.yaml rename to tools/common_tools/auto_compression/configs/detection/ppyoloe_withNMS_quant.yaml diff --git a/tools/auto_compression/configs/detection/yolov5s_quant.yaml b/tools/common_tools/auto_compression/configs/detection/yolov5s_quant.yaml similarity index 100% rename from tools/auto_compression/configs/detection/yolov5s_quant.yaml rename to tools/common_tools/auto_compression/configs/detection/yolov5s_quant.yaml diff --git a/tools/auto_compression/configs/detection/yolov6s_quant.yaml b/tools/common_tools/auto_compression/configs/detection/yolov6s_quant.yaml similarity index 100% rename from tools/auto_compression/configs/detection/yolov6s_quant.yaml rename to tools/common_tools/auto_compression/configs/detection/yolov6s_quant.yaml diff --git a/tools/auto_compression/configs/detection/yolov7_quant.yaml b/tools/common_tools/auto_compression/configs/detection/yolov7_quant.yaml similarity index 100% rename from tools/auto_compression/configs/detection/yolov7_quant.yaml rename to tools/common_tools/auto_compression/configs/detection/yolov7_quant.yaml diff --git a/tools/auto_compression/configs/segmentation/pp_liteseg_quant.yaml b/tools/common_tools/auto_compression/configs/segmentation/pp_liteseg_quant.yaml similarity index 100% rename from tools/auto_compression/configs/segmentation/pp_liteseg_quant.yaml rename to tools/common_tools/auto_compression/configs/segmentation/pp_liteseg_quant.yaml diff --git a/tools/auto_compression/fd_auto_compress/__init__.py b/tools/common_tools/auto_compression/fd_auto_compress/__init__.py similarity index 100% rename from tools/auto_compression/fd_auto_compress/__init__.py rename to tools/common_tools/auto_compression/fd_auto_compress/__init__.py diff --git a/tools/auto_compression/fd_auto_compress/dataset.py b/tools/common_tools/auto_compression/fd_auto_compress/dataset.py similarity index 100% rename from tools/auto_compression/fd_auto_compress/dataset.py rename to tools/common_tools/auto_compression/fd_auto_compress/dataset.py diff --git a/tools/auto_compression/fd_auto_compress/fd_auto_compress.py b/tools/common_tools/auto_compression/fd_auto_compress/fd_auto_compress.py similarity index 100% rename from tools/auto_compression/fd_auto_compress/fd_auto_compress.py rename to tools/common_tools/auto_compression/fd_auto_compress/fd_auto_compress.py diff --git a/tools/common_tools/common_tools.py b/tools/common_tools/common_tools.py index 06d704481..a53844f6a 100755 --- a/tools/common_tools/common_tools.py +++ b/tools/common_tools/common_tools.py @@ -78,7 +78,7 @@ def main(): args = argsparser().parse_args() if args.auto_compress == True: try: - from fd_auto_compress.fd_auto_compress import auto_compress + from .auto_compression.fd_auto_compress.fd_auto_compress import auto_compress print("Welcome to use FastDeploy Auto Compression Toolkit!") auto_compress(args) except ImportError: