PaddleOCR 模型自动压缩实战:基于 PaddleSlim 量化训练与蒸馏的检测/识别模型压缩与部署指南
2026/9/19 9:26:22 网站建设 项目流程

PaddleOCR 模型自动压缩实战:基于 PaddleSlim 量化训练与蒸馏的检测/识别模型压缩与部署指南

【免费下载链接】PaddleOCR飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR

本指南围绕 PaddleOCR 仓库中的 deploy/slim/auto_compression 示例,系统讲解如何对 PP-OCRv4 检测(det)与识别(rec)Inference 模型执行自动压缩。你将掌握从环境准备、数据集处理、压缩配置解读、单卡/多卡启动压缩,到 TensorRT / MKLDNN 性能验证与 PaddleLite 端侧部署的完整流程,并理解量化训练(QAT)与蒸馏两类策略在 OCR 模型上的工程落地细节。

1. 自动压缩的背景与原理

模型自动压缩是指在不显著损失精度的前提下,通过一系列自动化策略缩小模型体积、提升推理速度的过程。本示例使用的自动压缩策略为量化训练(Quantization Aware Training,QAT)蒸馏(Distillation)

  • 量化训练:在训练过程中对权重和激活进行 8 bit 量化感知训练,让模型参数逐步适应低比特表示,从而在部署时获得 INT8 推理加速能力;
  • 蒸馏:以压缩前的原始模型(Baseline)作为教师网络,将知识迁移给学生网络(量化模型),用于弥补量化带来的精度损失。

从 run.py 的源码可以看到,整个压缩流程最终由 PaddleSlim 的paddleslim.auto_compression.AutoCompression接口统一驱动:

ac = AutoCompression( model_dir=global_config["model_dir"], model_filename=global_config["model_filename"], params_filename=global_config["params_filename"], save_dir=args.save_dir, config=all_config, train_dataloader=reader_wrapper(train_dataloader, global_config["input_name"]), eval_callback=eval_function if rank_id == 0 else None, eval_dataloader=reader_wrapper(val_loader, global_config["input_name"]), ) ac.compress()

其中训练/验证数据加载复用 PaddleOCR 的ppocr.data.build_dataloader,后处理与评估指标复用ppocr.postprocess.build_post_processppocr.metrics.build_metric(见 run.py),因此压缩流程与 PaddleOCR 训练体系完全打通:检测模型以hmean为指标,识别模型以acc为指标(见 run.py)。

从源码结构看,整个自动压缩示例是一个"PaddleSlim 压缩引擎 + PaddleOCR 数据/后处理/评估生态"的组合,你只需提供 Inference 模型、数据集和一份压缩策略配置,即可一键完成压缩。

2. 压缩效果 Benchmark

以下为仓库示例中 PP-OCRv4 检测与识别模型在自动压缩前后的精度与耗时对比(数据均来自 README.md)。

2.1 PP-OCRv4_det

RTX 3090 测试环境(CUDA 11.7 + TensorRT 8.4.2.4 + Paddle 2.5;CPU:Intel Xeon Gold 6226R,12 线程):

模型策略Metric(hmean)GPU 耗时(ms)ARM CPU 耗时(ms)配置文件
PP-OCRv4_mobile_detBaseline72.715.792.0-
PP-OCRv4_mobile_det量化+蒸馏71.102.394.1ppocrv4_det_qat_dist.yaml
PP-OCRv4_server_detBaseline79.8232.6844.7-
PP-OCRv4_server_det量化+蒸馏79.2712.3635.0ppocrv4_det_server_qat_dist.yaml

Tesla V100 测试环境(CUDA 11.7 + TensorRT 8.4.2.4 + Paddle 2.5.2;CPU:Intel Xeon Gold 6271C,12 线程):

模型策略Metric(hmean)GPU 耗时(ms)ARM CPU 耗时(ms)配置文件
PP-OCRv4_mobile_detBaseline72.714.7198.4-
PP-OCRv4_mobile_det量化+蒸馏71.383.3205.2ppocrv4_det_qat_dist.yaml
PP-OCRv4_server_detBaseline79.7750.02159.4-
PP-OCRv4_server_det量化+蒸馏79.8142.41834.8ppocrv4_det_server_qat_dist.yaml

说明:PP-OCRv4_server_det 在不完整的数据集上测试(数据处理流程见下文 3.2 节),仅用于展示自动压缩效果,指标不具备参考性,模型真实表现请以 PaddleOCR 官方模型评测为准。

