PaddlePaddle / PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
https://paddlepaddle.github.io/PaddleOCR/
Apache License 2.0
44.49k stars 7.84k forks source link

修改部分模型参数后推理模型预测结果混乱 #8469

Closed ShiquanYu closed 1 year ago

ShiquanYu commented 1 year ago

你好,

我修改了 det_mv3_db.yml 文件中的 NormalizeImage 参数至 std=0.5 mean=0.5(即归一化到 ±1),修改了 backbone,将 MobileNetV3 中的 swish 算子替换成了 Relu,模型训练完成后直接推理,预测显示结果正常。

11

但是将训练模型转换成推理模型后,预测结果完全错误:

# 转换模型命令
python ../../tools/export_model.py \
-c ../../configs/det/det_my_mv3_db.yml \
-o Global.pretrained_model=./best_accuracy \
Global.save_inference_dir=./inference/
# 预测命令
python ../../tools/infer/predict_det.py \
--det_algorithm="DB" \
--det_model_dir=./inference \
--image_dir=../../doc/imgs/11.jpg \
--use_gpu=True

det_res_11

我尝试修改了 tools/infer/predict_det.py 文件中的 NormalizeImage 参数至 std=0.5, mean=0.5,但是预测结果还是错误的离谱,不知道引起这个问题的可能原因是什么?

谢谢

ShiquanYu commented 1 year ago

测试了 doc/imgs/ 路径下所有图片,有些图片正常,有些图片结果如上图完全混乱

tink2123 commented 1 year ago

推理的预处理和后处理是否和模型训练过程完全一致? 出现以上问题的主要原因是预处理和后处理的diff,建议看下推理前后的结果,和训练引擎推理做对比。

ShiquanYu commented 1 year ago

推理的预处理和后处理是否和模型训练过程完全一致? 出现以上问题的主要原因是预处理和后处理的diff,建议看下推理前后的结果,和训练引擎推理做对比。

预处理相同,训练模型的 .yaml 文件中 image_shape 参数也调节成 【640, 640】,与推理模型参数一致,且我使用 paddle2onnx 工具转成 onnx 模型后,使用 infer/predict_det.py 工具推理 onnx 模型的结果可以和训练模型对齐,唯独 inference 模型特立独行结果每次都大相径庭(fixed过inference模型的输入成[640,640],结果任然错误)

大佬有需要的话我可以把 inference 模型和 onnx 模型打包发上来。

tink2123 commented 1 year ago

可以把训练的配置文件、模型参数和inference模型一起打包传上来看看~

ShiquanYu commented 1 year ago

@tink2123 佬:

inference 模型及onnx模型: models.zip

因 Normalize 参数与原版不同,使用 infer/predict_det.py 推理时需要修改第 49/50 行为:

'std': [0.5, 0.5, 0.5],
'mean': [0.5, 0.5, 0.5],

我这边两种类型的模型推理的图片,和我推理时使用的命令均已打包到压缩文件中,使用的 PaddleOCR 版本为 2.6.0

Nancis1130 commented 1 year ago

请问您解决了吗

thsno02 commented 1 year ago

推理的预处理和后处理是否和模型训练过程完全一致? 出现以上问题的主要原因是预处理和后处理的diff,建议看下推理前后的结果,和训练引擎推理做对比。

预处理相同,训练模型的 .yaml 文件中 image_shape 参数也调节成 【640, 640】,与推理模型参数一致,且我使用 paddle2onnx 工具转成 onnx 模型后,使用 infer/predict_det.py 工具推理 onnx 模型的结果可以和训练模型对齐,唯独 inference 模型特立独行结果每次都大相径庭(fixed过inference模型的输入成[640,640],结果任然错误)

大佬有需要的话我可以把 inference 模型和 onnx 模型打包发上来。

试试在 operator.py 里面指定 resize 的大小,而不是用它的 max 或者 min 方法进行 resize。