PaddleOCR icon indicating copy to clipboard operation
PaddleOCR copied to clipboard

方向分类器在python上验证准确,然而转换为推理模型后,在cpp上部署,输出却有误

Open Camphora7 opened this issue 2 years ago • 31 comments

请提供下述完整信息以便快速定位问题/Please provide the following information to quickly locate the problem

  • 系统环境/System Environment:
  • 版本号/Version:Paddle: PaddleOCR: 问题相关组件/Related components:
  • 运行指令/Command Code:
  • 完整报错/Complete Error Message:

增加了90°和270°两个角度并对模型进行训练,在python上验证无误,可以输出90°和270°结果,但在cpp部署的官方样例程序上,该模型经过推理后的推理模型准确度却下降了,请问为什么方向分类器推理后在cpp上的准确度不如训练模型在python上的准确度呢? 1666144706607 1666144229641

Camphora7 avatar Oct 18 '22 10:10 Camphora7

先确保导出后的inference模型是否能正常进行python推理,看你的结果score貌似也很低

andyjiang1116 avatar Oct 19 '22 06:10 andyjiang1116

先确保导出后的inference模型是否能正常进行python推理,看你的结果score貌似也很低

验证了一下,导出后的inference模型可以python推理,但是score和cpp部署的分数一样,请问问题是出在export_model.py上吗? 我的导出模型参数为-c configs/cls/cls_mv3.yml -o Global.pretrained_model=./output/cls/mv3 Global.save_inference_dir=./output/cls/inferencemodel

Camphora7 avatar Oct 19 '22 08:10 Camphora7

导出后的inference模型可以python推理,但是score和cpp部署的分数一样

导出后python推理结果正确吗

andyjiang1116 avatar Oct 19 '22 08:10 andyjiang1116

导出后python推理结果正确吗

不正确,结果有错误,分数也很低

Camphora7 avatar Oct 19 '22 08:10 Camphora7

那应该就是导出模型的问题了

andyjiang1116 avatar Oct 19 '22 08:10 andyjiang1116

那应该就是导出模型的问题了

感谢解答!

Camphora7 avatar Oct 19 '22 08:10 Camphora7

Global.pretrained_model=./output/cls/mv3

这块应该要有个best_accuracy吧,应该是训练权重加载不对

andyjiang1116 avatar Oct 19 '22 08:10 andyjiang1116

这块应该要有个best_accuracy吧,应该是训练权重加载不对

这个是我修改后的参数设置: save_model_dir: ./output/cls/mv3/ pretrained_model: ./pretrainmodel/ch_ppocr_mobile_v2.0_cls_train/best_accuracy ./output/cls/inferencemodel 修改后,结果和Score还是没有改变,请问是参数设置错误吗,训练好的模型是由哪个参数读取的呢?

Camphora7 avatar Oct 19 '22 09:10 Camphora7

完整导出命令是啥,导出指定你训练的配置,指定好模型权重和保存路径就可以了

andyjiang1116 avatar Oct 19 '22 09:10 andyjiang1116

pretrained_model: ./pretrainmodel/ch_ppocr_mobile_v2.0_cls_train/best_accuracy

导出时要用你训好的模型,这里的pretrained_model写你训好的./output/cls/mv3/best_accuracy

andyjiang1116 avatar Oct 19 '22 09:10 andyjiang1116

导出时要用你训好的模型,这里的pretrained_model写你训好的./output/cls/mv3/best_accuracy

我是在pycharm的parameter里指定了完整命令为-c configs/cls/cls_mv3.yml -o Global.pretrained_model=./output/cls/mv3/latest Global.save_inference_dir=./output/cls/inferencemodel,配置文件cls_mv3.yml中的几个参数也是这样指定的,我训练好的模型命名就是latest

Camphora7 avatar Oct 19 '22 09:10 Camphora7

直接用命令行运行,指定好模型和配置文件就行

andyjiang1116 avatar Oct 19 '22 09:10 andyjiang1116

直接用命令行运行,指定好模型和配置文件就行

