paddleocr学习笔记(五)将训练模型(checkpoints模型)转化为推理模型(inference模型)

本文主要是介绍paddleocr学习笔记(五)将训练模型(checkpoints模型)转化为推理模型(inference模型),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个主要参考PaddleOCR下的 /doc/doc_ch/inference.md

先按照这里的教程学习模型转化:

一、训练模型转inference模型

检测模型转inference模型

下载超轻量级中文检测模型:

wget -P ./ch_lite/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar && tar xf ./ch_lite/ch_ppocr_mobile_v2.0_det_train.tar -C ./ch_lite/

上述模型是以MobileNetV3为backbone训练的DB算法,将训练好的模型转换成inference模型只需要运行如下命令:

# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.load_static_weights 参数需要设置为 False。
# Global.save_inference_dir参数设置转换的模型将保存的地址。python tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_det_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/det_db/

转inference模型时,使用的配置文件和训练时使用的配置文件相同。另外,还需要设置配置文件中的Global.pretrained_model参数,其指向训练中保存的模型参数文件。 转换成功后,在模型保存目录下有三个文件:

inference/det_db/├── inference.pdiparams         # 检测inference模型的参数文件├── inference.pdiparams.info    # 检测inference模型的参数信息,可忽略└── inference.pdmodel           # 检测inference模型的program文件

保存后生成的文件:

上面是使用下载的模型转换的,下面介绍使用自己训练的模型转化:

使用自己训练的模型转化

承接paddleocr学习笔记(四)评估、推理 将里面使用的自己训练的模型保存成推理模型

# 保存自己训练的模型
python tools/export_model.py -c configs/det/det_mv3_db.yml -o Global.pretrained_model=./output/db_mv3/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/db_mv3/

可以看到保存的模型如下:

 

二、文本检测模型推理

文本检测模型推理,默认使用DB模型的配置参数。当不使用DB模型时,在推理时,需要通过传入相应的参数进行算法适配,细节参考下文。

1. 超轻量中文检测模型推理

超轻量中文检测模型推理,可以执行如下命令:使用的是第一步中下载解压转化的推理模型

python tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/det_db/"

可视化文本检测结果默认保存到./inference_results文件夹里面,结果文件的名称前缀为'det_res'。

检测结果如下:

[2021/02/27 14:52:09] root INFO: Predict time of ./doc/imgs/00018069.jpg: 1.1728620529174805
[2021/02/27 14:52:09] root INFO: The visualized image saved in ./inference_results\det_res_00018069.jpg

通过参数limit_typedet_limit_side_len来对图片的尺寸进行限制, limit_type可选参数为[maxmin], det_limit_size_len 为正整数,一般设置为32 的倍数,比如960。

参数默认设置为limit_type='max', det_limit_side_len=960。表示网络输入图像的最长边不能超过960, 如果超过这个值,会对图像做等宽比的resize操作,确保最长边为det_limit_side_len。 设置为limit_type='min', det_limit_side_len=960 则表示限制图像的最短边为960。

如果输入图片的分辨率比较大,而且想使用更大的分辨率预测,可以设置det_limit_side_len 为想要的值,比如1216。

python tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/det_db/" --det_limit_type=max --det_limit_side_len=1216

检测结果如下:

[2021/02/27 14:58:47] root INFO: Predict time of ./doc/imgs/00018069.jpg: 1.1828348636627197
[2021/02/27 14:58:47] root INFO: The visualized image saved in ./inference_results\det_res_00018069.jpg

 如果想使用CPU进行预测,执行命令如下:通过检测显存变化,确实前面的显存上升又下降了,这个就没有显存变化,同时通过观察推理时间,CPU比GPU快很多,这主要是因为模型较小GPU的优势不明显,其次GPU加载模型比CPU慢,完成第一次推理后GPU的推理速度才会明显快于CPU,所以看速度应该在批量测试中去比较。

python tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/det_db/"  --use_gpu=False

检测结果:

[2021/02/27 15:03:34] root INFO: Predict time of ./doc/imgs/00018069.jpg: 0.13463759422302246
[2021/02/27 15:03:34] root INFO: The visualized image saved in ./inference_results\det_res_00018069.jpg

 

使用自己训练转化的推理模型测试: 

python tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/db_mv3/"

 检测结果如下:由于我只是训练了icdar2015的1000张数据,而且是自然场景多是街景图片,不包含文档类图片,跟百度官方大数据集训练的模型效果自然是没有可比性,此处只是说明转化模型的正确性。

[2021/02/27 15:06:36] root INFO: Predict time of ./doc/imgs/00018069.jpg: 1.1948025226593018
[2021/02/27 15:06:36] root INFO: The visualized image saved in ./inference_results\det_res_00018069.jpg

使用icdar2015中的数据检测一下自己训练的模型:

python tools/infer/predict_det.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/db_mv3/"

检测结果如下:

[2021/02/27 15:11:13] root INFO: Predict time of ./doc/imgs_en/img_10.jpg: 1.1848294734954834
[2021/02/27 15:11:13] root INFO: The visualized image saved in ./inference_results\det_res_img_10.jpg

 

 

这篇关于paddleocr学习笔记(五)将训练模型(checkpoints模型)转化为推理模型(inference模型)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/398659

相关文章

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]