2.2 PP-OCRv4_rec

Tesla V100 测试环境(CUDA 11.2 + TensorRT 8.0.3.4 + Paddle 2.5;CPU:Intel Xeon Gold 6271C,12 线程):

模型策略Metric(accuracy)GPU 耗时(ms)ARM CPU 耗时(ms)配置文件
中文 PP-OCRv4-rec_mobileBaseline78.921.733.3-
中文 PP-OCRv4-rec_mobile量化+蒸馏78.411.434.0ppocrv4_rec_qat_dist.yaml
中文 PP-OCRv4-rec_serverBaseline81.624.062.5-
中文 PP-OCRv4-rec_server量化+蒸馏81.032.064.4ppocrv4_rec_server_qat_dist.yaml

从上述数据可以看出:INT8 量化在 GPU 上通常能带来约 1.5~2.6 倍的推理加速(如 det_server 在 RTX 3090 上由 32.6ms 降至 12.3ms),精度损失大多控制在 1 个百分点以内;CPU(MKLDNN)端加速幅度相对有限,但精度基本保持。

3. 自动压缩流程

整体流程分为四步:准备环境 → 准备数据集 → 准备预测模型 → 配置并启动压缩。

3.1 准备环境

版本要求:

  • PaddlePaddle == 2.5(需开启 TensorRT 编译选项的版本才能使用 TensorRT 预测)
  • PaddleSlim == 2.5
  • PaddleOCR == develop

安装 PaddlePaddle(以 2.5.1 为例):

# CPU 版本 python -m pip install paddlepaddle==2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple # GPU 版本,以 Ubuntu、CUDA 10.2 为例 python -m pip install paddlepaddle-gpu==2.5.1.post102 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

安装 PaddleSlim 2.5(从 PaddleSlim 仓库的release/2.5分支安装):

pip install paddleslim@git+https://gitee.com/paddlepaddle/PaddleSlim.git@release/2.5

安装其他依赖:

pip install scikit-image imgaug

获取 PaddleOCR 代码并安装依赖:

git clone -b release/2.7 https://github.com/PaddlePaddle/PaddleOCR.git cd PaddleOCR/ pip install -r requirements.txt

3.2 准备数据集

公开 OCR 数据集可参考仓库 docs/datasets 下的说明(如 ocr_datasets.md),随后按照程序运行时的提示,将数据放置到配置文件中对应的位置。

注意:使用不同的数据集时,需要同步修改配置文件中dataset部分的数据路径(data_dir)和数据处理(transforms)部分。

3.2.1 PP-OCRv4_det_server 数据集预处理

PP-OCRv4_det_server 推理时默认将输入图像的最小边缩放到 736,但原始数据集中存在大量长宽比极大的图像(如 13:1)。此时按最小边缩放后,长边会被放大到极大尺寸——实测中发现最大长边可达 10000+,会在构建 TensorRT 子图时导致显存不足。

为解决这一问题,仓库提供了预处理脚本 ppocrv4_det_server_dataset_process.py,其核心逻辑是剔除长宽比过大的图像:仅保留高度和宽度都小于 2000、且长宽比小于 2 的图像,并将这些图像连同标注拷贝到新的数据集目录(datasets/v4_4_test_dataset_small):

if height < 2000 and width < 2000: if max(height, width) / min(height, width) < 2: small_image_path = os.path.join(small_images_path, image_name) cv2.imwrite(small_image_path, image) with open(new_annotation_file, "a") as f: f.write(f"{line}")

处理完成后,将 ppocrv4_det_server_qat_dist.yaml 中Eval.datasetdata_dirlabel_file_list指向新目录即可。

3.3 准备预测模型

自动压缩的输入是 PaddleOCR 的Inference 预测模型,格式要求为两个文件:

  • model.pdmodel:模型结构文件(__model__与其等价);
  • model.pdiparams:权重参数文件(__params__与其等价)。

可在 PaddleOCR 模型库中直接获取 Inference 模型,以中文 PP-OCRv4 为例:

# 下载识别模型 wget https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tar tar -xf ch_PP-OCRv4_rec_infer.tar # 下载检测模型 wget https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tar tar -xf ch_PP-OCRv4_det_infer.tar

解压后得到inference.pdmodelinference.pdiparams,将目录放置到配置文件Global.model_dir指定的位置(示例默认放在./models/下)。

4. 压缩策略配置详解

