0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将PP-OCRv3英文识别模型部署在Corstone-300虚拟硬件平台上

安芯教育科技 来源:极术社区 作者:极术社区 2022-08-12 15:03 次阅读

项目概述

经典的深度学习工程是从确认任务目标开始的,我们首先来简单地介绍一下 OCR 中的文本识别任务以及本期部署实战课程中我们所使用的工具和平台。

1.1 文本识别任务

文本识别是 OCR 的一个子任务,其任务为识别一个固定区域的文本内容。在 OCR 的两阶段方法里,它接在文本检测后面,将图像信息转换为文字信息。在卡证票据信息抽取与审核、制造业产品溯源、政务医疗文档电子化等行业场景中应用广泛。

515271ee-19ee-11ed-ba43-dac502259ad0.jpg

1.2 PP-OCRv3

如下图所示,PP-OCRv3 的整体框架示意图与 PP-OCRv2 类似,但较 PP-OCRv2 而言,针对检测模型和识别模型进行了进一步地优化。例如:文本识别模型在 PP-OCRv2 的基础上引入 SVTR,并使用 GTC 指导训练和模型蒸馏。

51665218-19ee-11ed-ba43-dac502259ad0.jpg

更多关于 PP-OCRv3 的特征及优化策略,可查看 PP-OCRv3 arXiv 技术报告[5]。

1.3 Arm 虚拟硬件 (Arm Virtual Hardware, AVH)

作为 Arm 物联网全面解决方案的核心技术之一,AVH 很好地解决了实体硬件所面临的难扩展、难运维等痛点。AVH 提供了简单便捷并且可扩展的途径,让 IoT 应用的开发摆脱了对实体硬件的依赖并使得云原生开发技术在嵌入式物联网、边缘侧机器学习领域得到了应用。尤其是在芯片紧张的当今时代,使用 AVH 开发者甚至可以在芯片 RTL 之前便可接触到最新处理器 IP。

目前 AVH 提供两种形式供开发者使用。一种是托管在 AWS 以及 AWS China 上以亚马逊机器镜像 AMI 形式存在的 Arm Corstone 和 Cortex CPU 的虚拟硬件,另外一种则是由 Arm 以 SaaS 平台的形式提供的 AVH 第三方硬件。本期课程我们将使用第一种托管在 AWS 以及 AWS China 上以亚马逊机器镜像 AMI 形式存在的 Corstone 和 Cortex CPU 的虚拟硬件。

由于目前 AWS China 账号主要面向企业级开发者开放,个人开发者可访问 AWS Marketplace 订阅 AVH 相关服务。参考下图步骤创建 AVH AMI 实例。

51779136-19ee-11ed-ba43-dac502259ad0.jpg

端到端部署流程

接下来小编将重点向大家展示从模型训练到部署的全流程,本期课程所涉及的相关代码已在 GitHub 仓库开源,欢迎大家下载体验!


(位于 PaddleOCR 的 dygraph 分支下 deploy 目录的 avh 文件目录中)

https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/deploy/avh

5186c7c8-19ee-11ed-ba43-dac502259ad0.jpg

2.1 模型训练

PaddleOCR 模型使用配置文件 (.yml) 管理网络训练、评估的参数。在配置文件中,可以设置组建模型、优化器、损失函数、模型前后处理的参数,PaddleOCR 从配置文件中读取到这些参数,进而组建出完整的训练流程,完成模型训练。在需要对模型进行优化时,可以通过修改配置文件中的参数完成配置 (完整的配置文件说明可以参考文档:配置文件内容与生成[7]),使用简单且便于修改。

为实现与 Cortex-M 的适配,在模型训练时我们需要修改所使用的配置文件[8]。去掉不支持的算子,同时为优化模型,在模型调优部分使用了 BDA (Base Data Augmentation),其包含随机裁剪,随机模糊,随机噪声,图像反色等多个基础数据增强方法。相关配置文件可参考如下代码。

# Example: PP-OCRv3/en_PP-OCRv3_rec.yml

