paddle训练模型转换成pytorch后,模型比paddle的infer模型大很多
对于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。
不能这么比。要看paddle2onnx后有多大。如果和paddle转pytorch再转onnx差不多,那就是一样的。
不能这么比。要看paddle2onnx后有多大。如果和paddle转pytorch再转onnx差不多,那就是一样的。
paddle2onnx后的模型大小跟paddle infer模型差不多,比paddle转pytorch再转onnx的小很多。 比如识别模型,paddle的infer模型只有10M左右,paddle2onnx后也是10M左右。ch_PP-OCRv4_rec_train模型转成pytorch后26M左右,再转成onnx也是26M左右。
可以对onnx用onnx simplifier试试。paddle转infer模型过程本身有对算子做一些折叠简化操作。
可以对onnx用onnx simplifier试试。paddle转infer模型过程本身有对算子做一些折叠简化操作。
这个方法也试过了,onnx优化后体积略微小一点,差别不大。paddle转infer模型时是对算子有简化,但这个差距太大了。
那就要具体看用onnx sim通过参数 有没办法像paddle2onnx那样优化了:https://github.com/PaddlePaddle/Paddle2ONNX/tree/develop/paddle2onnx/optimizer
对于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 模型大小基本一致