问道录

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

用户工具

站点工具


ai:端侧ai

这是本文档旧的修订版!


AMLNN PPOCR部署

背景

AMLNN

AMLNN是……

PPOCR

PPOCR是百度开源的一个OCR 工具链,适合端侧与服务器部署,PPOCR包含较多模型,最基本的是文本检测和文本识别模型。这里介绍的是这两个模型在AMLNN平台上的部署示例。

模型转换

深度学习模型 是一套「固定网络结构 + 训练好的权重参数」的组合。

  • 网络结构:描述计算图、层、算子、数据流,规定做什么运算、按什么顺序算,没有具体数值
  • 权重参数:网络每一层的可学习数值(卷积核、偏置、全连接权重等),是模型 “学到的知识”

PPOCR提供的是推理模型是飞桨推理引擎模型,包含三个文件:

  • 权重文件
  • 模型结构文件
  • 推理配置文件

使用PaddleX 的 Paddle2ONNX 插件可以将PPOCR飞桨模型转换为onnx模型,参考paddleocr - obtaining_onnx_models

paddle2onnx.py
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格式,最重要的转换参数包括:

  1. 输入模型
  2. 归一化参数
  3. 量化算法
  4. 量化类型
  5. 量化校准数据集,需要转换为npy格式

预处理

原始的输入是一张包含待识别文字的图片,需要做以下预处理后的数据才能用于推理

  1. 读图:BGR格式存储
  2. 缩放:图片等比缩放到960
  3. 归一化:减去均值,除以方差,把像素值从[0, 255]转换为[0, 1]
  4. 量化:将[0, 1]范围的浮点值量化到[-128, 127]的int8的量化值域里

推理

推理引擎初始化、加载模型后,引擎根据模型对输入的预处理后张量调用算子,进行前向计算并输出结果,结果包含三个图:

  • 概率图:像素为文字区域的置信度
  • 阈值图:给每个像素分配独立二值化阈值,优化文字边缘、弯曲文本
  • 二值图:模型内部根据前两张图计算得到,用于轮廓提取

后处理

文本识别

模型转换

预处理

推理

后处理

总结

  • 随着AI大趋势的发展,端侧AI也会被带着发展,业务会更加地多
  • 平台上端侧AI的关键竞争力包括易用性、推理性能、安全等方面
/app/www/public/data/attic/ai/端侧ai.1781467152.txt.gz · 最后更改: xing