bytedance / SPTSv2

The official implementation of SPTS v2: Single-Point Text Spotting
Apache License 2.0
119 stars 16 forks source link

关于训练时长和loss情况 #20

Open madajie9 opened 3 months ago

madajie9 commented 3 months ago

作者您好,

十分感谢您的慷慨分享,使我从论文和代码中学习和收获良多。

情况如下:我尝试用现有代码,训练体量和英文数据库相当的中文数据(200k左右张图片) 参考论文,将学习率设置为5e-4,并将epochs设置为150;同时,根据我自己的训练条件,vocab_size=6w左右,使用GPU资源 8xA6000,batchsize=1。

我有两点问题向您请教: (1)完成1个epochs需要4小时左右,那么估算来150epochs至少要25天,这和您的训练时长是相符的吗?因为我发现代码中并没有结束1epoch就进行evaluation的部分,而是一直训下去,evaluation是要单独运行的,这意味着训练过程不会early stop。 (2)训练loss在3epochs后下降到0.4左右,这个数字合理吗?因为我看最早一次对epoch checkpoint保存是10 epoch,在这之前只是不断更新checkpoint.pth,我理解这是到10epochs左右测试才比较有意义,但是到了3epochs loss=0.4左右的时候,loss的下降就变得缓慢了,请问这样正常吗?

再次感谢~期待您的回复。

zhangjx123 commented 3 months ago

我是用A100 16卡 bs=4来训练的,因此我大约2-3天就能完成训练;loss 0.4应该是正常的,我最终收敛在0.3-附近。如果你需要evaluation,可以使用checkpoint进行测试,你可以设置多少个epoch存一次,我的建议是50个epoch测一下。loss到了后期下降缓慢也很正常

madajie9 commented 3 months ago

我是用A100 16卡 bs=4来训练的,因此我大约2-3天就能完成训练;loss 0.4应该是正常的,我最终收敛在0.3-附近。如果你需要evaluation,可以使用checkpoint进行测试,你可以设置多少个epoch存一次,我的建议是50个epoch测一下。loss到了后期下降缓慢也很正常

感谢您回复~

我的问题得到解决,还有一个小问题想要请教您,之前issue也有提到过,是关于标签的,我在阅读代码之后依旧有些疑惑,所以找您请教。

代码位置:SPTSv2/util/data.py args.category_start_index = args.bins + args.padding_bins*2 num_char_classes = len(args.chars) + 1 # this is for noise label / unk label if args.pad_rec: num_char_classes += 1 # this is for pad label args.end_index = args.category_start_index + num_char_classes args.start_index = args.end_index + 1 args.noise_index = args.start_index + 1 args.padding_index = args.noise_index + 1 args.no_known_index = args.padding_index

前面1000个是x,y位置的分类标签,识别器分类的类别,设置成了chars number + 4个类, 我理解的是: (1)chars number=97,除了95个英文字母+标点空格之类的,最后两个id=95是rec unknown, id=96是rec pad (2)后面的4个类,包括end, start, noise, pad (3)最后还有一个unknown,但是id和(2)中的noise id相同

我有2个地方不太理解: 第一,unknow和pad类别,为什么在(1)和(2)中定义了两次,这两次的用途有什么不同? 第二,(3)对应代码args.no_known_index = args.padding_index 我看代码中并没用到no_known_index,为什么要这么设置呢?