訓練后數據集后部署PaddleOCR轉trt流程

訓練后的模型部署,首先要進行訓練

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…