Ascend-SACT/PaddleOCR
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

引言

PaddleOCR 将文档和图像转换为结构化、适合 AI 处理的数据(如 JSON 和 Markdown),其准确率领先行业,为全球从独立开发者和初创公司到大型企业的用户提供了强大的 AI 应用支持。凭借超过 60,000 颗星的好评,以及与 MinerU、RAGFlow、Pathway 和 Cherry Studio 等领先项目的深度集成,PaddleOCR 已成为 AI 时代开发智能文档应用的首选解决方案。 PP-OCRv5_server模型分为det检测模型和rec识别模型: a. PP-OCRv5_server_det 是 PaddleOCR 团队开发的最新一代文本检测模型 PP-OCRv5_det 系列之一。它专为高性能应用设计,支持在多种场景下(包括手写、竖排、旋转和弯曲文本)以及多种语言(如简体中文、繁体中文、英文和日文)中的文本检测。主要特点包括对复杂布局、不同大小的文本和具有挑战性的背景的强大处理能力,使其适用于文档分析、车牌识别和场景文本检测等实际应用。 b. P-OCRv5_server_rec 是 PaddleOCR 团队开发的最新一代文本行识别模型之一。它旨在通过单一模型高效准确地支持四种主要语言——简体中文、繁体中文、英文和日文,以及复杂文本场景(如手写、竖排文本、拼音和罕见字符)的识别。

一、准备运行环境

服务器910B2*1
权重类型OM
容器版本2.1.RC2-800I-A2-py311-openeuler24.03-lts
固件驱动版本23.0.5.1

二、下载权重

a. https://modelscope.cn/models/PaddlePaddle/PP-OCRv5_server_det

b. https://modelscope.cn/models/PaddlePaddle/PP-OCRv5_server_rec

三、部署指导

本环境搭建方法是基于PaddleOCR接口调用,因为PaddleOCR依赖PaddleCPU和PaddleNPU,所以需要进行框架编译安装。

安装参考: 方式一:编译安装,参考: https://github.com/PaddlePaddle/PaddleCustomDevice/blob/develop/backends/npu/README_cn.md

方式二:通过whl包安装:

paddlepaddle日构建包

PaddleCustomDeviece编译构建包

在上面两个地址中找到需要的包的版本,下载到本地,xftp传到服务器上

pip install paddlepaddle-3.0.0.dev20250527-cp39-cp39-linux_aarch64.whl
pip install paddle_custom_npu-3.0.0.dev20250527-cp39-cp39-linux_aarch64.whl
# CANN-8.0.0 对 numpy 和 opencv 部分版本不支持,建议安装指定版本
python -m pip install numpy==1.26.4
python -m pip install opencv-python==3.4.18.65

source /usr/local/Ascend/ascend-toolkit/set_env.sh
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1.0.0:$LD_PRELOA

四、运行指导

安装验证测试:

python -c "import paddle; paddle.utils.run_check()"
==================================================
共处理 10 张图片:[2.png, 1.png, 10.png, 3.png, 5.png, 7.png, 8.png, 4.png, 6.png, 9.png]
每张图片推理时间: ['17.7093', '3.8061', '0.5734', '0.5779', '3.5471', '0.6304', '0.6638', '0.6857', '1.5316', '0.6152']
平均推理时间: 3.0341 秒
最长推理时间: 17.7093 秒
最短推理时间: 0.5734 秒
==================================================

五、性能优化

通过PaddleX进行推理优化

PaddleX专门用于推理加速的工具,自身集成了数据预处理,动态和静态切换,底层灵活调度Paddle Inference和Paddle Onnxruntime,不依赖于PaddleNPU和PaddleOCR,对于推理部署而言,更推荐该方法。

环境搭建

git clone https://github.com/PaddlePaddle/PaddleX.git
cd PaddleX
pip install -e ".[base]"

手动编译安装高性能推理插件hpi-npu:

cd PaddleX/deploy/ultra-infer/python
# 使能om,onnx后端,禁用paddle后端,禁用gpu
export ENABLE_OM_BACKEND=ON ENABLE_ORT_BACKEND=ON ENABLE_PADDLE_BACKEND=OFF WITH_GPU=OFF DEVICE_TYPE=NPU
# 注意,仅aarch64机器需要设置NPU_HOST_LIB,指定libascend库
export NPU_HOST_LIB=/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/lib64
python setup.py build
python setup.py bdist_wheel
python -m pip install dist/ultra_infer_npu*.whl

获取权重文件

MindScope PP-OCRv5-server,本地路径结构如下:

-- pp-ocrv5_server_det
	|--fusion_result.json
    |--inference.om
    |--inference.onnx
    |--inference.yml
    |--inference_linux_aarch64.om
    PP-OCRv5_server_rec
    |--fusion_result.json
    |--inference.om
    |--inference.onnx
    |--inference.yml
    |--inference_linux_aarch64.om

权重转换

# 对detect模型做转换
atc --model=inference.onnx --framework=5 --output=inference --soc_version=Ascend910B2 --input_shape "x:1,3,544,960" --precision_mode_v2=origin
# 对rec模型进行转换
atc --model=inference.onnx --framework=5 --output=inference --soc_version=Ascend910B2 --input_shape "x:1,3,48,320" --precision_mode_v2=origin

已完成格式转换,生成的om模型在容器的

${home}/PP-OCRv5_server_det_onnx和
${home}/PP-OCRv5_server_rec_onnx路径下

参数说明:   --input_shape "x:1,3,544,960" 在detect模型转换中该参数设置是因为客户的图片均为2730 x 1535大小,经过比例缩放后变成960 x 544,在实际使用中,可以根据真实的场景选择paddleX中对detect部分resize选择对应方法。

  --input_shape "x:1,3,48,320" 在rec模型中该参数设置是因为识别模型的输入是由detect的输出提供,对于一个图片识别的框数量是变化的,shape也是变化的,这里固定识别框大小,但是在yaml中不配置input shape,代码会自动对识别框进行缩放,满足动态识别的业务要求。 

  --precision_mode_v2=origin 使用onnx模型原始的精度类型

推理脚本改动点如下:

from paddlex import create_pipeline
……
def main():
	……
pipeline = create_pipeline(pipeline="/workdir/scripts/OCR.yaml", use_hpip=True)
	……
try:
        ……
        # 遍历图片进行推理
        for i, image_path in enumerate(image_files, 1):
			……
            predict_result = pipeline.predict(
                input=img_array,
                use_doc_orientation_classify=False,
                use_doc_unwarping=False,
                use_textline_orientation=False,
            )
			……
            # 处理结果
            res = []
            for result in predict_result:
                res.append(result)
            simplified_result = extract_ocr_results(res)
			 ……

配合的OCR.yaml文件:

TextDetection:
    module_name: text_detection
    model_name: PP-OCRv5_server_det
    model_dir: /workdir/models/PP-OCRv5_server_det_onnx
    limit_side_len: 960
    limit_type: max
    max_side_limit: 4000
    thresh: 0.3
    box_thresh: 0.6
    unclip_ratio: 1.5
    hpi_config:
        auto_config: False
        backend: om
        device_type: npu
    input_shape: [3, 544, 960]
TextRecognition:
    module_name: text_recognition
    model_name: PP-OCRv5_server_rec
    model_dir: /workdir/models/PP-OCRv5_server_rec_onnx
    batch_size: 1
    score_thresh: 0.0
    hpi_config:
        auto_config: False
        backend: om
        device_type: npu

测试结果

==================================================
共处理 10 张图片: [1.png, 10.png, 2.png, 3.png, 4.png, 5.png, 6.png, 7.png, 8.png, 9.png]
每张图片推理时间: ['0.0180', '0.0175', '0.0178', '0.0206', '0.0207', '0.0192', '0.0202', '0.0230', '0.0202', '0.0222']
平均推理时间: 0.0199 ms
最长推理时间: 0.0230 ms
最短推理时间: 0.0175 ms
==================================================

通过Paddlex推理及高性能推理插件hpi-npu进行产线pipeline推理,平均推理时间下降至0.02ms,优于A100性能,完成调优。