Closed NextGuido closed 4 years ago
你的字符那么多,训轻量级网络可以训久点,或者需要对网络做一些调整,18000字符,CTC最后一层的参数太多了。大网络会在表达能力上更强些,问下你用大网络的测试精度怎么样?
@LDOUBLEV 大网络的测试结果:
2020-05-21 07:04:09,672-INFO: Test iter: 68000, acc:0.950456, best_acc:0.957234, best_epoch:82, best_batch_id:66000, eval_sample_num:41014
和上面的轻量级网路同样的参数配置(除了head的hidden_size改为256,backbone改为ResNet50_vd),精度还不错,只训练到86轮acc就达到用我之前自己的网络的效果了
@LDOUBLEV (1)请问识别部分crnn好像没有用到不定长识别吧,看源码好像是固定到统一size,然后缺少的用0 padding? (2)请问这种的话如果数据集中有的图片字符数很少,padding很多的话,不会影响效果么
在利用lsvt语料生成数据集的时候,你们会控制字符么?
@DuckJ 针对长文本识别效果较差的情况,我们把shape扩大到了(3,32,320)。如果您不需要识别过长字符串可以减小长度。我们用语料合成数据时,限制最长不超过25个字符,实际中超过25个字符的也比较少。
@tink2123 感谢回复。你们将shape扩大到了(3,32,320),那么针对图片的宽度远小于320的图片(比如图片只含有一个汉字),我看源码你们是padding 0的,请问这种padding太多,不会影响效果么
在短文本(单字)上验证不会影响识别效果,由于paddle是静态图组网,训练时无法改变输入shape,目前只能以最大值为准
@tink2123 谢谢回复,关于识别中中英混合识别,两个相邻的英文单词之间识别结果英文会连在一起,请问这方面能怎样解决,能给点指导么
@DuckJ 这是因为目前我们模型中没有识别空格,您可以修改训练字典,添加一个空格类别,然后加入一些带空格的样本进行finetune,应该可以解决这个问题
@tink2123 谢谢回复,加入空格finetune的时候,想问一下,这种汉字跟汉字之间的就无须将其label加上空格了吧,finetune时候是不是可以着重构造这种两个连接的英文这种情况
@DuckJ 是的,可以只加入英文数据集进行训练
@tink2123 好的,谢谢。我有个疑问,你们识别的时候没有对数据进行数据增强么
@DuckJ 暂时没有,因为我们在合成数据时已经做了一些扰动,颜色反转等变化。后续会在代码库中添加数据增强的代码。
2020.7.9 添加数据增强、学习率衰减策略,具体参考配置文件
@DuckJ 暂时没有,因为我们在合成数据时已经做了一些扰动,颜色反转等变化。后续会在代码库中添加数据增强的代码。
你好 ,我想问一下,你之前微调的时候数据是包括已有字符和新生成的字符吗,数据量大概是多少呢?比例是多少呢?
@LDOUBLEV 大网络的测试结果:
2020-05-21 07:04:09,672-INFO: Test iter: 68000, acc:0.950456, best_acc:0.957234, best_epoch:82, best_batch_id:66000, eval_sample_num:41014
和上面的轻量级网路同样的参数配置(除了head的hidden_size改为256,backbone改为ResNet50_vd),精度还不错,只训练到86轮acc就达到用我之前自己的网络的效果了
你好 ,我想问一下,你之前微调的时候数据是包括已有字符和新生成的字符吗,数据量大概是多少呢?比例是多少呢?
我更改了
rec_chinese_lite_train.yml
配置文件的内容,如下:其实只更改了
epoch_num,batch_size,character_dict_path,reader_yml,pretrain_weights
这几处,但是迭代了100轮左右,现在的train acc只有0.2左右。我的字符集有18000多个,请问这个轻量级的网络目前来看是不是欠拟合了?因为我发现如果我换成resnet50作为backbone,网络可以训练的不错