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

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

如何将二进制文件流转化为MockMultipartFile文件

《如何将二进制文件流转化为MockMultipartFile文件》文章主要介绍了如何使用Spring框架中的MockMultipartFile类来模拟文件上传,并处理上传逻辑,包括获取二进制文件流、创... 目录一、名词解释及业务解释1.具体业务流程2.转换对象解释1. MockMultipartFile2

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe