训练后的模型部署,首先要进行训练

0.训练流程见文章

PaddleOCR字符识别,训练自己的数据集全流程(环境、标注、训练、推理)-CSDN博客文章浏览阅读1.6k次,点赞53次,收藏23次。PaddleOCR是基于百度飞桨框架的开源OCR工具,支持80多种语言,适用于复杂文本场景。本文介绍了PaddleOCR的环境配置、数据集制作和模型训练流程。首先通过conda创建虚拟环境并安装PaddlePaddle和PaddleOCR,然后使用PPOCRLabel工具标注数据集,划分训练集、验证集和测试集。接着下载预训练权重,分别训练文本检测和识别模型,最后评估模型性能并导出静态图模型。整个过程涵盖了从数据准备到模型部署的完整OCR开发流程,适用于票据识别、文档数字化等应用场景。 https://blog.csdn.net/wwwwww7733/article/details/150445308?spm=1001.2014.3001.5502

1.安装环境

这个环境要求太苛刻了,经常出现版本不兼容的情况,很烦

pip install paddle2onnx==0.9.7
pip install paddleocr==3.1.0

2.导出Paddle推理模型

python3 tools/export_model.py -c /home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/config.yml -o Global.pretrained_model=/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model/model.pdparams Global.save_inference_dir=/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model

参数解释:

-c 训练时配置文件路径

Global.pretrained_model=../best_model/model.pdparams  训练生成的pdparams模型路径

Global.save_inference_dir=../best_model  推理模型想要保存到的路径

3.Paddle推理模型转换ONNX模型

paddle2onnx --model_dir /home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model --model_filename=inference.pdmodel --params_filename=inference.pdiparams --save_file=/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model/model.onnx --opset_version 16 --enable_onnx_checker True
--model_dir指向包含 Paddle 模型的文件夹路径,里面通常有 inference.pdmodel 和 inference.pdiparams
--model_filename指定模型结构文件的文件名,一般是 inference.pdmodel
--params_filename指定模型参数权重文件的文件名,一般是 inference.pdiparams
--save_file转换后导出的 ONNX 模型保存路径,如 /home/best_model/model.onnx
--opset_version指定 ONNX 的 opset 版本,常用 11 或 16,版本越高支持的算子越多
--enable_onnx_checker是否在导出后自动运行 ONNX 的合法性检查,True 表示启用,建议开启

4.ONNX使用onnx_optimizer.py转换为simply-onnx

import onnx
import onnxsim
import onnx.helper as helperdef rename_io_names(model_path, new_input_name, new_output_name):# 加载ONNX模型model = onnx.load(model_path)# 获取模型的输入和输出inputs = model.graph.inputoutputs = model.graph.output# 创建新的输入和输出Tensor, 保留原有属性new_input = helper.make_tensor_value_info(new_input_name,inputs[0].type.tensor_type.elem_type,[d.dim_param if d.dim_param else d.dim_value for d in inputs[0].type.tensor_type.shape.dim])new_output = helper.make_tensor_value_info(new_output_name,outputs[0].type.tensor_type.elem_type,[d.dim_param if d.dim_param else d.dim_value for d in outputs[0].type.tensor_type.shape.dim])# 替换图中的节点引用for node in model.graph.node:for index, inp in enumerate(node.input):if inp == inputs[0].name:node.input[index] = new_input_namefor index, out in enumerate(node.output):if out == outputs[0].name:node.output[index] = new_output_name# 替换旧的输入输出名model.graph.input.remove(inputs[0])model.graph.output.remove(outputs[0])model.graph.input.insert(0, new_input)model.graph.output.insert(0, new_output)return modelif __name__ == "__main__":model_onnx = rename_io_names("/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model/model.onnx", "images", "output")model_onnx.ir_version = 9# 检查导入的onnx modelonnx.checker.check_model(model_onnx)print(f"Simplifying with onnx-simplifier {onnxsim.__version__}...")model_onnx, check = onnxsim.simplify(model_onnx)assert check, "assert check failed"onnx.save(model_onnx, "/home/boshi/AI_programming/PaddleOCR/output/rec_ppocr_v4/best_model/tkx-ocr_sim.onnx")

        这段脚本把 PaddleOCR 导出的 ONNX 模型的输入、输出节点重命名为固定名字 images / output,并做简化,从而让后续 TensorRT、ONNXRuntime 等推理框架在不知道原模型细节的情况下也能直接加载运行

5.ONNX转换为trt

trtexec --onnx=tkx-ocr_sim.onnx --minShapes=images:1x3x48x640 --optShapes=images:1x3x48x640 --maxShapes=images:8x3x48x640 --memPoolSize=workspace:2048 --saveEngine=tkx-ocr_sim.trt --fp16
参数说明
--onnx=tkx-ocr_sim.onnx指定输入的 ONNX 模型文件路径。
--minShapes=images:1x3x48x640动态 shape 输入设置最小允许尺寸;这里规定 images 张量的最小形状是 NCHW = 1×3×48×640。
--optShapes=images:1x3x48x640设置优化目标形状,TensorRT 会在这个尺寸上做最多的 kernel 搜索与调优;通常选你实际推理时最常见的 batch/size。
--maxShapes=images:8x3x48x640设置最大允许尺寸,运行时不允许超过该形状;构建引擎时也会为这一上限预留资源。
--memPoolSize=workspace:2048新版 TensorRT 用来替代已废弃的 --workspace;指定构建引擎时可用的临时显存(workspace)上限为 2048 MB。
--saveEngine=tkx-ocr_sim.trt把构建好的 TensorRT 引擎序列化并保存到指定文件,方便后续 C++/Python 推理直接加载。
--fp16启用 FP16 精度模式;如果 GPU 支持 Tensor Core,可显著减少显存占用并提升速度,精度一般可接受。

6.最终所有的文件列表

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94060.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94060.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94060.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《MLB美职棒》美国国球是橄榄球还是棒球·棒球5号位

USAs National Sport Showdown: MLB⚾️ vs NFL Ultimate Guide!从商业价值到文化基因,360解析美国体育王座之争!添加图片注释,不超过 140 字(可选)️ 历史定位 Historical Roots⚾️ MLB:The "Classi…

常见 Linux 网络命令梳理

在日常运维和排障工作中,网络相关命令是最常用的一类工具。无论是检查网络连通性,还是定位路由问题,又或是分析端口和服务占用,熟悉这些命令都能让我们更高效地解决问题。本文将从几个常见的维度来梳理 Linux 下的网络命令&#x…

Docker 搭建 Gitlab 实现自动部署Vue项目

1、配置要求: 硬件要求: CPU:双核或以上 内存:4GB或以上 软件要求:Centos6 或更高版本 2、gitlab镜像: # 中文版仓库 #docker pull twang2218/gitlab-ce-zh docker pull gitlab/gitlab-ce 3、gitlab部署目录 说明:为了跟其他容器区分,gitlab相关容…

如何解决机器翻译的“幻觉“问题(Hallucination)?

更多内容请见: 机器翻译修炼-专栏介绍和目录 文章目录 一、数据层面优化 二、模型架构改进 三、训练策略调整 四、评估与迭代 五、前沿方向与挑战 六、案例:WMT2023幻觉缓解方案 机器翻译中的“幻觉”(Hallucination)指模型生成与源文本语义无关、逻辑矛盾或事实错误的翻译…

基于STM32+NBIOT设计的宿舍安防控制系统_264

文章目录 1.1 项目介绍 【1】开发背景 【2】实现需求 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 【6】摘要 1.2 系统总体设计 【1】系统功能需求分析 【2】系统总体方案设计 【3】系统工作原理 1.3 系统框架图 1.4 系统功能总结 1.5 系统原理图 1.6 实物图 1.7…

SLAM文献之-Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping

一、简介 该论《Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping》是日本先进工业科学技术研究所(AIST)的Koide等人于2022年在IEEE国际机器人与自动化会议(ICRA)上发表的一篇论文。该研究提出了一种基于全局…

【STM32】HAL库中的实现(七):DMA(直接存储器访问)

DMA 是什么? DMA(Direct Memory Access)是 外设直接和内存之间数据搬运的机制,不需要 CPU 参与。 ✅ 举个例子:传统方式: ADC → CPU → RAM 使用 DMA:ADC → DMA → RAM(CPU 不需干…

【LeetCode热题100道笔记+动画】字母异位词分组

题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 示例 1: 输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]] 解释: 在 strs 中没有字符串可…

