问道录

人生到处知何似 应似飞鸿踏雪泥

用户工具

站点工具


ai:端侧ai

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

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