自动压缩由 run.py 启动,通过--config_path传入 YAML 配置。配置包含GlobalDistillationQuantAwareTrainConfigPostProcessMetricTrainEval等区块,仓库提供了 4 份可直接使用的配置:

配置适用模型
ppocrv4_det_qat_dist.yamlPP-OCRv4 mobile 检测模型
ppocrv4_det_server_qat_dist.yamlPP-OCRv4 server 检测模型
ppocrv4_rec_qat_dist.yamlPP-OCRv4 mobile 识别模型
ppocrv4_rec_server_qat_dist.yamlPP-OCRv4 server 识别模型

4.1 Global:模型与任务信息

Global: model_type: det # 任务类型:det 或 rec model_dir: ./models/ch_PP-OCRv4_det_infer # Inference 模型目录 model_filename: inference.pdmodel # 模型文件名 params_filename: inference.pdiparams # 参数文件名 algorithm: DB # 检测算法(DB)

识别模型还会额外指定字符字典与文本长度:

Global: model_dir: ./models/ch_PP-OCRv4_rec_infer model_filename: inference.pdmodel params_filename: inference.pdiparams model_type: rec algorithm: SVTR character_dict_path: ./ppocr_keys_v1.txt # 字符字典(仓库提供 ppocr_keys_v1.txt) max_text_length: &max_text_length 25 # 最大文本长度(YAML 锚点,供 transforms 复用) use_space_char: true

model_type同时决定了run.py中评估指标的选择与后处理方式(见 run.py)。

4.2 Distillation:蒸馏配置

检测模型使用简单的 L2 特征蒸馏:

Distillation: alpha: 1.0 # 蒸馏损失权重 loss: l2 # L2 距离损失

识别 mobile 模型则同时使用两类蒸馏损失(soft label 蒸馏 + L2 特征蒸馏),并指定蒸馏的中间节点:

Distillation: alpha: [1.0, 1.0] # 两种损失各自的权重 loss: ['skd', 'l2'] # skd: soft label 蒸馏;l2: 特征蒸馏 node: - ['softmax_11.tmp_0'] # 教师/学生网络的输出节点 - ['linear_170.tmp_1']

识别 server 模型同样使用 L2 蒸馏。可见识别任务对蒸馏策略更精细,这与其精度指标(acc)更敏感于量化误差有关。

4.3 QuantAware:量化参数

QuantAware: use_pact: false # 是否使用 PACT 量化方法 activation_bits: 8 # 激活量化比特数 is_full_quantize: false # 是否全量化(false 时部分算子保持浮点) onnx_format: false # 是否使用 ONNX 量化格式 activation_quantize_type: moving_average_abs_max # 激活量化方式(滑动平均绝对值最大) weight_quantize_type: channel_wise_abs_max # 权重量化方式(逐通道绝对值最大) not_quant_pattern: - skip_quant # 包含该模式名的算子不参与量化 quantize_op_types: - conv2d # 仅量化 conv2d 算子 weight_bits: 8 # 权重量化比特数

这套参数在检测与识别四个配置中保持一致:8 bit 量化、仅量化卷积算子、moving_average_abs_max激活量化与channel_wise_abs_max权重量化是 OCR 模型精度保持较好的常见组合。

4.4 TrainConfig:压缩训练超参

TrainConfig: epochs: 2 # 压缩训练轮数(server 配置为 1) eval_iter: 200 # 每训练 200 个 iter 评估一次 learning_rate: type: CosineAnnealingDecay # 余弦退火学习率 learning_rate: 0.000005 optimizer_builder: optimizer: type: Adam weight_decay: 5.0e-05

从 run.py 可以看到,当学习率调度器为CosineAnnealingDecay时,脚本会自动根据len(train_dataloader) * epochs计算并注入T_max(总训练步数):

if all_config["TrainConfig"]["learning_rate"]["type"] == "CosineAnnealingDecay": steps = len(train_dataloader) * all_config["TrainConfig"]["epochs"] all_config["TrainConfig"]["learning_rate"]["T_max"] = steps

因此你无需手动设置T_max

4.5 PostProcess 与 Metric:评估管线

# 检测模型 PostProcess: name: DBPostProcess thresh: 0.3 # DB 二值化阈值 box_thresh: 0.6 # 文本框置信度阈值 max_candidates: 1000 unclip_ratio: 1.5 # 文本框扩张比例 Metric: name: DetMetric main_indicator: hmean # 检测主指标:hmean # 识别模型 PostProcess: name: CTCLabelDecode # CTC 解码 Metric: name: RecMetric main_indicator: acc # 识别主指标:acc ignore_space: False

在 run.py 的eval_function中,build_post_processbuild_metric分别按上述配置构建后处理与评估器,det类型将预测输出包装为{"maps": preds}后送入DBPostProcessrec类型则直接送入CTCLabelDecode

4.6 Train / Eval:数据管线

检测模型的训练集使用SimpleDataSet,包含 7 个标注文件并按ratio_list配比采样,数据增强链为:

Train: dataset: name: SimpleDataSet data_dir: datasets/chinese label_file_list: - datasets/chinese/zhongce_training_fix_1.6k.txt - datasets/chinese/label_train_all_f4_part2.txt # ... 其余标注文件 ratio_list: [0.3, 0.2, 0.1, 0.2, 0.2, 0.1, 0.2] # 各标注文件采样比例 transforms: - DecodeImage: { img_mode: BGR, channel_first: false } - DetLabelEncode: null - IaaAugment: # 随机水平翻转 / 仿射旋转(-10~10度) / 缩放(0.5~3) - EastRandomCropData: # 960x960 随机裁剪 - MakeBorderMap: # DB 边界图生成 - MakeShrinkMap: # 文本收缩图生成 - NormalizeImage: { scale: 1./255., mean: [0.485,0.456,0.406], std: [0.229,0.224,0.225] } - ToCHWImage: null - KeepKeys: { keep_keys: [image, threshold_map, threshold_mask, shrink_map, shrink_mask] } loader: shuffle: true batch_size_per_card: 4 # mobile 配置;server 配置为 2 num_workers: 4 # server 配置为 8

验证集使用DetResizeForTestlimit_side_len: 960limit_type: max),与检测推理预处理保持一致。

识别模型的训练集使用MultiScaleDataSet+MultiScaleSampler多尺度采样:

Train: dataset: name: MultiScaleDataSet data_dir: datasets/real_data/ label_file_list: - datasets/real_data/train_list.txt transforms: - DecodeImage: { img_mode: BGR, channel_first: false } - RecConAug: { prob: 0.5, ext_data_num: 2, image_shape: [48, 320, 3], max_text_length: 25 } - RecAug: null - MultiLabelEncode: { gtc_encode: NRTRLabelEncode } # 同时生成 CTC 与 GTC 标签 - KeepKeys: { keep_keys: [image, label_ctc, label_gtc, length, valid_ratio] } sampler: name: MultiScaleSampler scales: [[320, 32], [320, 48], [320, 64]] # 多种宽高尺度 first_bs: &bs 64 fix_bs: false divided_factor: [8, 16] is_training: True loader: shuffle: true batch_size_per_card: *bs drop_last: true num_workers: 8

验证集使用RecResizeImgimage_shape: [3, 48, 320])将识别图像统一缩放到 48×320。

5. 启动自动压缩

配置好模型路径与数据集路径后即可启动压缩。

单卡启动:

export CUDA_VISIBLE_DEVICES=0 python run.py --save_dir='./save_quant_ppocrv4_det/' --config_path='./configs/ppocrv4/ppocrv4_det_qat_dist.yaml'

run.py支持--save_dir(压缩模型输出目录,默认output)、--config_path(压缩策略配置,必填)、--devices(默认gpu)三个参数,具体见 run.py。

多卡启动:

若训练数据量很大,单卡训练耗时较长,可使用分布式训练获得近似线性的加速比:

export CUDA_VISIBLE_DEVICES=0,1,2,3 python -m paddle.distributed.launch run.py --save_dir='./save_quant_ppocrv4_det/' --config_path='./configs/ppocrv4/ppocrv4_det_qat_dist.yaml'

多卡训练将训练任务按一定方法拆分到多个训练节点,分别完成数据读取、前向计算、反向梯度计算,并将计算出的梯度上传至服务节点;服务节点聚合梯度并更新参数后,将参数广播回各训练节点,开始新一轮训练。多卡训练一轮可处理batch size * num gpus条数据:例如单卡 batch size 为 32 时单轮处理 32 条,四卡训练 batch size 为 32 时单轮可处理 128 条。

学习率与 batch size 的联动关系:学习率与 batch size 近似线性相关。示例中单卡 batch size 为 8 时学习率为 0.00005;若 batch size 扩大 4 倍至 32,学习率也应乘以 4;多卡时 batch size 为 8,学习率需乘以卡数。因此改变 batch size 或训练卡数时,必须同步调整学习率

验证精度:

