wenwenyu / MASTER-pytorch

Code for the paper "MASTER: Multi-Aspect Non-local Network for Scene Text Recognition" (Pattern Recognition 2021)
https://arxiv.org/abs/1910.02562
MIT License
277 stars 53 forks source link

Validation 精度很高,但是 test 精度很低 #19

Open S-HuaBomb opened 2 years ago

S-HuaBomb commented 2 years ago

我使用了你们提供的 lmdb 数据集来复现论文结果,训练过程中的验证集精度很高:

[2021-10-30 06:14:34,656 - trainer - INFO] - [Step Validation] Epoch:[3/16] Step:[24000/24898] Word_acc: 0.961988 Word_acc_case_ins 0.976946Edit_distance_acc: 0.980846
[2021-10-30 06:14:36,834 - trainer - INFO] - Saving checkpoint: /root/paddlejob/workspace/output/models/MASTER_Default/example_1027_102421/checkpoint-epoch3-step24000.pdparams ...
[2021-10-30 06:14:42,358 - trainer - INFO] - Saving current best (at 3 epoch): model_best.pdparams Best word_acc: 0.961988

但是使用 test.py 读取 lmdb evaluation 数据集进行预测时得到的 Sequence Accuracy 却相去甚远。而我把 lmdb 格式的数据读取成 Image 格式并保存成 jpg 图片后再使用 test.py 预测,能得到不错的 Case_ins 精度的结果,但是 Sequence Accuracy 还是很低:

calculating metrics of IC03_867_pred
current sample idx: 0
2021-11-08 20:50:58,762 root  INFO     Sequence Accuracy: 0.429066 Case_ins: 0.950404
2021-11-08 20:50:58,762 root  INFO     Edit Distance Accuracy: 0.494192

我看到读取训练集时 transform 参数是这个类:CustomImagePreprocess,但是 test.py 的 transform 却是这个类:ResizeWeight,它们的作用都是 resize。test.py 默认读取的图片数据不是 lmdb,那么我换成直接读取 lmdb 格式的测试集:test.py,并使用跟读取训练集时 transform 参数同一个 CustomImagePreprocess 得到的测试精度就会很低。请问是什么原因呢?

还有一个问题,config_lmdb.json 中指定的 n_class 应该是论文中说的 66 类吧?

请问论文中这个表格的精度是 Case_ins 精度吗?

wenwenyu commented 2 years ago

Hi, 新版本的测试代码test.py文件有bug,这是其他同学提交PR时产生的,还未经过测试,可使用PR之前的版本训练和测试。另外精度低是不是你的resized的widht和height设置和训练时的配置不同.

config_lmdb.json中n_class已经改为读取key.txt并自动计算出类别数了,见here

论文中精度指标是Case_ins.

qyfff commented 1 year ago

为什么我验证时有95%的正确率测试时不到56为什么高和宽都一样

qyfff commented 1 year ago

Hi, 新版本的测试代码test.py文件有bug,这是其他同学提交PR时产生的,还未经过测试,可使用PR之前的版本训练和测试。另外精度低是不是你的resized的widht和height设置和训练时的配置不同.

config_lmdb.json中n_class已经改为读取key.txt并自动计算出类别数了,见here

论文中精度指标是Case_ins.

pr之前的版本确定行吗,可以公开模型吗

qyfff commented 1 year ago

可以分享下测试数据集吗?

wenwenyu commented 1 year ago

说明一下,文字识别在公开的数据集上的指标是不区分大小写(Case ins)的,这是公开论文的通用做法,请阅读相关论文。代码中在训练时为简单打印的是不区分大小写的指标。而使用test.py文件推理时为了更通用,打印了两种指标,分别是区分大小写的(Sequence Accuracy)和不区分大小写的(Case_ins)指标。希望解惑。如果为了对齐论文的指标,请看Case_ins的指标。