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)
https://paddlepaddle.github.io/PaddleOCR/
Apache License 2.0
44.19k stars 7.82k forks source link

生僻字fine-tune不收敛 #4160

Closed 4nthon closed 2 years ago

4nthon commented 3 years ago

我在原有字典的基础上扩增了一批生僻字,简单的白底黑字10~13个文字作为训练数据 loss降到100+左右不再收敛,学习率尝试了0.001和001 训练结果基本一致,当学习率为0.1的时候开始loss会显著下降,降到130+就开始骤增 数据量的话测试集5万条,训练集依次尝试了5万条和50万条,均不收敛 请问我应当处理?

tink2123 commented 3 years ago

可以用warmup和cosine decay的训练策略,让学习率缓慢增长再逐渐下降。loss只是其中一个指标,可以结合acc一起看,如果精度符合预期了也是可以的。

4nthon commented 3 years ago

可以用warmup和cosine decay的训练策略,让学习率缓慢增长再逐渐下降。loss只是其中一个指标,可以结合acc一起看,如果精度符合预期了也是可以的。

acc一直都是0 我尝试加深了网络层数去除了l2 但是并没有效果

ioracion commented 3 years ago

1.不要用mobile网络,效果上限低&很难微调(因为你没有官方数据难还原 2.尽量让字典里的每个字的出现频率在200以上(最好均匀),可以用text_renderer-master合成试试效果 3.多看FAQ和搜搜历史issue找找有无类似问题

4nthon commented 3 years ago

1.不要用mobile网络,效果上限低&很难微调(因为你没有官方数据难还原 2.尽量让字典里的每个字的出现频率在200以上(最好均匀),可以用text_renderer-master合成试试效果 3.多看FAQ和搜搜历史issue找找有无类似问题

我使用了CRNN算法 50层或者101层的 今天尝试了从字典里面截取出100个非常常用的字 loss可以降到97左右 单纯白底黑字是不是跟原始数据集区别太大? 我寻找过了 其他问题并没有提出如何训练生僻字

ziyaxuanyi commented 3 years ago

严重怀疑你的数据有问题,仔细检查一下吧。确保程序读取的图片和标签一一对应并且检查标签编码之后是否正确。我目前训练几百万到上千万的数据量,都能收敛很好。另外 1.学习率0.001对于这个工程的网络是个很好的学习率,建议不要轻易改动 2.数据尽量要多场景多样性,合成数据越多越好 3.生僻字可以考虑使用focal loss会比较好

4nthon commented 3 years ago

严重怀疑你的数据有问题,仔细检查一下吧。确保程序读取的图片和标签一一对应并且检查标签编码之后是否正确。我目前训练几百万到上千万的数据量,都能收敛很好。另外 1.学习率0.001对于这个工程的网络是个很好的学习率,建议不要轻易改动 2.数据尽量要多场景多样性,合成数据越多越好 3.生僻字可以考虑使用focal loss会比较好

请问待识别数据有长有短,长的大概15个字,短的1个字,应该怎么构建数据集呢?

ziyaxuanyi commented 3 years ago

1-15每种长度都合成一些呗

4nthon commented 3 years ago

1-15每种长度都合成一些呗

Emmmm,我也是这么想的。有个问题就是styletext没法合成生僻字,看起来好像是因为字库不支持,合成出来的东西长得像甲骨文,请问有什么好的办法吗?(我加了自己的字库依然不行,感觉跟模型有关系)

ziyaxuanyi commented 3 years ago

建议使用Text_renderer和TextRecognitionDataGenerator这两个合成工具,我用这两个合成工具,多离谱的生僻字都能合成出来。TextRecognitionDataGenerator是合成效率高快速,但场景简单,Text_renderer是合成速度慢,但合成的场景比较丰富复杂。

paddle-bot-old[bot] commented 2 years ago

Since you haven\'t replied for more than 3 months, we have closed this issue/pr. If the problem is not solved or there is a follow-up one, please reopen it at any time and we will continue to follow up. It is recommended to pull and try the latest code first. 由于您超过三个月未回复,我们将关闭这个issue/pr。 若问题未解决或有后续问题,请随时重新打开(建议先拉取最新代码进行尝试),我们会继续跟进。

jolt2017 commented 2 years ago

1-15每种长度都合成一些呗

Emmmm,我也是这么想的。有个问题就是styletext没法合成生僻字,看起来好像是因为字库不支持,合成出来的东西长得像甲骨文,请问有什么好的办法吗?(我加了自己的字库依然不行,感觉跟模型有关系)

解决了么,我好像遇到跟你一样的问题了,loss 先下降后上升

nissansz commented 6 months ago

1.不要用mobile网络,效果上限低&很难微调(因为你没有官方数据难还原 2.尽量让字典里的每个字的出现频率在200以上(最好均匀),可以用text_renderer-master合成试试效果 3.多看FAQ和搜搜历史issue找找有无类似问题

验证集尽量使用真实场景的数据,方便挑选出精度最佳的模型。