压缩过程中可通过训练日志观察验证精度。若需在压缩完成后再次验证,可修改配置文件中model_dirmodel_filenameparams_filename指向所需验证的模型,然后执行:

export CUDA_VISIBLE_DEVICES=0 python eval.py --config_path='./configs/ppocrv3_det_qat_dist.yaml'

注:示例目录当前并未包含独立的eval.py文件,压缩过程中的精度评估由run.py内置的eval_function完成(见 run.py),评估逻辑与上述命令一致,也可参考 test_ocr.py 进行推理验证。

6. 预测部署与性能验证

压缩输出的量化模型同样是静态图模型:在 GPU 上可使用 TensorRT 加速,在 CPU 上可使用 MKLDNN 加速。

TensorRT 预测环境要求:

  1. 使用 TensorRT 预测引擎需安装WITH_TRT=ON编译的 Paddle,上述 Paddle 2.5 版本已满足要求;
  2. 需额外安装 TensorRT,具体安装方式可参考仓库中 docs/version3.x/inference_deployment 下的部署文档。

6.1 Paddle Inference 参数说明

test_ocr.py 用于基于 Paddle Inference 的批量性能与精度测试,关键参数如下:

参数名含义
model_pathinference 模型文件所在目录,目录下需包含.pdmodel.pdiparams两个文件
model_filename模型文件名称,默认inference.pdmodel
params_filename参数文件名称,默认inference.pdiparams
dataset_config / config_path数据集配置的 config 路径
image_file待测试单张图片路径(若设置 image_file,则 dataset_config 失效)
device预测设备,可选CPUGPU
use_trt是否使用 TensorRT 预测引擎,deviceGPU时生效
use_mkldnn是否启用 MKLDNN 加速库,deviceCPU时生效
cpu_threadsCPU 预测线程数,默认 10
precision预测精度,可选fp32fp16int8

从源码可以看到,load_predictor(test_ocr.py)在开启 TensorRT 时会先检查dynamic_shape.txt是否存在:

  • 若不存在,则调用collect_shape_range_info收集输入动态 shape 范围并写入该文件,随后提示"Please rerun the program"(程序仅跑 3 个 batch 即退出);
  • 若已存在,则调用enable_tuned_tensorrt_dynamic_shape加载 shape 信息并正常执行完整评估。

因此首次在 GPU + TensorRT 模式下运行 test_ocr.py 时通常需要执行两次:第一次收集动态 shape,第二次得到正确结果。另外,识别模型在 CPU + MKLDNN 下会删除fc_mkldnn_passfc_act_mkldnn_fuse_pass两个 pass 以保证精度(见 test_ocr.py)。

6.2 使用测试脚本进行批量测试

仓库提供了两个一键测试脚本,分别测试检测与识别模型,均接收一个model_type参数(mobileserver):

# 测试 mobile 模型 bash test_ocr_det.sh mobile bash test_ocr_rec.sh mobile # 测试 server 模型 bash test_ocr_det.sh server bash test_ocr_rec.sh server

以 test_ocr_det.sh 为例,脚本会依次完成:启动自动压缩训练(run.py)→ GPU 精度/耗时测试(test_ocr.py,fp32 与 int8)→ CPU 测试(--device CPU --use_mkldnn True)→ 使用tools/infer/predict_det.py做端到端推理验证。脚本头部同时注明了运行环境要求:det 系列需CUDA 11.7 + TensorRT 8.4.2.4 + Paddle 2.5.2(见 test_ocr_rec.sh 首行注释),请务必先核对环境。

6.3 基于压缩模型进行 GPU 批量测试

cd deploy/slim/auto_compression python test_ocr.py \ --model_path save_quant_ppocrv4_det \ --config_path configs/ppocrv4/ppocrv4_det_qat_dist.yaml \ --device GPU \ --use_trt True \ --precision int8

6.4 基于压缩前模型进行 GPU 批量测试

cd deploy/slim/auto_compression python test_ocr.py \ --model_path ch_PP-OCRv4_det_infer \ --config_path configs/ppocrv4/ppocrv4_det_qat_dist.yaml \ --device GPU \ --use_trt True \ --precision int8

6.5 基于压缩模型进行 CPU 批量测试(MKLDNN)

cd deploy/slim/auto_compression python test_ocr.py \ --model_path save_quant_ppocrv4_det \ --config_path configs/ppocrv4/ppocrv4_det_qat_dist.yaml \ --device CPU \ --use_mkldnn True \ --precision int8 \ --cpu_threads 10

提示:MKLDNN 仅在--device CPU时生效;若deviceGPUuse_mkldnncpu_threads不会产生作用。CPU 测试前请先将模型与数据集路径配置正确。

6.6 PaddleLite 端侧部署

自动压缩产出的 INT8 模型同样可用于移动端/嵌入式端部署,PaddleLite 端侧部署流程可参考仓库 deploy/lite 目录下的说明文档(含db_post_process.cccrnn_process.cc等端侧前后处理实现与ocr_db_crnn.cc主程序)。

7. FAQ

7.1 报错找不到模型文件或数据集文件

若在推理或自动压缩(ACT)时报错找不到模型/数据集文件,请检查配置文件中的路径是否正确。以 det_mobile 为例,模型路径配置如下:

Global: model_dir: ./models/ch_PP-OCRv4_det_infer model_filename: inference.pdmodel params_filename: inference.pdiparams

训练集与验证集路径配置如下:

Train: dataset: name: SimpleDataSet data_dir: datasets/chinese label_file_list: - datasets/chinese/zhongce_training_fix_1.6k.txt - datasets/chinese/label_train_all_f4_part2.txt - datasets/chinese/label_train_all_f4_part3.txt - datasets/chinese/label_train_all_f4_part4.txt - datasets/chinese/label_train_all_f4_part5.txt - datasets/chinese/synth_en_my_clip.txt - datasets/chinese/synth_ch_my_clip.txt - datasets/chinese/synth_en_my_largeword_clip.txt Eval: dataset: name: SimpleDataSet data_dir: datasets/v4_4_test_dataset label_file_list: - datasets/v4_4_test_dataset/label.txt

注意所有路径均相对于运行命令时的工作目录(仓库根目录)解析,请确保model_dir下同时存在inference.pdmodelinference.pdiparams,且标注文件中的图片路径与data_dir拼接后真实存在。

7.2 软件环境一致但硬件不同,为什么精度差异很大?

这是正常现象:TensorRT 针对不同硬件设备有不同优化方法,同一种优化策略在不同硬件上可能表现截然不同。以 ppocrv4_det_server 为例,test_ocr.py 中的相关代码如下:

if args.precision == 'int8' and "ppocrv4_det_server_qat_dist.yaml" in args.config_path: # Use the following settings only when the hardware is a Tesla V100. If you are using # a RTX 3090, use the settings in the else branch. pred_cfg.enable_tensorrt_engine( workspace_size=1 << 30, max_batch_size=1, min_subgraph_size=30, precision_mode=precision_map[args.precision], use_static=True, use_calib_mode=False, ) pred_cfg.exp_disable_tensorrt_ops(["elementwise_add"]) else: pred_cfg.enable_tensorrt_engine( workspace_size=1 << 30, max_batch_size=1, min_subgraph_size=4, precision_mode=precision_map[args.precision], use_static=True, use_calib_mode=False, )

当硬件为 RTX 3090 时,使用else分支的策略(min_subgraph_size=4)即可获得正常结果;但当硬件为 Tesla V100 时,必须使用if分支的策略(min_subgraph_size=30并禁用elementwise_add算子进 TensorRT 子图)才能保证量化后精度不下降。具体结果可对比上文第 2 节 Benchmark 中两张表在 RTX 3090 与 V100 上的差异。

8. 总结与扩展阅读

本文完整梳理了 PaddleOCR 模型自动压缩的工程链路:以 PaddleSlimAutoCompression为压缩引擎,以 PaddleOCR 数据管线、后处理与评估体系为外围支撑,通过"量化训练 + 蒸馏"组合策略,将 PP-OCRv4 检测/识别 Inference 模型压缩为 INT8 静态图模型,并在 TensorRT(GPU)与 MKLDNN(CPU)上完成精度与性能验证,最终可接入 PaddleLite 端侧部署。

在此基础上,你还可以进一步探索:

  • 将自动压缩流程应用于 PP-OCRv3 等其他版本模型:只需替换model_dir指向的 Inference 模型,并同步调整配置中的算法与数据集;
  • 更换数据集时,重点调整Train.dataset/Eval.datasetdata_dirlabel_file_listtransforms,并参考 3.2.1 节对极端长宽比图像进行预处理;
  • 调整量化策略时,可关注QuantAware中的is_full_quantizeuse_pact等开关,结合精度与加速效果的平衡选择合适的组合。

【免费下载链接】PaddleOCR飞桨多语言OCR工具包(实用超轻量OCR系统,支持80+种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署) Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询