Global:

  debug: false

  use_gpu: true

  epoch_num: 500

  log_smooth_window: 20

  print_batch_step: 10

  save_model_dir: ./output/rec

  save_epoch_step: 3

  eval_batch_step: [0, 2000]

  cal_metric_during_train: true

  pretrained_model:

  checkpoints:

  save_inference_dir:

  use_visualdl: false

  infer_img: doc/imgs_words/ch/word_1.jpg

  character_dict_path: ppocr/utils/en_dict.txt

  max_text_length: &max_text_length 25

  infer_mode: false

  use_space_char: true

  distributed: true

  save_res_path: ./output/rec/predicts_ppocrv3_en.txt



Optimizer:

  name: Adam

  beta1: 0.9

  beta2: 0.999

  lr:

    name: Cosine

    learning_rate: 0.001

    warmup_epoch: 5

  regularizer:

    name: L2

    factor: 3.0e-05



Architecture:

  model_type: rec

  algorithm: SVTR

  Transform:

  Backbone:

    name: MobileNetV1Enhance

    scale: 0.5

    last_conv_stride: [1, 2]

    last_pool_type: avg

  Neck:

    name: SequenceEncoder

    encoder_type: reshape

  Head:

    name: CTCHead

    mid_channels: 96

    fc_decay: 0.00002



Loss:

  name: CTCLoss



PostProcess:

  name: CTCLabelDecode



Metric:

  name: RecMetric

  main_indicator: acc



Train:

  dataset:

    name: LMDBDataset

    data_dir: MJ_ST

    ext_op_transform_idx: 1

    transforms:

    - DecodeImage:

        img_mode: BGR

        channel_first: false

    - RecAug:

    - CTCLabelEncode:

    - RecResizeImg:

        image_shape: [3, 32, 320]

    - KeepKeys:

        keep_keys:

        - image

        - label

        - length

  loader:

    shuffle: true

    batch_size_per_card: 128

    drop_last: true

    num_workers: 4

Eval:

  dataset:

    name: LMDBDataset

    data_dir: EN_eval

    transforms:

    - DecodeImage:

        img_mode: BGR

        channel_first: false

    - CTCLabelEncode:

    - RecResizeImg:

        image_shape: [3, 32, 320]

    - KeepKeys:

        keep_keys:

        - image

        - label

        - length

  loader:

    shuffle: false

    drop_last: false

    batch_size_per_card: 128

    num_workers: 4

我们使用网上开源英文数据集 MJ+ST 作为训练测试数据集,并通过以下命令进行模型训练。模型训练周期与训练环境以及数据集大小等均密切相关,大家可根据自身需求进行配置。

# Example training command

python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o 

            Global. save_model_dir=output/rec/ 

            Train.dataset.name=LMDBDataSet 

            Train.dataset.data_dir=MJ_ST 

            Eval.dataset.name=LMDBDataSet 

            Eval.dataset.data_dir=EN_eval 

2.2 模型导出

模型训练完成后,还需要将训练好的文本识别模型转换为 Paddle Inference 模型,才能使用深度学习编译器 TVM 对其进行编译从而获得适配在 Cortex-M 处理器上运行的代码。可以参考以下命令导出 Paddle Inference 模型。

# Example exporting model command

python3 tools/export_model.py 

            -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o 

            Global.pretrained_model=output/rec/best_accuracy.pdparams 

            Global.save_inference_dir=output/rec/infer

Inference 模型导出后,可以通过以下命令使用 PaddleOCR 进行推理验证。为便于各位开发者可直接体验和部署,大家可以通过https://paddleocr.bj.bcebos.com/tvm/ocr_en.tar链接直接下载我们训练完成并导出的英文文本识别 Inference 模型。

# Example infer command

python3 tools/infer/predict_rec.py --image_dir="path_to_image/word_116.png" 

--rec_model_dir="path_to_infer_model/ocr_en" 

--rec_char_dict_path="ppocr/utils/en_dict.txt" 

--rec_image_shape="3,32,320"

我们使用与后续部署中相同的图进行验证,如下图所示。预测结果为如下,与图片一致且具有较高的置信度评分,说明我们的推理模型已经基本准备完毕了。

Predicts of /Users/lilwu01/Desktop/word_116.png:('QBHOUSE', 0.9867456555366516)

519b4e82-19ee-11ed-ba43-dac502259ad0.jpg

