ai:端侧ai
差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| ai:端侧ai [2026/06/14 00:24] – xing | ai:端侧ai [2026/06/15 02:06] (当前版本) – [PPOCR] xing | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== AMLNN PPOCR ====== | + | ====== AMLNN PPOCR部署 |
| ===== 背景 ===== | ===== 背景 ===== | ||
| + | |||
| + | ==== AMLNN ==== | ||
| AMLNN是...... | AMLNN是...... | ||
| - | PPOCR是百度开源的一个OCR 工具链,适合端侧与服务器部署,PPOCR包含较多模型,最基本的是文本检测和文本识别模型。这里介绍的是这两个模型在AMLNN平台上的部署示例。 | + | ==== PPOCR ==== |
| - | ===== 模型转换 | + | PPOCR是百度开源的一个OCR 工具链,同时适合端侧与服务器部署,这里介绍的是PPOCR文本检测与文本识别两个模型在AMLNN平台上的部署示例。 |
| + | |||
| + | |||
| + | ==== 模型转换 ==== | ||
| 深度学习模型 是一套「固定网络结构 + 训练好的权重参数」的组合。 | 深度学习模型 是一套「固定网络结构 + 训练好的权重参数」的组合。 | ||
| - | * 网络结构:描述计算图、层、算子、数据流,规定做什么运算、按什么顺序算,没有具体数值 | + | * 网络结构:定义计算图、网络层、算子与数据流,规定运算逻辑与执行顺序,不包含具体数值 |
| - | * 权重参数:网络每一层的可学习数值(卷积核、偏置、全连接权重等),是模型 | + | * 权重参数:网络每一层的可学习数值(卷积核、偏置、全连接权重等),是模型训练得到的特征知识 |
| PPOCR提供的是推理模型是飞桨推理引擎模型,包含三个文件: | PPOCR提供的是推理模型是飞桨推理引擎模型,包含三个文件: | ||
| 行 21: | 行 26: | ||
| 使用PaddleX 的 Paddle2ONNX 插件可以将PPOCR飞桨模型转换为onnx模型,参考[[https:// | 使用PaddleX 的 Paddle2ONNX 插件可以将PPOCR飞桨模型转换为onnx模型,参考[[https:// | ||
| + | |||
| + | <code python paddle2onnx.py> | ||
| + | paddlex \ | ||
| + | --paddle2onnx \ # 使用paddle2onnx功能 | ||
| + | --paddle_model_dir / | ||
| + | --onnx_model_dir / | ||
| + | --opset_version 7 # 指定要使用的 ONNX opset 版本 | ||
| + | </ | ||
| 使用adlaconvter工具可以将onnx模型转换为adla模型。 | 使用adlaconvter工具可以将onnx模型转换为adla模型。 | ||
| - | ===== 前处理 ===== | + | ===== 部署流程 ===== |
| + | |||
| + | < | ||
| + | graph TD | ||
| + | A[获取模型] --> C[**格式转换**< | ||
| + | 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, | ||
| + | - INT8量化:将[0, | ||
| + | |||
| + | ==== 推理 ==== | ||
| + | |||
| + | 推理引擎初始化、加载模型后,引擎根据模型对输入的预处理后张量调用算子,进行前向计算并输出结果,结果包含三个图: | ||
| + | |||
| + | * 概率图:单像素为文字区域的置信度 | ||
| + | * 阈值图:给每个像素分配独立二值化阈值,优化倾斜、弯曲文本边缘 | ||
| + | * 二值图:模型内部根据前两张图计算得到,用于轮廓提取 | ||
| + | |||
| + | ==== 后处理 ==== | ||
| + | |||
| + | 基于模型输出的特征图,依次完成**轮廓提取、阈值筛选、坐标逆变换、文本框矫正**,最终输出原图上的文本四点坐标与对应置信度。 | ||
| + | |||
| + | ===== 文本识别 ===== | ||
| + | |||
| + | ==== 模型转换 ==== | ||
| + | |||
| + | 同检测模型流程:先将飞桨识别模型转为 ONNX,再通过 adlaConverter 转为 ADLA 格式,按需配置归一化参数、量化策略与校准数据集。 | ||
| + | |||
| + | ==== 预处理 ==== | ||
| + | |||
| + | - 裁剪图像:根据检测输出的坐标,从原图截取单行文字区域; | ||
| + | - 尺寸规整:固定图像高度,宽度等比例自适应; | ||
| + | - 归一化、维度变换、INT8 量化,匹配模型输入要求。 | ||
| + | |||
| + | ==== 推理 ==== | ||
| + | |||
| + | 引擎加载识别模型并执行前向计算,输出字符序列特征张量。 | ||
| + | |||
| + | ==== 后处理 ==== | ||
| + | |||
| + | 对特征张量做 CTC 解码、字符字典映射、去重拼接,最终输出识别文本。 | ||
| - | ===== 推理 | + | ===== 总结 |
| - | ===== 后处理 ===== | + | * 随着AI大趋势的发展,端侧AI也会被带着发展,业务会更加地多 |
| + | * 平台上端侧AI的关键竞争力包括易用性、推理性能、安全等方面 | ||
/app/www/public/data/attic/ai/端侧ai.1781375096.txt.gz · 最后更改: 由 xing
