bgshih / aster

Recognizing cropped text in natural images.
MIT License
724 stars 195 forks source link

训练中文模型的一些修改 #36

Open Tracin opened 5 years ago

Tracin commented 5 years ago
  1. 修改experiment/模型名称/config/下的配置文件, 将built_in_set更改成为text_file并指定中文字符集路径。
  2. 配置文件中,attention_predictor下一定要将reverse修改为false
  3. groundtruth中每个汉字中间加入分隔符,并修改core/label_map.py中的text_to_labels函数中的tf.string_split函数参数。
  4. 由于gt中加入了分隔符,需要相应修改utils/recognition_evaluation.py中相关部分使得评估正确。
ChChwang commented 5 years ago

reverse 不用改吧,正反向预测取大值

Tracin commented 5 years ago

reverse 不用改吧,正反向预测取大值

我用了utf-8编码,汉字为3字节,reverse按字节翻转,因此会出错。

ChChwang commented 5 years ago

reverse 不用改吧,正反向预测取大值

我用了utf-8编码,汉字为3字节,reverse按字节翻转,因此会出错。

可以改的,不过双向预测没有看出大的效果,相比单向

Tracin commented 5 years ago

reverse 不用改吧,正反向预测取大值

我用了utf-8编码,汉字为3字节,reverse按字节翻转,因此会出错。

可以改的,不过双向预测没有看出大的效果,相比单向

是的,这样最简单。

tangsipeng commented 5 years ago

@Tracin 请问中文训练效果如何?

wangxupeng commented 5 years ago

@Tracin 将built_in_set更改成为text_file 请问这里如何改啊 我将 ALLCASES_SYMBOLS 改成text_file结果报错了

li675599061 commented 5 years ago

@Tracin 您好,想请问一下你中文训练的结果如何了?能分享一下训练代码吗?

li675599061 commented 5 years ago

@王旭鹏 请问您后续有自己训练中文吗?

Pay20Y commented 5 years ago

您好,请问utils/recognition_evaluation.py具体应该怎么修改呢,我修改了_normalize_text这里,除此之外还需要修改什么呢?谢谢!

Tracin commented 5 years ago

您好,请问utils/recognition_evaluation.py具体应该怎么修改呢,我修改了_normalize_text这里,除此之外还需要修改什么呢?谢谢!

@Pay20Y 去掉gt中之前加入的分隔符

Pay20Y commented 5 years ago

您好,请问utils/recognition_evaluation.py具体应该怎么修改呢,我修改了_normalize_text这里,除此之外还需要修改什么呢?谢谢!

@Pay20Y 去掉gt中之前加入的分隔符

好的,感谢

loralyc commented 5 years ago

@Tracin 您好,请问gt应该是只指训练集的labels吧,我在每个中文都加了分隔符,text_file文件没有添加,我看了代码text_file可以正常的读取字典文件,但是输出结果gt一直是空白,recognition_text一直是乱码,想咨询下是否我gt添加分隔符方式错误了?谢谢!

pageedward commented 5 years ago

@Tracin @loralyc 请问你用text_file训练是从已有checkpoint继续训练吗,会不会出现下面问题: image 需要排除部分节点?

luoqingyu commented 5 years ago

chars = tf.string_split(text, delimiter='UTF-8') 哈哈哈,谢谢

rfdeng commented 5 years ago

@Tracin @ChChwang @loralyc @Pay20Y 想请问大佬们对这个还有印象么,我按照楼主的方法进行了修改。但是发现只要label里面带中文,训练依然有问题,虽然不报错,但是收敛飞快,预测时会将所有输入预测成“0”。

感觉还是utf-8编码的问题,有人知道可能的原因吗。

ChChwang commented 5 years ago

@rfdeng 看不出来,具体细节?

rfdeng commented 5 years ago

@ChChwang 感谢回复,想请问大佬是在label中存在中文的情况下,切实训练成功了吗?效果大致如何?

我严格按照楼主的2,3,4步骤预处理了label,加入分隔符。我的label是车牌数据,所以同时包含中文英文,为了统一我每个字符之间都加了分隔符。只有第一步我偷了下懒,把label_map_builder.py里面的ALLCASES_SYMBOLS情况下,直接添加了我需要的中文字符。 character_set = list(string.digits + string.ascii_letters + ‘陕鲁皖....’)

然后我基本在迭代1k时loss就会降到1e-3量级,测试结果全部为‘0’.

ChChwang commented 5 years ago

