目录

第1章 使用OpenVINOTM实现飞桨版PGNet推理程序

1.1OpenVINOTM 简介

1.2 PGNet简介

1.3准备PGNet的OpenVINO推理程序开发环境

1.4下载PGNet预训练模型

1.5用OpenVINOTM读取PGNet预训练模型

1.6使用OpenVINOTM开发PGNet的推理程序

1.6.1升级PaddleOCR自带预测程序,支持OpenVINO推理

1.6.2借鉴PaddleOCR的前处理和后处理代码,实现OpenVINO推理程序

1.7总结:


使用OpenVINOTM实现飞桨版PGNet推理程序

作者:杨雪峰  英特尔物联网行业创新大使

1.1OpenVINOTM 简介

OpenVINO™ 工具包2022.1版于2022年3月22日正式发布,根据官宣《OpenVINO™ 迎来迄今为止最重大更新,2022.1新特性抢先看》,OpenVINO™ 2022.1将是迄今为止最大变化的版本,并可以直接支持读取飞桨模型。

1.2 PGNet简介

任意形状文本的识别(例如,弯曲文本)受到越来越多的研究关注,而应用也愈发广泛(例如,广告牌识别、印章识别等),如下图所示。

AAAI 2021会议上发表的百度自研的端到端场景文本识别PGNet[1]算法,有效的满足了上述需求,其典型特点有:

  • PGNet是一种新颖的、端到端的、的任意形状的文本检测识别器框架
  • 不需要字符级别的标注,NMS操作以及ROI操作[2]
  • 提出预测文本行内的阅读顺序模块和基于图的修正模块来提升文本识别效果
  • 识别精度和运行速度堪称SOTA

*上图引用自PNGet论文[1]

另外,飞桨版PGNet的工程化和文档化做的极好,没有任何基础的人,都可以在不到半天的时间内完成PGNet的开发环境搭建、模型训练、ONNX模型导出。

PGNet的文档链接:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/doc/doc_ch/algorithm_e2e_pgnet.md

1.3准备PGNet的OpenVINO推理程序开发环境

要完成PGNet的OpenVINO推理程序开发,需要安装:

  • PaddleOCR运行环境,参考:

    1. 安装PaddleOCR运行环境
    2. 克隆PaddleOCR到本地,并安装第三方库
  • OpenVINOTM开发工具
pip install openvino-dev[onnx]

1.4下载PGNet预训练模型

PaddleOCR已提供PGNet预训练模型,请自行下载并解压,如下图所示。

PGNet预训练模型下载链接:https://paddleocr.bj.bcebos.com/dygraph_v2.0/pgnet/e2e_server_pgnetA_infer.tar
下载完毕后,运行PaddleOCR自带的预测程序 tools\infer\predict_e2e.py

# 如果想使用CPU进行预测,需设置use_gpu参数为False

python3 tools/infer/predict_e2e.py --e2e_algorithm="PGNet" --image_dir="./doc/imgs_en/img623.jpg" --e2e_model_dir="./inference/e2e_server_pgnetA_infer/" --e2e_pgnet_valid_set="totaltext" --use_gpu=False

运行结果,如下图所示,说明PaddleOCR和PGNet预训练模型都准备好了。

 从图中可见,运行的平均时间是5.09s。

1.5用OpenVINOTM读取PGNet预训练模型

如前所述,OpenVINOTM支持直接读入飞桨模型。使用下面的代码,可以快速测试OpenVINOTM读入PGNet模型的效果。

from openvino.runtime import Core# 指定PGNet模型路径pgnet_path = ".\e2e_server_pgnetA_infer\inference.pdmodel"# 创建Core对象core = Core()# 载入并编译PGNet模型sess = core.compile_model(model=pgnet_path, device_name="CPU")# 输出PGNet模型输入&输出信息print(sess.input)

运行效果如下图所示,说明OpenVINOTM直接读取飞桨版PGNet模型成功。

1.6使用OpenVINOTM开发PGNet的推理程序

基于上述代码,结合PGNet的数据前处理和后处理代码,即可开发出完整的PGNet推理程序。

1.6.1升级PaddleOCR自带预测程序,支持OpenVINO推理

由于PaddleOCR自带的预测程序 tools\infer\predict_e2e.py,已经实现了PGNet的数据前处理和后处理代码,所以,只需要稍微修改:

  • tools\infer\predict_e2e.py
  • tools\infer\utility.py

添加OpenVINO的推理代码,即可升级PaddleOCR对OpenVINO的支持。

上述代码,可以从PGNet OpenVINO Inference: Do the PGNet inference based on OpenVINO 下载。下载后,请并替换同名文件。

OpenVINO支持代码如下所示,所有修改处都添加了“# OpenVINO Support Here”:

        # OpenVINO Support Hereelif self.use_openvino:outputs = self.predictor([img])out_layers = self.predictor.outputpreds = {}preds['f_border'] = outputs[out_layers(0)]preds['f_char'] = outputs[out_layers(1)]preds['f_direction'] = outputs[out_layers(2)]preds['f_score'] = outputs[out_layers(3)]

