CRNN_Chinese_Characters_Rec
CRNN_Chinese_Characters_Rec copied to clipboard
关于demo.py中resize问题,
您好,我发现您的demo.py中的resize,有点不对,首先在训练的时候,您对图片宽度先进行了280到160的放缩,放缩因子为1.75。所以我们在测试图片处理
第一步,也应该要进行图片宽度除以这个放缩因子。
第二步,图片高度要放缩到固定的高度32,所以同时宽度在此基础上也要同比例缩放。
假如一张416乘86的图片,经过第一步会缩放到237乘以86的尺寸。然后在经过第二步,同比例缩放,缩放完以后宽度应该是88,高度为32。但是您的代码我单独打印出来,您的宽度仍然是237,高度是32。所以并没有按照同比例缩放?是我的理解错了吗?希望得到您的回复,谢谢。
我这里是宽高一起放缩, 416x86 --> 237x32
如果测试的时候您将宽和高一起放缩,那么和您训练时候数据放缩倍数不一样,因为您训练的时候宽度280,高度32,您会放缩到宽度160,高度32,所以图片仅仅通过了宽度放缩,(这个时候图片会变形),但是在测试的时候不应该是先经过在保持高度不变,在宽度上进行280-160的放缩,然后在经过同比例将高度放缩到32的同时,宽度第二次经过放缩吗?
在2020年04月28日 07:32,WoodGhost. 写道:
我这里是宽高一起放缩, 416x86 --> 237x32
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
应该是按你这样操作,先同比例缩放至高度为32,然后再放缩宽度!
应该是按你这样操作,先同比例缩放至高度为32,然后再放缩宽度!
好的,多谢,还有我看到您使用360万定长10字的图片进行训练的,您的训练代码可以直接训练不定长的文字图吗?
修改一下dataloader,字符数不定,但是分辨率要固定
修改一下dataloader,字符数不定,但是分辨率要固定
我刚看了一下您的train.py代码,没看懂怎么修改dataloader,可以告知一下如何修改吗?谢谢!
lib/Dataset/ 代码在这里
lib/Dataset/ 代码在这里
谢谢,我太笨了,很抱歉啊,我只看到有resize的地方,没看到如何修改dataloader字符数不固定,可以写一下在哪里修改代码吗?十分感谢
这个就是数据导入类,你按你的需求修改
这个就是数据导入类,你按你的需求修改
谢谢回复,self.labels就是我们需要的导入的图片名称和标签,但是我不知道哪里修改不定长的,字符数不固定。
这个就是数据导入类,你按你的需求修改
谢谢回复,self.labels就是我们需要的导入的图片名称和标签,但是我不知道哪里修改不定长的,字符数不固定。
你的这个问题,我这边的处理方式是batch_size = 1就能解决不定长的训练。
就能解决不定长的训练
谢谢回复,batch_size=1那不得训练很长时间吗?
@zcswdt 你说的是应该是每个batch的数据之间的宽度可以不一样,支持不定长吧。但是每个batch之内的图片还是会缩放到同一尺寸的,可以通过对batch的数据进行填充或者resize
@zcswdt 你说的是应该是每个batch的数据之间的宽度可以不一样,支持不定长吧。但是每个batch之内的图片还是会缩放到同一尺寸的,可以通过对batch的数据进行填充或者resize
谢谢回复,对,就是原始图片的长度是不定长,而且字数也是不定字数,这样的话,有好的处理方法吗?
@zcswdt 有啊,就是通过对每个batch图片resize或者填充到指定大小即可,不同batch之间可以不一样,你可以参考这个https://github.com/Holmeyoung/crnn-pytorch/blob/master/dataset.py#L117
@zcswdt 有啊,就是通过对每个batch图片resize或者填充到指定大小即可,不同batch之间可以不一样,你可以参考这个https://github.com/Holmeyoung/crnn-pytorch/blob/master/dataset.py#L117
It doesn't keep the ratios.
@abcxs 他这个是resize 破坏了ratio,但是你可以改代码进行填充而不是resize的啊
@DuckJ I agree with you.
应该是按你这样操作,先同比例缩放至高度为32,然后再放缩宽度!
请问一个问题,您第二步resize操作的时候,直接强行放缩宽度值,不会使图片中的字符变形严重吗(当输入图片宽高比与训练图差别较大时)? 我刚接触ocr没多久,crnn中不是说可以只统一高度,宽度任意吗? 您这个网络支持这种输入方式吗?
应该是按你这样操作,先同比例缩放至高度为32,然后再放缩宽度!
请问一个问题,您第二步resize操作的时候,直接强行放缩宽度值,不会使图片中的字符变形严重吗(当输入图片宽高比与训练图差别较大时)? 我刚接触ocr没多久,crnn中不是说可以只统一高度,宽度任意吗? 您这个网络支持这种输入方式吗?
感觉后面补0效果更好
应该是按你这样操作,先同比例缩放至高度为32,然后再放缩宽度!
请问一个问题,您第二步resize操作的时候,直接强行放缩宽度值,不会使图片中的字符变形严重吗(当输入图片宽高比与训练图差别较大时)? 我刚接触ocr没多久,crnn中不是说可以只统一高度,宽度任意吗? 您这个网络支持这种输入方式吗?
感觉后面补0效果更好 如果测试图宽度比训练图宽度小可以直接填充补白,但是如果测试图宽度比训练图长好多时,直接压缩形变比较严重吧? 不是可以支持只固定图像高度吗? 请问您知道如何操作吗?
@chen1234520 测试时候一般都是任意宽度的,保证cnn出来的特征高是1就行,由于后面是lstm这种rnn结构,宽度的不同其实只是送到lstm的序列时间步不同
@chen1234520 保持宽高比就行,高度到32,宽度按照一样的比例进行 padding是为了好计算,这是和最长的保持一样就行
@chen1234520 保持宽高比就行,高度到32,宽度按照一样的比例进行 padding是为了好计算,这是和最长的保持一样就行
宽高比是训练数据的宽高比吗?我训练时尺寸32032,但是实际测试时有些图片宽度过长,例如64032。这中情况,输入时图片需要resize到多少?是强行压缩到32032,还是网络直接可以接受64032的输入尺寸?
@chen1234520 cnn对于输入大小是没有限制的,这里用32,主要是为了lstm的使用,一个词一个向量(如果不用32也可以,不过得加些处理,例如add或者concat)。lstm对于长度是没有限制的,每次输入一个特征向量就行。 这里一个batch的图片保持宽高一样,是为了好计算。 所以,你这里处理的时候,比如pytroch dataloader有个collate函数,你可以在那里处理,计算最长的(假定之前之前按比例缩放高度为32了),对于不够的padding补0,剩下的应该就可以直接送入网络就行了。。
@chen1234520 cnn对于输入大小是没有限制的,这里用32,主要是为了lstm的使用,一个词一个向量(如果不用32也可以,不过得加些处理,例如add或者concat)。lstm对于长度是没有限制的,每次输入一个特征向量就行。 这里一个batch的图片保持宽高一样,是为了好计算。 所以,你这里处理的时候,比如pytroch dataloader有个collate函数,你可以在那里处理,计算最长的(假定之前之前按比例缩放高度为32了),对于不够的padding补0,剩下的应该就可以直接送入网络就行了。。
您这里指的是训练过程吗? 那测试过程呢?假使训练阶段我的训练图片,宽高比为10:1,320×32。那么再测试时,一张例如1000×64尺寸的图像,是仅需要将高度缩放到32,即500*32作为输入,还是需要强行改变宽高比缩放到320×32?
@chen1234520 如果测试中batch > 1的话,也是做一样的操作,如果一张图片,直接500 * 32就行
@chen1234520 如果测试中batch > 1的话,也是做一样的操作,如果一张图片,直接500 * 32就行
500 * 32之后 宽度再 500 * (160 / 280)吧?
@CabbageWust 还需要这个吗,原因呢。。
@CabbageWust 还需要这个吗,原因呢。。
因为训练的时候是这样处理的,这个issu前面不是在说这个吗。
看前面的作者回复:
“应该是按你这样操作,先同比例缩放至高度为32,然后再放缩宽度!”