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
42.71k stars 7.68k forks source link

V3识别模型算法问题 #6264

Closed ziyaxuanyi closed 2 years ago

ziyaxuanyi commented 2 years ago

注意到代码中SVTR部分,训练使用了use_guide,将张量属性stop_gradient置为True,不计算梯度,这是什么意思,能解释一下这么做的理由吗?

andyjiang1116 commented 2 years ago

这个地方是使用了GTC策略,阻止梯度往前传,也即不更新backbone部分的梯度

ziyaxuanyi commented 2 years ago

那如果从零开始训练,初始化网络后,backbone部分就不再更新呢,只训练更新CTC head和SAR head部分参数?

andyjiang1116 commented 2 years ago

SAR head 部分会更新backbone的梯度,具体可以参考GTC的策略哈

ziyaxuanyi commented 2 years ago

也就是说,backbone部分参数的训练依赖于SAR head,并不受CTC head的影响,只受attention这支任务的训练。 本质上来讲采用两个head,这是个多任务训练,为什么不整体上一起训练,是因为训练很难收敛吗?还是单纯因为这样做比同时一起训练来的结果要好呢?

andyjiang1116 commented 2 years ago

GTC的思想就是这样,训练效果也会好一些,你可以试一下整体一起训练

ziyaxuanyi commented 2 years ago

好的,感谢回答!