替换完同名文件后,使用命令:

python tools\infer\predict_e2e.py --e2e_algorithm="PGNet"

--image_dir=.\doc\imgs_en

--e2e_model_dir=ov_infer\e2e_server_pgnetA_infer\inference.pdmodel

--e2e_pgnet_valid_set="totaltext"

--use_gpu=False

--use_openvino=True

运行效果如下所示:

从运行结果可以看到,使用了OpenVINO的推理程序,运行的平均时间是1.33s;没有使用OpenVINO的推理程序,运行的平均时间是5.09s。OpenVINO极大的提升了模型在CPU上的推理计算效率

1.6.2借鉴PaddleOCR的前处理和后处理代码,实现OpenVINO推理程序

直接使用ppocr中自带的前处理和后处理代码,可以轻松实现PGNet的OpenVINO推理程序:pgnet_ov_infer.py · PPOV_NUC/PGNet OpenVINO Inference - Gitee.com

from openvino.runtime import Corefrom ppocr.data import create_operators, transformfrom ppocr.postprocess import build_post_processimport cv2import numpy as npimport time# 指定PGNet模型路径pgnet_path = "./e2e_server_pgnetA_infer/inference.pdmodel"# 创建Core对象core = Core()# 载入并编译PGNet模型pgnet = core.compile_model(model=pgnet_path, device_name="CPU")# 创建preprocess_oppre_process_list = [{'E2EResizeForTest': {'max_side_len': 768,'valid_set': 'totaltext'}}, {'NormalizeImage': {'std': [0.229, 0.224, 0.225],'mean': [0.485, 0.456, 0.406],'scale': '1./255.','order': 'hwc'}}, {'ToCHWImage': None}, {'KeepKeys': {'keep_keys': ['image', 'shape']}}]preprocess_op = create_operators(pre_process_list)# 创建postprocess_oppostprocess_params = {}postprocess_params['name'] = 'PGPostProcess'postprocess_params["score_thresh"] = 0.5postprocess_params["character_dict_path"] = "./ic15_dict.txt"postprocess_params["valid_set"] = 'totaltext'postprocess_params["mode"] = 'fast'postprocess_op = build_post_process(postprocess_params)def clip_det_res(points, img_height, img_width):for pno in range(points.shape[0]):points[pno, 0] = int(min(max(points[pno, 0], 0), img_width - 1))points[pno, 1] = int(min(max(points[pno, 1], 0), img_height - 1))return points# 定义filter_tag_det_res_only_clip函数def filter_tag_det_res_only_clip(dt_boxes, image_shape):img_height, img_width = image_shape[0:2]dt_boxes_new = []for box in dt_boxes:box = clip_det_res(box, img_height, img_width)dt_boxes_new.append(box)dt_boxes = np.array(dt_boxes_new)return dt_boxes# 载入图像数据并实现预处理image_path = 'img623.jpg'image = cv2.imread(image_path)data = {'image': image}data = transform(data, preprocess_op)img, shape_list = dataimg = np.expand_dims(img, axis=0)shape_list = np.expand_dims(shape_list, axis=0)starttime = time.time()# Do the inference by OpenVINOoutputs = pgnet([img])out_layers = pgnet.outputpreds = {}preds['f_border'] = outputs[out_layers(0)]preds['f_char'] = outputs[out_layers(1)]preds['f_direction'] = outputs[out_layers(2)]preds['f_score'] = outputs[out_layers(3)]post_result = postprocess_op(preds, shape_list)points, strs = post_result['points'], post_result['texts']dt_boxes = filter_tag_det_res_only_clip(points, image.shape)elapse = time.time() - starttimeprint(f"Predict time: {elapse}s")import utilitysrc_im = utility.draw_e2e_res(points, strs, image_path)cv2.imshow("PGNet infer by OpenVINO", src_im)cv2.waitKey(0)cv2.destroyAllWindows()

运行结果,如下图所示:

1.7总结:

飞桨版的PGNet是一个易学易用、文档化和工程化做的非常好的[3]、端到端的、可以检测弯曲文字的模型。

由于从OpenVINO™ 2022.1版本开始,OpenVINO™ Runtime已经支持了直接读取飞桨模型,且OpenVINO™的API简单易用,所以,可以很容易的升级PaddleOCR自带的预测程序 tools\infer\predict_e2e.py支持OpenVINO™推理计算,或者从零开发OpenVINO™推理程序。

经过OpenVINO™优化后,PGNet的CPU推理计算效率大大提升,平均运行时间从5.09s,提升到1.33s,效率提升非常明显。

        注意:运行时间,仅供参考,在不同CPU上,运行的时间会不一样。

参考资料

[1] PGNet: Real-time Arbitrarily-Shaped Text Spotting with Point Gathering Network, https://www.aaai.org/AAAI21Papers/AAAI-2885.WangP.pdf

[2] PaddleOCR FAQ: PaddleOCR/FAQ.md at release/2.5 · PaddlePaddle/PaddleOCR · GitHub

[3] PGNet repo: https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/doc/doc_ch/algorithm_e2e_pgnet.md

