Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

不定长的识别问题 #8

Open
Hubert2102 opened this issue Mar 13, 2019 · 20 comments
Open

不定长的识别问题 #8

Hubert2102 opened this issue Mar 13, 2019 · 20 comments

Comments

@Hubert2102
Copy link

Hubert2102 commented Mar 13, 2019

你好,用您提供的开源模型进行不定长测试,有这两种问题:
1.图片不定长:
transformer = dataset.resizeNormalize((280, 32)),非280会报错,CRNN的处理是按照32的高然后同比例缩放图片的宽,因此输入是(x,32)
2.文字不定长:
可能是因为训练的时候都是10个字,预测的时候不管图片里面几个字,预测结果还都是10个字左右?

举个例子,把图片
20436312_1683447152
中的字去掉几个后,还是280*32输入识别,
2043
结果是这样:
predict_str:,__不愿意意意资(9个字) => prob:0.002346405293792486
20437421_
predict_str:中国通信信位主办、《 (10个字) => prob:0.05960559844970703
20437421_21
predict_str:,(通信学会主主府 (9个字) => prob:0.000349084148183465
204
predict_str:叶国通信学会主里”《 (10个字) => prob:0.01799328438937664

想问如何解决?是不是训练需要不定长训练啊?谢谢~

@Hubert2102 Hubert2102 changed the title 任意长度文字的识别问题 不定长的识别问题 Mar 13, 2019
@chenjun2hao
Copy link
Owner

@Hubert2102
针对图片不定长的问题,后面会更新一个版本的。文字不定长,理论上改标注就行了。

@Hubert2102
Copy link
Author

改标注指的是不定长文字训练嘛@chenjun2hao

@zuokai
Copy link

zuokai commented Jun 13, 2019

@chenjun2hao 我尝试了不定长训练,包括几种方式:
1)batch内定长,不同batch之间不定长
2)所有batch都定长,通过pad的方式
3)cnn阶段不定长,在输入lstm的时候加pad
这3种方式都无法收敛,我想问下你是怎么实现不定长图片训练的啊?

@Lanme
Copy link

Lanme commented Jul 7, 2019

这个是不定长训练可以解决的么?我看ctc解码是定长训练可以不定长预测来着

@Lanme
Copy link

Lanme commented Jul 7, 2019

@chenjun2hao 我尝试了不定长训练,包括几种方式:
1)batch内定长,不同batch之间不定长
2)所有batch都定长,通过pad的方式
3)cnn阶段不定长,在输入lstm的时候加pad
这3种方式都无法收敛,我想问下你是怎么实现不定长图片训练的啊?

请问你是pad了图片还是文字还是两者呢?不定长那么图片的大小也会不一样吧

@chenjun2hao
Copy link
Owner

@Lanme ,针对不定长的文本,你需要:1. 在batch内将图片统一宽度或者整个数据集用同样的宽度。2. 为了batch训练,你需要将标注的label填充为统一的长度(用blank进行填充)。

@Lanme
Copy link

Lanme commented Jul 8, 2019

那这确定是不定长训练能解决么? 我定长训练了,之后我输入的图片也是这么多字符,但是图片被拉长了,字符间距变大,resize成固定高度,这个时候宽度和原来训练的不一样,就识别不出来了。

@zuokai
Copy link

zuokai commented Jul 8, 2019

@Lanme 训练时输入图像分桶,保证同一个batch内的长度一样就可以

@Lanme
Copy link

Lanme commented Jul 8, 2019

@Lanme 训练时输入图像分桶,保证同一个batch内的长度一样就可以

你试过这样不定长训练就能解决不定长预测的问题么?

@zuokai
Copy link

zuokai commented Jul 8, 2019

@Lanme 可以,我尺度用的range(64,4,516),超过512缩放到512,低于64的缩放到64,效果和训练几个定长模型差不多

@wenston2006
Copy link

@zuokai 将图像缩放到统一高度,长度不够的话进行padding; 这样做进行不定长训练可否? 我的想法是这样就不用对数据分桶了; 另外请问你数据分桶用的什么函数?

@zuokai
Copy link

zuokai commented Jul 10, 2019

@wenston2006考虑到训练耗时,我没有加pad啊,你可以试试,我觉得应该是可以的,不过这样你要把sequence_length传给dynamic_rnn,分桶我就是随机random.choice(range(64,516,4))

@wenston2006
Copy link

@zuokai 了解了,我以为用的pytorch自带的bucket函数; 你训练不定长图片,最后在测试集上识别精度如何?

@zuokai
Copy link

zuokai commented Jul 11, 2019

@wenston2006 精度和训练多个定长的attention模型几乎一样,具体和你测试集难度有关

@wenston2006
Copy link

wenston2006 commented Jul 11, 2019

@zuokai tensorflow因为用的静态图, 对于不定长的训练数据, 由于相应的RNN的参数也会改变, 导致需要构建多个静态图, 所以推出了dynamic_rnn; pytorch本身就是构建的动态图,应该没有dynamic_rnn这个函数吧?我现在用的这个git里面的第二版本, 作者对每个batch求得最长的文本长度max_length, 然后构建图时图的长度就是max_length, batch里面长度较短的文本,会填充若干个blank字符进行对齐. 不知道他的做法是否跟你前面讲的思路一致?

@wenston2006
Copy link

@zuokai 我梳理了一下,本git第二版图片的长度统一resize到高32, 长280, 对于文本标签也进行了对齐; 根据你前面讲的,你是将图片分桶, 我的理解是不改变原图的宽和高的比例, 但将高度统一缩放到某个固定高度(如32?), 然后不断从训练数据中抽取相同宽度的图片,直到获得batch_size张图片,然后进行训练; 我现在还有三点存疑: 1)请问你对文本标签怎么处理的,是否进行了对齐呢?同时确保图片尺寸和文本标签长度一致似乎较难; 2)分桶以后要针对每种图片宽度构建一个模型吗?;3)在2)的基础上, loss也要针对每种模型进行计算,最终将不同模型的loss累加起来?

@zuokai
Copy link

zuokai commented Jul 12, 2019

@wenston2006 是一个模型啊,cnn和dynamic_rnn本来就支持动态大小的图片,只是因为需要batch训练,才通过分桶保证图像在一个batch内宽度是一样的,但是文本长度是不一样的,用补齐就行了

@wenston2006
Copy link

@zuokai 我现在也尝试了bucket的思路,不过我是根据训练文本长度来区分的, 训练的loss很低,但在测试集上loss很高, 训练出来的模型泛化性能不强, 应该是过拟合了; 把训练数据用来测试都是对的,换成别的数据,就不行了,对测试文本长度也比较敏感

@wenston2006
Copy link

@kellylin841015 请问你的训练和测试代码可以分享一下吗? 你上面提到训练都用的10个字,那么cnn阶段不定长是指的训练还是测试?

@kellylin841015
Copy link

@Lanme ,针对不定长的文本,你需要:1. 在batch内将图片统一宽度或者整个数据集用同样的宽度。2. 为了batch训练,你需要将标注的label填充为统一的长度(用blank进行填充)。

你好,請問,blank填充是指你的字典裡有一個字符是" "空格嗎?還是你以其他字符代表?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants