====== AMLNN PPOCR部署 ======
===== 背景 =====
==== AMLNN ====
AMLNN是......
==== PPOCR ====
PPOCR是百度开源的一个OCR 工具链,同时适合端侧与服务器部署,这里介绍的是PPOCR文本检测与文本识别两个模型在AMLNN平台上的部署示例。
==== 模型转换 ====
深度学习模型 是一套「固定网络结构 + 训练好的权重参数」的组合。
* 网络结构:定义计算图、网络层、算子与数据流,规定运算逻辑与执行顺序,不包含具体数值
* 权重参数:网络每一层的可学习数值(卷积核、偏置、全连接权重等),是模型训练得到的特征知识
PPOCR提供的是推理模型是飞桨推理引擎模型,包含三个文件:
* 权重文件
* 模型结构文件
* 推理配置文件
使用PaddleX 的 Paddle2ONNX 插件可以将PPOCR飞桨模型转换为onnx模型,参考[[https://www.paddleocr.ai/main/version3.x/inference_deployment/others/obtaining_onnx_models.html|paddleocr - obtaining_onnx_models]]。
paddlex \
--paddle2onnx \ # 使用paddle2onnx功能
--paddle_model_dir /your/paddle_model/dir \ # 指定Paddle模型所在的目录
--onnx_model_dir /your/onnx_model/output/dir \ # 指定转换后ONNX模型的输出目录
--opset_version 7 # 指定要使用的 ONNX opset 版本
使用adlaconvter工具可以将onnx模型转换为adla模型。
===== 部署流程 =====
graph TD
A[获取模型] --> C[**格式转换**
eg: Paddle → ONNX → adla]
C --> D[开发和运行环境准备]
D --> F[业务推理实现]
F --> G[测试调优]
G --> H[上线运维]
subgraph F[**业务推理实现**]
F1[预处理
缩放/归一化/量化/维度转换]
F2[模型推理
加载模型+前向计算]
F3[后处理
坐标还原/解码/阈值过滤]
F1 --> F2 --> F3
end
===== 文本检测 =====
==== 模型转换 ====
通过adlaconvter工具将ppocr onnx模型转换为adla格式,最重要的转换参数包括:
- 输入模型
- 归一化参数
- 量化算法
- 量化类型
- 量化校准数据集,需要转换为npy格式
==== 预处理 ====
原始的输入是一张包含待识别文字的图片,需要做以下预处理后的数据才能用于推理
- 读图:BGR格式存储
- 缩放:图片等比缩放到960
- 归一化:像素值从[0, 255]映射到[0, 1]
- INT8量化:将[0, 1]范围的浮点值映射到[-128, 127]的整型范围
==== 推理 ====
推理引擎初始化、加载模型后,引擎根据模型对输入的预处理后张量调用算子,进行前向计算并输出结果,结果包含三个图:
* 概率图:单像素为文字区域的置信度
* 阈值图:给每个像素分配独立二值化阈值,优化倾斜、弯曲文本边缘
* 二值图:模型内部根据前两张图计算得到,用于轮廓提取
==== 后处理 ====
基于模型输出的特征图,依次完成**轮廓提取、阈值筛选、坐标逆变换、文本框矫正**,最终输出原图上的文本四点坐标与对应置信度。
===== 文本识别 =====
==== 模型转换 ====
同检测模型流程:先将飞桨识别模型转为 ONNX,再通过 adlaConverter 转为 ADLA 格式,按需配置归一化参数、量化策略与校准数据集。
==== 预处理 ====
- 裁剪图像:根据检测输出的坐标,从原图截取单行文字区域;
- 尺寸规整:固定图像高度,宽度等比例自适应;
- 归一化、维度变换、INT8 量化,匹配模型输入要求。
==== 推理 ====
引擎加载识别模型并执行前向计算,输出字符序列特征张量。
==== 后处理 ====
对特征张量做 CTC 解码、字符字典映射、去重拼接,最终输出识别文本。
===== 总结 =====
* 随着AI大趋势的发展,端侧AI也会被带着发展,业务会更加地多
* 平台上端侧AI的关键竞争力包括易用性、推理性能、安全等方面