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)
Apache License 2.0
38.99k stars 7.32k forks source link

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

Closed nissansz closed 2 weeks ago

nissansz commented 3 weeks ago

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

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

UserWangZz commented 3 weeks ago

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

nissansz commented 3 weeks ago

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

changdazhou commented 2 weeks ago

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

nissansz commented 2 weeks ago

500万条

global_step有什么问题吗?

changdazhou commented 2 weeks ago

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

changdazhou commented 2 weeks ago

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

nissansz commented 2 weeks ago

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

nissansz commented 2 weeks ago

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

changdazhou commented 2 weeks ago

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

nissansz commented 2 weeks ago

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

changdazhou commented 2 weeks ago

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

nissansz commented 2 weeks ago

要调到多少?怎么改


------------------ 原始邮件 ------------------

发件人: changdazhou @.***>

发送时间: 2024-04-26 13:20:54

收件人:PaddlePaddle/PaddleOCR @.***>

抄送:nissanjp @.>,Author @.>

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

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

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

changdazhou commented 2 weeks ago

先调低一半看看再说

nissansz commented 2 weeks ago

Optimizer:name: Adambeta1: 0.9beta2: 0.999lr:learning_rate: 0.00025regularizer:name: L2factor: 0 改成上面这样?


------------------ 原始邮件 ------------------

发件人: changdazhou @.***>

发送时间: 2024-04-26 13:32:26

收件人:PaddlePaddle/PaddleOCR @.***>

抄送:nissanjp @.>,Author @.>

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

先调低一半看看再说

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

changdazhou commented 2 weeks ago

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

nissansz commented 2 weeks ago

我是每2000 step就评估一次。 不加载best,那不可能加载差的吧。

每一次恢复训练都是自动生成的图片,图片和之前的也都不一样


------------------ 原始邮件 ------------------

发件人: changdazhou @.***>

发送时间: 2024-04-26 13:44:24

收件人:PaddlePaddle/PaddleOCR @.***>

抄送:nissanjp @.>,Author @.>

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

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

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

changdazhou commented 2 weeks ago

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

nissansz commented 2 weeks ago

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

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

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

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

zhangyubo0722 commented 2 weeks ago

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

nissansz commented 2 weeks ago

问题是有可能1个epoch没到就出现训练不下去的问题了。这种要怎么恢复


------------------ 原始邮件 ------------------

发件人: zhangyubo0722 @.***>

发送时间: 2024-04-26 16:27:12

收件人:PaddlePaddle/PaddleOCR @.***>

抄送:nissanjp @.>,Author @.>

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

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

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

UserWangZz commented 2 weeks ago

你的batchsize设置的是多少啊

nissansz commented 2 weeks ago

Train.loader.batch_size_per_card=8

changdazhou commented 2 weeks ago

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

nissansz commented 2 weeks ago

就是官网的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

zhangyubo0722 commented 2 weeks ago

为什么epoch为1呢

nissansz commented 2 weeks ago

1 epoch就要十几天,而且中途可能各种问题,没法训练完


------------------ 原始邮件 ------------------

发件人: zhangyubo0722 @.***>

发送时间: 2024-04-26 19:49:02

收件人:PaddlePaddle/PaddleOCR @.***>

抄送:nissanjp @.>,Author @.>

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

为什么epoch为1呢

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

zhangyubo0722 commented 2 weeks ago

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

nissansz commented 2 weeks ago

四万字符用500万条够吗


------------------ 原始邮件 ------------------

发件人: zhangyubo0722 @.***>

发送时间: 2024-04-26 19:55:24

收件人:PaddlePaddle/PaddleOCR @.***>

抄送:nissanjp @.>,Author @.>

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

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

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

zhangyubo0722 commented 2 weeks ago

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

nissansz commented 2 weeks ago

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

changdazhou commented 2 weeks ago

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

nissansz commented 2 weeks ago

1万条验证

changdazhou commented 2 weeks ago

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