PaddleOCR 是目前最好的開源OCR框架, 但paddle框架的相容性實在不怎麼好, 部署的時候容易出現各種各樣的問題. 如果能把PaddleOCR轉成ONNX, 就可以跳過paddle框架坑的同時, 又可以白嫖PaddleOCR的強大檢測效能.
本文會介紹一下, 如何把最新的PP_OCRv4模型轉成onxx格式, 並正確執行.
步驟1: PaddleOCR模型轉ONNX
- 原始網路權重下載
在PaddleOCR的專案主頁 https://github.com/PaddlePaddle/PaddleOCR 下載最新的v4版檢測與識別模型. -
模型權重轉ONNX
用pip安裝PaddlePaddle到ONNX的模型轉換工具: https://github.com/PaddlePaddle/Paddle2ONNX.
參照如下命令轉換paddle格式模型到ONNX格式.paddle2onnx --model_dir /mnt/d/Downloads/202406/paddelocr/pp/ch_PP-OCRv4_det_infer/ --model_filename inference.pdmodel --params_filename inference.pdiparams --opset_version 11 --save_file /mnt/d/Downloads/202406/paddelocr/onnx/ch_PP-OCRv4_det_infer.onnx paddle2onnx --model_dir /mnt/d/Downloads/202406/paddelocr/pp/ch_PP-OCRv4_rec_infer/ --model_filename inference.pdmodel --params_filename inference.pdiparams --opset_version 11 --save_file /mnt/d/Downloads/202406/paddelocr/onnx/ch_PP-OCRv4_rec_infer.onnx
步驟2: ONNX推理執行
轉換格式成功後得到的ONNX模型可以進行推理。若要用於識別任務,還需補充輸入圖片的預處理和檢測結果的輸出等外圍資料處理步驟。
https://github.com/jingsongliujing/OnnxOCR
該專案基於轉換後的ppocr_server_v2.0模型,已經完成了文字識別所需的外圍資料處理部分。
經過測試,pp_ocr系列模型的預處理和後處理部分是通用的。只需在此程式碼基礎上整合轉換好的ONNX模型即可。
https://github.com/CKboss/pp_onnx
這是基於原專案fork後的修改版,支援執行PP_OCRv4,並能呼叫v4版本的det和rec OCR模型。旋轉檢測部分的cls模型保持不變,仍使用server_v2.0版本。此外,還修改了可能導致引用衝突的包名和部分模型輸入引數。
注:
轉換為ONNX格式後的模型精度損失情況尚不明確,但從簡單的demo來看,模型能夠正常進行推理。