@rfdeng,中文是三个字节,英文和数字是一个字节。我之前训练成功了,双向中文比单向中文没有提升多少,矫正网络学习的很好。想改分布式训练,分布式训练几步后,有几台会挂掉,如果你跑分布式成功告诉我一下,谢谢

rfdeng commented 5 years ago

@rfdeng,中文是三个字节,英文和数字是一个字节。我之前训练成功了,双向中文比单向中文没有提升多少,矫正网络学习的很好。想改分布式训练,分布式训练几步后,有几台会挂掉,如果你跑分布式成功告诉我一下,谢谢

中英文加分隔符之后,tf.string_split不会按字节分的,应该不是这个问题。我目前是把中文字符重新映射成其他非中文字符加到label里去了。这样分布式训练没问题。。。但是label里只要带中文就会挂。我和别人讨论,有个兄弟讲不同的中文label会全部被映射成1个character_set里面的同一个index,我还没来得及check。

yongshuaihuang commented 5 years ago

@Tracin @ChChwang @rfdeng 小弟新手,请问中文加空格,只是在groundtruth 加 ? 还是 中文字符集中也要加?我这边按照 @Tracin 说的修改了,但识别结果为0

rfdeng commented 5 years ago

@Tracin @ChChwang @rfdeng 小弟新手,请问中文加空格,只是在groundtruth 加 ? 还是 中文字符集中也要加?我这边按照 @Tracin 说的修改了,但识别结果为0

groundtruth也要加,我们遇到的可能是同一个问题,我后来debug发现原因是原始的配置文件中对训练的输入数据有一个string_filtering的操作。这一步会导致你label中所有非预先定义的字符集字符被过滤掉,这本来是原文中为了过滤标点符号和大小写统一的,但是这里会导致我们添加的分隔符被过滤掉。

所以可以在字符集里添加你设定的分隔符,或者说直接注释掉string_filtering对应的那个data_augmentation_options。我选用的是第二种方法。

ghost commented 5 years ago

@Tracin @ChChwang @rfdeng 小弟新手,请问中文加空格,只是在groundtruth 加 ? 还是 中文字符集中也要加?我这边按照 @Tracin 说的修改了,但识别结果为0

groundtruth也要加,我们遇到的可能是同一个问题,我后来debug发现原因是原始的配置文件中对训练的输入数据有一个string_filtering的操作。这一步会导致你label中所有非预先定义的字符集字符被过滤掉,这本来是原文中为了过滤标点符号和大小写统一的,但是这里会导致我们添加的分隔符被过滤掉。 所以可以在字符集里添加你设定的分隔符,或者说直接注释掉string_filtering对应的那个data_augmentation_options。我选用的是第二种方法。

请问您训练成功了吗?最终结果如何呢?我做了修改后训练的结果总是10个定长的输出...模型没法用

zhiweiguo commented 4 years ago
  1. 修改experiment/模型名称/config/下的配置文件, 将built_in_set更改成为text_file并指定中文字符集路径。
  2. 配置文件中,attention_predictor下一定要将reverse修改为false
  3. groundtruth中每个汉字中间加入分隔符,并修改core/label_map.py中的text_to_labels函数中的tf.string_split函数参数。
  4. 由于gt中加入了分隔符,需要相应修改utils/recognition_evaluation.py中相关部分使得评估正确。

@Tracin 您好,针对中文字符的情况,请问有没有修改完的示例贴出来参考一下呢?感激不尽

zhiweiguo commented 4 years ago

reverse 不用改吧,正反向预测取大值

@ChChwang 大佬有修改好的可用的示例可以参考一下吗?

1037861070 commented 4 years ago

这里中文字符集路径如何改呢?有最后的预测结果吗?

isyyzhang commented 3 years ago

@Tracin @ChChwang @rfdeng 小弟新手,请问中文加空格,只是在groundtruth 加 ? 还是 中文字符集中也要加?我这边按照 @Tracin 说的修改了,但识别结果为0

groundtruth也要加,我们遇到的可能是同一个问题,我后来debug发现原因是原始的配置文件中对训练的输入数据有一个string_filtering的操作。这一步会导致你label中所有非预先定义的字符集字符被过滤掉,这本来是原文中为了过滤标点符号和大小写统一的,但是这里会导致我们添加的分隔符被过滤掉。

所以可以在字符集里添加你设定的分隔符,或者说直接注释掉string_filtering对应的那个data_augmentation_options。我选用的是第二种方法。

您好,请问为什么在训练中文的时候要加入分隔符啊?