用命令行运行,结果还是如前,在infer_cls.py用配置文件参数验证图片,结果却是非常准确的,但同样配置不管是命令行还是配置文件,导出为inference再用predict_cls.py推理,就是准确度下降很多,部分结果还有错,请问是我这个操作过程不对吗,还是export_model.py这边有什么问题呀?

Camphora7 avatar Oct 19 '22 10:10 Camphora7

我是说导出模型先确保正确

andyjiang1116 avatar Oct 19 '22 11:10 andyjiang1116

我是说导出模型先确保正确

模型导出前是正确的,导出后就不对了

Camphora7 avatar Oct 19 '22 16:10 Camphora7

所以可能就是你导出模型的时候出错了

andyjiang1116 avatar Oct 20 '22 02:10 andyjiang1116

所以可能就是你导出模型的时候出错了

导出模型的错误已经解决,发现并非是导出模型错误了,而是验证导出模型的predict_cls.py的默认参数cls_label只有0,180两类,现修改后发现导出模型是没有问题的,但CPP上更新导出模型后,结果还是很有误,cls_Score依然很低,请问这个是什么情况呢?

Camphora7 avatar Oct 20 '22 06:10 Camphora7

那应该是cpp上也需要对应改下输出类别

andyjiang1116 avatar Oct 20 '22 06:10 andyjiang1116

那应该是cpp上也需要对应改下输出类别

请问这个在哪里改呢?

Camphora7 avatar Oct 20 '22 07:10 Camphora7

可以debug看下输出,这块目前只支持2类的,还没适配4类的

andyjiang1116 avatar Oct 20 '22 07:10 andyjiang1116

可以debug看下输出,这块目前只支持2类的,还没适配4类的

https://github.com/PaddlePaddle/PaddleOCR/blob/8a3c7bc8a32b4a0d2ab8a1b0c6dfe1efb0c82ba0/deploy/cpp_infer/src/ocr_cls.cpp#L79-L92

我看到这边有cls_label的赋值,请问对这里进行修改的话可以实现四类的输出吗,需要怎么改呢?

Camphora7 avatar Oct 20 '22 08:10 Camphora7

这的label是根据模型输出的softmax值进行取最大概率值对应的label,如果模型输出类别是4的话,应该会得到0-3的类别值

andyjiang1116 avatar Oct 20 '22 08:10 andyjiang1116

这的label是根据模型输出的softmax值进行取最大概率值对应的label,如果模型输出类别是4的话,应该会得到0-3的类别值

这里确实可以取到4类的值

查阅了过往的issue,尝试更换模型,发现问题依旧,python端的结果和c++端结果完全不同,请问在C++端如何增加四类方向的适配呢,或者说在c++上和 类别的数量 有关的参数都有哪些呢?

Camphora7 avatar Oct 20 '22 10:10 Camphora7

这的label是根据模型输出的softmax值进行取最大概率值对应的label,如果模型输出类别是4的话,应该会得到0-3的类别值

c++端,0°和180°的结果都是对的,Score也很高,但一到90°和180°的情况,就会出错,Score很低

Camphora7 avatar Oct 21 '22 03:10 Camphora7

有修改过预处理的代码吗

WenmuZhou avatar Oct 21 '22 03:10 WenmuZhou

有修改过预处理的代码吗

没有修改,请问需要修改吗?

Camphora7 avatar Oct 21 '22 03:10 Camphora7

就是你修改为4分类的时候,预处理有改吗

WenmuZhou avatar Oct 21 '22 03:10 WenmuZhou

就是你修改为4分类的时候,预处理有改吗

没有修改。下载的官网的2分类的推理模型文件,相同的图片在python中与C++中结果也完全不一致。这个是哪里问题呢

Camphora7 avatar Oct 21 '22 04:10 Camphora7

哪个版本的代码,dygraph吗

WenmuZhou avatar Oct 21 '22 05:10 WenmuZhou

哪个版本的代码,dygraph吗

2.5的

Camphora7 avatar Oct 21 '22 06:10 Camphora7