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