訓練后的模型部署,首先要進行訓練
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.最終所有的文件列表
?