2.3 模型编译

为实现在 Cortex-M 上直接完成 PaddlePaddle 模型的部署,我们需要借助深度学习编译器 TVM 来进行相应模型的转换和适配。TVM 是一款开源的深度学习编译器, 主要用于解决将各种深度学习框架部署到各种硬件设备上的适配性问题。

如下图所示,他可以接收由 PaddlePaddle 等经典的深度学习训练框架编写的模型并将其转换成可在目标设备上运行推理任务的代码。

51a955ae-19ee-11ed-ba43-dac502259ad0.jpg

我们使用 TVM 的 Python 应用程序 tvmc 来完成模型的编译。大家可参考如下命令对 Paddle Inference 模型进行编译。通过指定 --target=cmsis-nn,c 使得模型中 CMSIS NN[9] 库支持的算子会调用 CMSIS NN 库执行,而不支持的算子则会回调到 C 代码库。

# Example of Model compiling using tvmc

python3 -m tvm.driver.tvmc compile 

         path_to_infer_model/ocr_en/inference.pdmodel 

    --target=cmsis-nn,c 

    --target-cmsis-nn-mcpu=cortex-m55 

    --target-c-mcpu=cortex-m55 

    --runtime=crt 

    --executor=aot 

    --executor-aot-interface-api=c 

    --executor-aot-unpacked-api=1 

    --pass-config tir.usmp.enable=1 

    --pass-config tir.usmp.algorithm=hill_climb 

    --pass-config tir.disable_storage_rewrite=1 

         --pass-config tir.disable_vectorize=1 

    --output-format=mlf 

    --model-format=paddle 

    --module-name=rec 

    --input-shapes x:[1,3,32,320] 

    --output=rec.tar

更多关于参数配置的具体说明,大家可以直接输入 tvmc compile --help 来查看。编译后的模型可以在 –output 参数指定的路径下查看 (此处为当前目录下的 rec.tar 压缩包内)。

2.4 模型部署

参考图 3 所示的 AVH AMI 实例 (instance) 创建的流程并通过 ssh 命令远程登录到实例中去,当看到如下所示的提示画面说明已经成功登入。

51be0b16-19ee-11ed-ba43-dac502259ad0.jpg

51cbdc3c-19ee-11ed-ba43-dac502259ad0.jpg

2.1-2.3 中所述的模型训练、导出、编译等步骤均可以选择在本地机器上完成或者在 AVH AMI 中完成,大家可根据个人需求确定。为便于开发者朋友更直观地体验如何在 AVH 上完成 PaddlePaddle 模型部署,我们为大家提供了部署的示例代码来帮助大家自动化的完成环境配置,机器学习应用构建以及在含有 Cortex-M55 的 Corstone-300 虚拟硬件上执行并获取结果。

登入 AVH AMI 实例后,可以输入以下命令来完成模型部署和查看应用执行结果。run_demo.sh[11] 脚本将会执行以下 6 个步骤来自动化的完成应用构建和执行,执行结果如图 10 所示。

$ git clone https://github.com/PaddlePaddle/PaddleOCR.git

$ cd PaddleOCR

$ git pull origin dygraph

$ cd deploy/avh

$ ./run_demo.sh

51f887b4-19ee-11ed-ba43-dac502259ad0.jpg

不难看出,该飞桨英文识别模型在含有 Cortex-M55 处理器的 Corstone-300 虚拟硬件上的推理结果与 2.2 章节中在服务器主机上直接进行推理的推理结果高度一致,说明将 PaddlePaddle 模型直接部署在 Cortex-M55 虚拟硬件上运行良好。

520b5e20-19ee-11ed-ba43-dac502259ad0.jpg

总结

本期课程,小编带领大家学习了如何将 PP-OCRv3 中发布的英文识别模型 (完成算子适配后) 部署在 Corstone-300 的虚拟硬件平台上。在下期推送中,我们将以计算机视觉领域的目标检测任务 (Detection) 为目标,一步步地带领大家动手完成从模型训练优化到深度学习应用部署的整个端到端的开发流程。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    2989

    浏览量

    41720
  • 硬件平台
    +关注

    关注

    0

    文章

    20

    浏览量

    11881
  • 识别模型
    +关注

    关注

    0

    文章

    5

    浏览量

    6660

