[PaddlePaddle/PaddleOCR]训练时,训练几天后最佳准确率显示0.43时,有的时候准确率就会变到0.25,这种只能加载最佳模型,重新启动训练吧

2024-05-13 527 views
4

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

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

训练时,训练几天后最佳准确率显示0.43时,有的时候准确率就会变到0.25,这种只能加载最佳模型,重新启动训练吧

回答

6

是指best_accuracy是0.43,但是训练时评估指标是0.25吗? 可以尝试降低学习率重新训练看看趋势

6

learning rate如下

Optimizer: name: Adam beta1: 0.9 beta2: 0.999 lr: learning_rate: 0.0005 regularizer: name: L2 factor: 0

训练step如下,要改成多少? [2024/04/25 22:16:31] ppocr INFO: epoch: [1/1], global_step: 121600, lr: 0.000500, acc: 0.187500, norm_edit_dis: 0.707074, loss: 20.595310, avg_reader_cost: 0.40589 s, avg_batch_cost: 1.04608 s, avg_samples: 8.0, ips: 7.64759 samples/s, eta: 9 days, 21:07:56 [2024/04/25 22:18:15] ppocr INFO: epoch: [1/1], global_step: 121700, lr: 0.000500, acc: 0.250000, norm_edit_dis: 0.693690, loss: 17.470940, avg_reader_cost: 0.43913 s, avg_batch_cost: 1.04737 s, avg_samples: 8.0, ips: 7.63819 samples/s, eta: 9 days, 21:05:43 [2024/04/25 22:20:01] ppocr INFO: epoch: [1/1], global_step: 121800, lr: 0.000500, acc: 0.250000, norm_edit_dis: 0.671472, loss: 20.591961, avg_reader_cost: 0.44723 s, avg_batch_cost: 1.05456 s, avg_samples: 8.0, ips: 7.58611 samples/s, eta: 9 days, 21:03:35 [2024/04/25 22:21:44] ppocr INFO: epoch: [1/1], global_step: 121900, lr: 0.000500, acc: 0.250000, norm_edit_dis: 0.720888, loss: 16.945772, avg_reader_cost: 0.41486 s, avg_batch_cost: 1.03386 s, avg_samples: 8.0, ips: 7.73796 samples/s, eta: 9 days, 21:01:14 [2024/04/25 22:23:37] ppocr INFO: epoch: [1/1], global_step: 122000, lr: 0.000500, acc: 0.250000, norm_edit_dis: 0.735174, loss: 14.910526, avg_reader_cost: 0.47595 s, avg_batch_cost: 1.12926 s, avg_samples: 8.0, ips: 7.08428 samples/s, eta: 9 days, 20:59:54 [2024/04/25 22:27:59] ppocr INFO: cur metric, acc: 0.28295819821962137, norm_edit_dis: 0.7227735431210541, fps: 92.19959765340761 [2024/04/25 22:27:59] ppocr INFO: best metric, acc: 0.4059485514230363, is_float16: False, norm_edit_dis: 0.7764144458502212, fps: 82.91093806455184, best_epoch: 1 [2024/04/25 22:29:41] ppocr INFO: epoch: [1/1], global_step: 122100, lr: 0.000500, acc: 0.250000, norm_edit_dis: 0.708495, loss: 20.486292, avg_reader_cost: 0.44523 s, avg_batch_cost: 1.02234 s, avg_samples: 8.0, ips: 7.82522 samples/s, eta: 9 days, 20:57:26 [2024/04/25 22:31:32] ppocr INFO: epoch: [1/1], global_step: 122200, lr: 0.000500, acc: 0.250000, norm_edit_dis: 0.695857, loss: 14.148483, avg_reader_cost: 0.47231 s, avg_batch_cost: 1.11145 s, avg_samples: 8.0, ips: 7.19782 samples/s, eta: 9 days, 20:55:54 [2024/04/25 22:33:17] ppocr INFO: epoch: [1/1], global_step: 122300, lr: 0.000500, acc: 0.250000, norm_edit_dis: 0.789560, loss: 13.264412, avg_reader_cost: 0.39123 s, avg_batch_cost: 1.04543 s, avg_samples: 8.0, ips: 7.65233 samples/s, eta: 9 days, 20:53:41

8

可以多等一下看看呢,看学习率还是base呢,数据量大概有多少呢,为什么global_step这么大

6

500万条

global_step有什么问题吗?

0

这个已经训练了多久呢,用的哪个模型

8

看log像是刚开始训练,检测的模型一般训练的会比较久,前期精度不变化是正常的哈

7

resnet34, 这个就是不断改增强,改字符串,有时间就一直训练,

5

是rec模型,最近加了随机padding

8

那应该继续等待他训练就好,精度不会一直卡在0.25不变的

4

就是不知道从开始加载best模型恢复训练,到经过几天后,就会降到0.25,然后不再改善了。

7

加载best模型恢复训练的话,应该把学习率调的稍微小一些

0

先调低一半看看再说

3

对的,先跑一下看看,你加载了之前的最佳训练模型,后面应该属于微调过程,不宜将学习率设置太大。当然看了你的需求,不建议每次加载前一次的最佳权重,一方面这没有控制变量式的做对比实验,另一方面我的理解是这容易让模型在训练过程中退化掉一部分最初预训练权重的知识,不利于刷出更高精度

0

想问下,你这个加载best是说加载best断点然后继续训练是吗

1

就是代码自动保存的best_accuracy.pdparams

是不是要改一下代码,在评估完也保存一个latest版本

差距不是很大的话就选最后一次的模型重新训练 差距很大的话 选精度最高的模型 重新训练

这样可以避免学习的知识退化?

5

从上面的日志中看到你只训练一个epoch吗,如果只训练一个epoch,用best权重加载checkout的话实际上是无效的,因为断点训练是以epoch为单位继续训练的。

4

你的batchsize设置的是多少啊

0

Train.loader.batch_size_per_card=8

1

辛苦将yaml文件贴出来我们看下吧

3

就是官网的yml 然后改以下参数 Global.eval_batch_step=[0,2000] Global.print_batch_step=100 Train.loader.batch_size_per_card=8 Train.loader.num_workers=0 Eval.loader.batch_size_per_card=8 Eval.loader.num_workers=0 Global.evalqty=500 Global.trainqty=5000000

0

为什么epoch为1呢

6

因为只训练一轮的话在训练过程中无法覆盖所有数据,所以在训练前期可能遇到的数据和评估集分布接近,导致有较高的best metric,而训到后面时数据可能较为困难,导致精度较低,所以还是需要多训几轮,这样才能覆盖所有数据并且每张图片都会多参与几次反向传播

4

主要还是看数据集中的字符分布比例,比较均衡的话是够的

0

这个准确率受评估集的影响很大,比如我用清晰的图去评估,准确率可能会显示在0.9以上 加了各种增强以后,可能就只有0.43左右了,这个要怎么设计评估集,让它兼顾清晰图和加强图?

1

验证集有多少数据呢,会不会是验证集数量太少了。要想提高评估集应对各种增强的方法确实就是需要在训练集增加相应的数据增强,让模型学会应对增强图片的能力

2

1万条验证

9

验证集中对一部分做数据增强吧,均衡一下就行。鉴于后续问题已经与标题不符,且该issue沟通环节过多,我们先关闭这个issue,如有其他疑问,建议新开一个issue