PaddleOCR2Pytorch icon indicating copy to clipboard operation
PaddleOCR2Pytorch copied to clipboard

paddle训练模型转换成pytorch后,模型比paddle的infer模型大很多

Open buptlj opened this issue 10 months ago • 6 comments

对于ppocrv4系列模型,paddle训练模型转换成pytorch后,模型比paddle的infer模型大很多。 比如,ch_PP-OCRv4_rec_train模型转成pytorch后26M左右,pt转成onnx后25M左右,但是paddle的infer模型只有10M左右,都是fp32。 检测模型也是类似,ch_PP-OCRv4_det_train模型转成pytorch后14M左右,但是paddle的infer模型只有5M左右,也都是fp32。

buptlj avatar Mar 17 '25 03:03 buptlj

不能这么比。要看paddle2onnx后有多大。如果和paddle转pytorch再转onnx差不多,那就是一样的。

frotms avatar Mar 17 '25 03:03 frotms

不能这么比。要看paddle2onnx后有多大。如果和paddle转pytorch再转onnx差不多,那就是一样的。

paddle2onnx后的模型大小跟paddle infer模型差不多,比paddle转pytorch再转onnx的小很多。 比如识别模型,paddle的infer模型只有10M左右,paddle2onnx后也是10M左右。ch_PP-OCRv4_rec_train模型转成pytorch后26M左右,再转成onnx也是26M左右。

buptlj avatar Mar 17 '25 06:03 buptlj

可以对onnx用onnx simplifier试试。paddle转infer模型过程本身有对算子做一些折叠简化操作。

frotms avatar Mar 17 '25 06:03 frotms

可以对onnx用onnx simplifier试试。paddle转infer模型过程本身有对算子做一些折叠简化操作。

这个方法也试过了,onnx优化后体积略微小一点,差别不大。paddle转infer模型时是对算子有简化,但这个差距太大了。

buptlj avatar Mar 17 '25 06:03 buptlj

那就要具体看用onnx sim通过参数 有没办法像paddle2onnx那样优化了:https://github.com/PaddlePaddle/Paddle2ONNX/tree/develop/paddle2onnx/optimizer

frotms avatar Mar 17 '25 06:03 frotms

对于ppocrv4系列模型,paddle训练模型转换成pytorch后,模型比paddle的infer模型大很多。 比如,ch_PP-OCRv4_rec_train模型转成pytorch后26M左右,pt转成onnx后25M左右,但是paddle的infer模型只有10M左右,都是fp32。 检测模型也是类似,ch_PP-OCRv4_det_train模型转成pytorch后14M左右,但是paddle的infer模型只有5M左右,也都是fp32。

这里模型增长的原因是因为 PP-OCRv4 Rec 使用的 PPLCNetV3 中的 LearnableRepLayer 有重参数结构,在导出到 inference 模型时会将多个计算分支融合成单一卷积层;我尝试在模型转换后模仿 paddle 进行重参数化操作,转换成 onnx 模型和 paddle inference 模型大小基本一致

Illustracer avatar Sep 10 '25 08:09 Illustracer