
PaddleOCR Paddle2ONNX 預測功能測試TIPC 測試框架下的模型轉換與 ONNX 推理驗證【免費下載鏈接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.項目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR本篇技術指南聚焦 PaddleOCR 倉庫中 TIPCTest Infrastructure for PaddlePaddle測試體系內的 Paddle2ONNX 預測功能測試它通過test_paddle2onnx.sh將 Paddle 推理模型轉換為 ONNX 格式再用 PaddleOCR 自身的預測腳本以--use_onnxTrue加載 ONNX 模型完成端到端正確性驗證。讀完本文你將掌握 TIPC 中 Paddle2ONNX 測試的完整流程、17 行測試配置文件的每一項參數含義、測試腳本的底層實現邏輯以及如何讀懂運行結果日志并自主擴展到新的 OCR 模型。1. 測試定位與覆蓋范圍在 PaddleOCR 的 test_tipc 目錄中Paddle2ONNX 預測功能測試的主程序為test_paddle2onnx.sh它承擔兩類驗證職責模型轉化功能驗證調用paddle2onnx命令行工具把 Paddle 的推理模型inference.pdmodelinference.pdiparams轉換為 ONNX 格式的model.onnx轉化結果正確性驗證使用 PaddleOCR 自帶的預測腳本如tools/infer/predict_det.py以 ONNX Runtime 為后端加載轉換后的模型進行推理確認轉換前后預測行為一致。根據訓練時是否使用量化測試模型被劃分為正常模型和量化模型兩類對應的測試覆蓋矩陣如下來自 test_paddle2onnx.md模型類型device正常模型GPU正常模型CPU量化模型GPU量化模型CPU即每一類模型都要求同時通過 GPU 與 CPU 兩種設備上的轉換 推理驗證。從倉庫現有配置文件看test_tipc/configs/下各模型目錄中均以model_linux_gpu_normal_normal_paddle2onnx_python_linux_cpu.txt形式命名配置例如 ch_PP-OCRv2_det 的配置命名中的兩個normal分別對應正常模型與正常訓練linux_cpu則表明 ONNX 推理階段以 CPU 環境為基線同時配置內通過--use_gpu:True|False枚舉 GPU/CPU 兩種推理設備。2. 測試整體流程整個測試由兩個腳本接力完成prepare.sh準備測試環境安裝paddle2onnx、onnxruntime、onnx三個依賴包、下載對應模型的推理模型壓縮包與測試圖片數據并解壓test_paddle2onnx.sh讀取配置文件依次執行模型轉換與 ONNX 推理并把每個步驟的結果寫入日志。bash test_tipc/prepare.sh ./test_tipc/configs/ch_PP-OCRv2_det/model_linux_gpu_normal_normal_paddle2onnx_python_linux_cpu.txt paddle2onnx_infer # 用法: bash test_tipc/test_paddle2onnx.sh ./test_tipc/configs/ch_PP-OCRv2_det/model_linux_gpu_normal_normal_paddle2onnx_python_linux_cpu.txt注意prepare.sh的第二個參數是測試模式必須顯式傳paddle2onnx_infer才會進入 Paddle2ONNX 的數據準備分支見 prepare.sh該分支會先執行python -m pip install paddle2onnx onnxruntime onnx安裝轉換與推理所需依賴再按model_name匹配下載對應模型最后統一下載檢測/識別測試圖片數據ch_det_data_50.tar與rec_inference.tar到./inference/目錄。測試結束后所有產物統一輸出在test_tipc/output/{model_name}/paddle2onnx/目錄下trans_model_det.log/trans_model_rec.log檢測/識別模型的轉換過程日志paddle2onnx_infer_gpu.log/paddle2onnx_infer_cpu.logGPU/CPU 兩種設備上的 ONNX 推理日志results_paddle2onnx.log匯總每一步命令執行成功或失敗的狀態清單。3. 配置文件逐行解析TIPC 的 Paddle2ONNX 測試配置是一個 17 行的key:value文本文件以 ch_PP-OCRv2_det 配置 為例paddle2onnx_params model_name:ch_PP-OCRv2_det python:python3.7 2onnx: paddle2onnx --det_model_dir:./inference/ch_PP-OCRv2_det_infer/ --model_filename:inference.pdmodel --params_filename:inference.pdiparams --det_save_file:./inference/det_v2_onnx/model.onnx --rec_model_dir: --rec_save_file: --opset_version:10 --enable_onnx_checker:True inference:tools/infer/predict_det.py --use_gpu:True|False --det_model_dir: --rec_model_dir: --image_dir:./inference/ch_det_data_50/all-sum-510/各字段含義如下行號字段含義與取值說明1model_name被測模型名稱腳本依據它走不同的轉換分支見第 5 節并決定日志輸出目錄test_tipc/output/{model_name}/paddle2onnx/2python使用的 Python 解釋器如python3.7同時被prepare.sh與推理命令復用32onnx轉換命令固定為paddle2onnx4--det_model_dir待轉換的 Paddle 檢測推理模型目錄含inference.pdmodel與inference.pdiparams5--model_filename模型結構文件名默認inference.pdmodel6--params_filename模型參數文件名默認inference.pdiparams7--det_save_file轉換后 ONNX 檢測模型的保存路徑如./inference/det_v2_onnx/model.onnx8--rec_model_dir待轉換的識別模型目錄純檢測模型如ch_PP-OCRv2_det可留空9--rec_save_file轉換后 ONNX 識別模型的保存路徑純檢測模型留空10--opset_versionONNX opset 版本倉庫各配置統一使用1011--enable_onnx_checker是否啟用 ONNX 模型結構檢查器倉庫配置為True12inference推理入口腳本及附加參數如tools/infer/predict_det.py端到端模型會追加--rec_image_shape3,32,32013--use_gpu推理設備枚舉True|False表示依次在 GPU 與 CPU 上各跑一遍對應生成paddle2onnx_infer_gpu.log與paddle2onnx_infer_cpu.log14--det_model_dir推理階段傳入的檢測模型路徑此處留空實際由腳本自動填入轉換產物路徑15--rec_model_dir推理階段傳入的識別模型路徑留空同理16--image_dir推理測試圖片路徑檢測用多圖目錄all-sum-510/識別用單圖或rec_inference/目錄對于同時包含檢測與識別子模型的端到端配置如 ch_PP-OCRv2 配置第 4–9 行會全部填滿--det_model_dir:./inference/ch_PP-OCRv2_det_infer/、--rec_model_dir:./inference/ch_PP-OCRv2_rec_infer/、--det_save_file:./inference/det_v2_onnx/model.onnx、--rec_save_file:./inference/rec_v2_onnx/model.onnx推理入口則為tools/infer/predict_system.py --rec_image_shape3,32,320測試圖片也換成單張00008790.jpg。表格結構識別slanet、en_table_structure則復用檢測字段承載結構模型推理入口改為ppstructure/table/predict_structure.py并附帶--table_char_dict_path指定表格結構字典分別見 slanet 配置 與 en_table_structure 配置。目前倉庫共提供 14 份 Paddle2ONNX 測試配置覆蓋ch_PP-OCRv2、ch_PP-OCRv3、ch_ppocr_mobile_v2_0、ch_ppocr_server_v2_0四組模型的整體detrec形態及其單獨的_det/_rec形態外加PP-OCRv3_mobile_rec、slanet、en_table_structure等專項模型。4. 測試腳本實現拆解test_paddle2onnx.sh通過 source 引入 common_func.sh 中的func_parser_key、func_parser_value、func_set_params、status_check等解析與狀態檢查工具函數其主體邏輯見 test_paddle2onnx.sh可分為兩段。4.1 模型轉換階段腳本先取配置前 17 行解析出全部字段然后根據model_name決定轉換哪些子模型端到端模型ch_PP-OCRv2、ch_PP-OCRv3、ch_ppocr_mobile_v2_0、ch_ppocr_server_v2_0依次轉換檢測與識別兩個模型即執行兩次paddle2onnx純檢測模型名稱含det僅轉換檢測模型純識別模型名稱含rec僅轉換識別模型表格結構模型slanet、en_table_structure僅轉換結構模型。實際拼裝的轉換命令形如paddle2onnx --model_dir./inference/ch_PP-OCRv2_det_infer/ \ --model_filenameinference.pdmodel \ --params_filenameinference.pdiparams \ --save_file./inference/det_v2_onnx/model.onnx \ --opset_version10 \ --enable_onnx_checkerTrue \ --enable_dev_versionFalse細節上轉換命令統一追加--enable_dev_version參數常規 OCR 模型使用False跳過開發版本算子以提升兼容性而slanet/en_table_structure分支使用True見 test_paddle2onnx.sh這反映了兩類模型在算子層面的差異。每條轉換命令執行后都會立即用status_check校驗退出碼并把結果追加進results_paddle2onnx.log。4.2 ONNX 推理階段轉換完成后腳本遍歷--use_gpu字段中True|False兩個枚舉值在 GPU 與 CPU 下各執行一次推理。推理命令會復用配置第 2 行的python、第 12 行的推理腳本并自動把第 7/9 行的轉換產物路徑回填為推理模型的--det_model_dir/--rec_model_dir參數同時顯式追加--use_onnxTrue例如python3.7 tools/infer/predict_det.py --use_gpuTrue \ --image_dir./inference/ch_det_data_50/all-sum-510/ \ --det_model_dir./inference/det_v2_onnx/model.onnx \ --use_onnxTrue從 PaddleOCR 推理側源碼看--use_onnx是tools/infer/utility.py中注冊的公共參數默認False檢測、識別、分類、端到端等預測器都會讀取它。以 predict_det.py 為例當use_onnxTrue時預測器會從 ONNX 輸入張量中讀取固定的[N, C, H, W]形狀并把預處理階段的DetResizeForTest鎖定為該形狀image_shape: [img_h, img_w]從而保證送入 ONNX Runtime 的圖片尺寸與模型靜態輸入嚴格一致——這正是 ONNX 推理與 Paddle 動態 shape 推理的關鍵差異點也是轉換后正確性驗證的核心所在。5. 運行結果解讀每一步轉換與推理命令的成敗都會實時寫入匯總日志test_tipc/output/{model_name}/paddle2onnx/results_paddle2onnx.log。運行成功時輸出形如Run successfully with command - ch_PP-OCRv2_det - paddle2onnx --model_dir./inference/ch_PP-OCRv2_det_infer/ --model_filenameinference.pdmodel --params_filenameinference.pdiparams --save_file./inference/det_v2_onnx/model.onnx --opset_version10 --enable_onnx_checkerTrue! Run successfully with command - ch_PP-OCRv2_det - python3.7 tools/infer/predict_det.py --use_gpuTrue --image_dir./inference/ch_det_data_50/all-sum-510/ --det_model_dir./inference/det_v2_onnx/model.onnx --use_onnxTrue ./test_tipc/output/ch_PP-OCRv2_det/paddle2onnx/paddle2onnx_infer_gpu.log 21 ! Run successfully with command - ch_PP-OCRv2_det - python3.7 tools/infer/predict_det.py --use_gpuFalse --image_dir./inference/ch_det_data_50/all-sum-510/ --det_model_dir./inference/det_v2_onnx/model.onnx --use_onnxTrue ./test_tipc/output/ch_PP-OCRv2_det/paddle2onnx/paddle2onnx_infer_cpu.log 21 !運行失敗時輸出形如Run failed with command - ch_PP-OCRv2_det - paddle2onnx --model_dir./inference/ch_PP-OCRv2_det_infer/ --model_filenameinference.pdmodel --params_filenameinference.pdiparams --save_file./inference/det_v2_onnx/model.onnx --opset_version10 --enable_onnx_checkerTrue! ...status_check的判斷依據是上一條命令的退出碼PIPESTATUS[0]因此只要轉換或推理進程以非零碼退出就會被記為Run failed。需要說明的是這里成功僅代表命令正常執行完畢若想進一步核對 OCR 識別質量可查看paddle2onnx_infer_gpu.log/paddle2onnx_infer_cpu.log中的預測文本輸出與 Paddle 原生推理不帶--use_onnx的結果進行人工比對。6. 擴展新模型的測試配置若要在 TIPC 中為新的 OCR 模型增加 Paddle2ONNX 測試只需按第 3 節的 17 行格式在test_tipc/configs/{model_name}/下新增一份配置文件并遵循以下約定命名沿用model_linux_gpu_normal_normal_paddle2onnx_python_linux_cpu.txt的命名風格便于 CI 識別模型類型命名轉換分支按model_name匹配名稱中含det/rec分別走單模型分支表格結構模型需要在slanet/en_table_structure分支或新增等價分支中登記并設置--enable_dev_versionTrue前置數據在 prepare.sh 的paddle2onnx_infer分支中補充對應模型的wget下載與解壓邏輯保證--det_model_dir/--rec_model_dir指向的推理模型真實存在圖片目錄--image_dir指向已下載的測試圖片路徑檢測任務建議使用多圖目錄以覆蓋批量場景。7. 延伸閱讀完整 Paddle2ONNX 轉換與使用教程可參考 deploy/paddle2onnx 與 deploy/paddle2onnx/readme_ch.md其中給出了 ONNX 模型在移動端、服務端等場景的進一步部署方式TIPC 其他功能測試Serving、C 推理、PTQ 量化推理等說明位于 test_tipc/docs 目錄可對照 test_serving.md、test_inference_cpp.md 理解統一的測試框架風格推理側--use_onnx的完整解析邏輯見 tools/infer/utility.py各預測器的 ONNX 分支實現見 tools/infer/predict_det.py、tools/infer/predict_rec.py。【免費下載鏈接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.項目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考