原文标题:AVH 动手实践 (二) | 在 Arm 虚拟硬件上部署 PP-OCR 模型

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PP-OCRv3优化策略详细解读

    PP-OCR是PaddleOCR团队自研的超轻量OCR系统,面向OCR产业应用,权衡精度与速度。近期,PaddleOCR团队针对PP-OCRv2的检测模块和识别模块,进行共计9个方面的升级,打造出一款全新的、效果更优的超轻量OC
    的头像 发表于 05-12 09:21 3019次阅读

    如何将PP-PicoDet 目标检测模型部署Corstone-300虚拟硬件平台上

    百度飞桨与 Arm 深度合作,增加了 Cortex-M 硬件上支持的深度学习模型的数量,同时也填补了飞桨模型在 Arm Cortex-M 硬件上的适配空白,为开发者提供了更多的选择。
    的头像 发表于 09-22 09:50 1734次阅读

    如何在Arm虚拟硬件虚拟树莓派4上完成图像识别应用的部署

    本期课程,小编将以计算机视觉领域的图像识别任务为目标,带领大家动手实现在树莓派的虚拟设备上部署基于 Paddle Lite 的图像识别模型
    的头像 发表于 09-30 10:00 2089次阅读

    如何将Linux操作系统移植到目标平台上

    如何将Linux操作系统移植到目标平台上?Linux交叉编译环境的建立及内核配置和编译Linux移植中实际指令集小于标准MIPS指令集的问题如何将Linux操作系统移植到MIPS体系结构系统上?
    发表于 04-22 07:04

    如何将FreeModbus移植到STM32平台上

    modbus是什么?如何将FreeModbus移植到STM32平台上
    发表于 11-17 07:44

    如何将uCOS-III实时操作系统移植到目标平台上并运行?

    如何将uCOS-III实时操作系统移植到目标平台上并运行?
    发表于 11-29 06:11

    如何将AI模型部署到嵌入式系统中

    本期我们分享主题是如何将 AI 模型部署到嵌入式系统中,下一期介绍如何在 RT-Thread 操作系统上运行 Mnist Demo(手写数字识别
    发表于 12-14 07:55

    介绍一种Arm ML嵌入式评估套件

    限度地提高物联网和嵌入式设备的性能。 Corstone-300 可以轻松集成 Ethos-U55,该平台可用作生态系统 FPGA (MPS3)和固定虚拟
    发表于 08-12 15:35

    如何用Arm虚拟硬件Arm Cortex-M上部署PaddlePaddle

    了如何在 AVH Corstone-300 平台上部署 PP-OCRv3 中发布的英文文本识别模型
    发表于 09-02 14:48

    Arm虚拟硬件部署PP-PicoDet模型

    1、Arm虚拟硬件部署PP-PicoDet模型  经典的深度学习工程是从确认任务目标开始的,
    发表于 09-16 14:42

    Arm虚拟硬件部署PP-PicoDet模型的设计方案

    1、Arm虚拟硬件部署PP-PicoDet模型  经典的深度学习工程是从确认任务目标开始的,
    发表于 09-23 15:02

    如何使用TensorFlow神经网络模型部署到移动或嵌入式设备上

    有很多方法可以经过训练的神经网络模型部署到移动或嵌入式设备上。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如And
    发表于 08-02 06:43

    Arm Corstone™-300参考包技术概述

    子系统是可配置的、可修改的和预集成的核心。Corstone™ SSE-300示例子系统安全IP与最相关的Arm CoreLink预集成™ 和Arm CoreSight™ 组件
    发表于 08-10 07:56

    arm SoC平台部署PP-OCR v2显示安装404找不到是为什么?

    /fp32bmodel/ch_PP-OCRv2_det_fp32_b1b4.bmodel --det_batch_size 4】 出现OSError: Could not find library geos_c
    发表于 09-18 08:14

    如何将pytorch的模型部署到c++平台上模型流程

    最近因为工作需要,要把pytorch的模型部署到c++平台上,基本过程主要参照官网的教学示例,期间发现了不少坑,特此记录。
    的头像 发表于 10-26 14:36 2670次阅读