使用OpenVINO实现飞桨版PGNet推理程序相关推荐

  1. 1.2 波士顿房价预测(飞桨版)

    文章目录 一.框架加载 二.数据处理 三.模型设计 四.训练配置 五.训练过程 六.保存并测试模型 6.1 保存模型 6.2 测试模型 一.框架加载 在数据处理之前,需要先加载飞桨框架的相关类库. # ...

  2. 基于OpenVINO与PP-Strucutre的文档智能分析 - 飞桨AI Studio

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 基于OpenVINO与PP-Strucutre的文档智能分析 本示例包含以下部分组成: 项目说明 ...

  3. 本地一站式极速开发AI模型 百度飞桨EasyDL桌面版来了

    智能时代来临,企业利用人工智能进行智能化升级势在必行.但由于业务性质等客观因素,不少企业在应用AI时,受场景网络环境.本地算力限制等,迫切需要满足本地实现高效AI开发和部署的解决方案.这也将成为企业快 ...

  4. 飞桨框架2.0正式版重磅发布,一次端到端的“基础设施”革新

    在人工智能时代,深度学习框架下接芯片,上承各种应用,是"智能时代的操作系统".近期,我国首个自主研发.功能完备.开源开放的产业级深度学习框架飞桨发布了2.0正式版,实现了一次跨时代 ...

  5. PaddlePaddle飞桨OCR文本检测——入门安装GPU版(一)

    首先放上github上的开源代码网址,里面的帮助文档说的非常详细: https://github.com/PaddlePaddle/PaddleOCR/ 环境安装 python中环境使用pip安装: ...

  6. 百度飞桨EasyDL桌面版正式上线,没网也能训练AI

    智能时代来临,企业利用人工智能进行智能化升级势在必行.但由于业务性质等客观因素,不少企业在应用 AI 时,受场景网络环境.本地算力限制等,迫切需要满足本地实现高效 AI 开发和部署的解决方案.这也将成 ...

  7. 飞桨CPU版的PaddlePaddle安装总结

    1. 可以使用以下命令查看本机的操作系统和位数信息: uname -m && cat /etc/*release 2. python版本查看,使用以下命令确认是 3.6/3.7/3.8 ...

  8. 【OpenVINO+paddle】一切皆可二次元-CPU部署飞桨AnimeGAN实现所有照片二次元化

    [OpenVINO+paddle]一切皆可二次元-CPU部署飞桨GAN实现所有照片二次元化 在这篇文章中我将小喵咪.小姐姐.钢铁侠图片二次元化,事实上你可以尝试任何一张你感兴趣的图像.在这里你将会使用 ...

  9. 基于飞桨与OpenVINO 的智能机器人开发实践 | 开发者实战

    谈到机器人,我们首先要知道什么是机器人 这是从百度百科截取的我国科学家对于机器人的定义 机器人是一种自动化的机器,这种机器人具备一些人或生物相似的智能能力,如感知能力.规划能力.动作能力.协同能力.是 ...

最新文章

  1. linux下 zip解压 tar解压 gz解压 bz2等各种解压文件命令
  2. 【排序】几种简单的排序(冒泡、选择、插入)(一)
  3. redis hash数据类型常用命令
  4. 脑子笨的人可以学计算机吗,脑子笨的人有什么特征 反应慢的人其实很聪明
  5. 区块链在银行业的应用
  6. ssb门限_画出滤波法ssb信号调制器模型,并说明低通和高通滤波器分别得到哪个边带信号...
  7. java static 块 时机_java的static块执行时机
  8. mysql写下拉树_PHP+mysql实现从数据库获取下拉树功能的方法
  9. JAVA结课_一点心情,写java结课考试之前
  10. 2021第一波新年(春节)中国风插画设计,为年底储备素材
  11. Delphi TreeView失去焦点也选中
  12. Linux记录-重启后磁盘丢失问题解决方案
  13. ubuntu安装宝塔界面
  14. skimage 安装和子模块
  15. Maven实现Web应用集成測试自己主动化 -- 部署自己主动化(WebTest Maven Plugin)
  16. 精读-软件测试的艺术之模块测试及更高级别的测试
  17. 软件测试VS软件开发哪个好?怎么选择
  18. android版here地图下载,HERE WeGo地图安卓版
  19. 企业微信如何做社群运营?企业微信群运营新玩法(可复用)
  20. 程序设计大作业---超长正整数的减法

热门文章

  1. 2022高处安装、维护、拆除考试题库及模拟考试
  2. 为什么不能睁一只眼闭一只眼_“睁一只眼,闭一只眼”才是人生的最高境界
  3. 硬件设计9---什么是示波器?
  4. 手把手教你安装MINIGUI编程环境 (MINIGUI版本3.2.0)
  5. oracle 常见报错
  6. 迄今见过的最好的职业规划的文章
  7. 比特鹏哥第二节课笔记
  8. [SPRD] Q 版本开机 logo 显示原理
  9. wordpress中文主题,开源wordpress中文免费主题模板
  10. ThinkPhP关联查询setEagerlyType遇到的问题