【Kafka】常见简单八股总结

为什么使用消息队列? 解耦: 我以我的一段开发经验举例: 【Kafka】登录日志处理的三次阶梯式优化实践:从同步写入到Kafka多分区批处理 我做过一个登录日志逻辑,就是在登录逻辑末尾,加一段写进数据库登录日志…

微信小程序连接到阿里云物联网平台

目录准备阶段阿里云配置下载mqtt.min.js文件小程序实现注意小程序配置服务器域名概述:介绍使用微信小程序连接到阿里云平台的快捷方法和完整过程。 阿里云平台建立设备,提供mqtt连接参数,小程序借助mqtt.min.js,也就是基于Github下…

2-3〔O҉S҉C҉P҉ ◈ 研记〕❘ 漏洞扫描▸AppScan(WEB扫描)

郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。 …

LeetCode 刷题【47. 全排列 II】

47. 全排列 II 自己做 解1&#xff1a;检查重复 class Solution { public:void circle(vector<int> nums, vector<vector<int>> &res,int start){int len nums.size();if(start len - 1){ //到头了//检查重复bool is_exist fa…

Https之(一)TLS介绍及握手过程详解

文章目录简介 TLSTLS第一次握手1.Client HelloTLS第二次握手2.Server Hello3.Certificate4.Server Hello DoneTLS第三次握手5.Client Key Exchange6.Change Cipher Spec7.Encrypted Handshake MessageTLS第四次握手8.New Session Ticket9.Change Cipher Spec10.Encrypted Hands…

【WEB 】从零实现一个交互轮播图(附源码)

文章目录 一、轮播图整体功能规划二、HTML结构深度解析三、CSS样式实现细节1. 定位系统详解2. 显示/隐藏机制3. 按钮交互效果实现4. 纯CSS箭头实现5. 指示器&#xff1a;当前位置可视化 四、JavaScript逻辑深入解析1. 核心变量与DOM获取2. 图片切换函数&#xff08;核心逻辑&am…

机器学习--PCA降维

一核心部分 1解决的问题&#xff1a;应对高维数据带来的计算量大、冗余信息多、易出现过拟合等问题&#xff0c;在减少数据维度的同时尽可能保留原始数据的关键信息。2核心思想&#xff1a…

leetcode 1277. 统计全为 1 的正方形子矩阵 中等

给你一个 m * n 的矩阵&#xff0c;矩阵中的元素不是 0 就是 1&#xff0c;请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。示例 1&#xff1a;输入&#xff1a;matrix [[0,1,1,1],[1,1,1,1],[0,1,1,1] ] 输出&#xff1a;15 解释&#xff1a; 边长为 1 的正方形有…

知识蒸馏 - 各类概率分布

知识蒸馏 - 各类概率分布 flyfish一、离散概率分布 离散分布描述的是取值为离散值&#xff08;如0,1,2,…&#xff09;的随机变量的概率规律&#xff0c;通常用概率质量函数&#xff08;PMF&#xff09; 表示某一取值的概率。 1. 伯努利分布&#xff08;Bernoulli Distribution…

软件测试-Selenium学习笔记

""" 目标&#xff1a; driver.find_element() 需求&#xff1a; 1. 使用driver.find_element()方法 2. 输入用户名&#xff1a;admin 3. 输入密码&#xff1a;123456 """ # 导包 from selenium import webdriver from time import …

知微传感3D相机上位机DkamViewer使用:给相机升级固件

写在前面 本人从事机器视觉细分的3D相机行业。编写此系列文章主要目的有&#xff1a; 1、便利他人应用相机&#xff0c;本系列文章包含公司所出售相机的SDK的使用例程及详细注释&#xff1b;2、促进行业发展及交流。 知微传感Dkam系列3D相机可以应用于定位分拣、焊接焊缝提取、…

CMake进阶: CMake Modules---简化CMake配置的利器

目录 1.简介 2.为什么需要 CMake Modules&#xff1f; 3.内置模块&#xff1a;开箱即用的工具 3.1.依赖查找模块&#xff08;FindXXX.cmake&#xff09; 3.2.功能检测模块&#xff08;CheckXXX.cmake&#xff09; 3.3.通用工具模块&#xff08;如 FetchContent.cmake、CT…