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

使用SVRT识别模型进行识别时,真实图片的文本长度超过了25,但是在配置文件max_text_length设置的是25,这个时候怎么办 #7500

Closed
wzgwy opened this issue Sep 6, 2022 · 21 comments
Assignees

Comments

@wzgwy
Copy link

wzgwy commented Sep 6, 2022

请提供下述完整信息以便快速定位问题/Please provide the following information to quickly locate the problem

  • 系统环境/System Environment:
  • 版本号/Version:Paddle: PaddleOCR: 问题相关组件/Related components:
  • 运行指令/Command Code:
  • 完整报错/Complete Error Message:
@BeyondYourself
Copy link
Contributor

可以修改文本长度的

@wzgwy
Copy link
Author

wzgwy commented Sep 7, 2022

请问修改了文本长度的话预训练模型还能用吗?还是说在测试的时候修改文本长度即可

@BeyondYourself
Copy link
Contributor

你不是在推理的时候设置的么这个参数

@wzgwy
Copy link
Author

wzgwy commented Sep 7, 2022

那个在funtuning的时候配置文件也有这个参数,这个参数会有影响吗?

@Topdu
Copy link
Collaborator

Topdu commented Sep 9, 2022

SVTR借鉴Vision Transformer结构,使用了绝对位置编码,无法应对变长的输入,只能识别25个字符以内的文本。因需要统计训练集和测试集样本的宽高比,比如,在中文数据集中发现存在很多宽高比10:1的样本,字符数超过了25,如果直接将这些样本resize到32 100,会造成文本图像的失真,因此我们将图像保留宽高比,高度设为32,如果宽度小于320,这padding,如果宽度大于320,则压缩为320,这样尽可能保留了文本图像的原始信息。

存在问题
由于SVTR使用了绝对位置编码,无法应对变长的输入,一个解决方案即为优化input_size:统计宽高比,例如:1、[3, 32, 100]适应宽高比多数为4:1且单个样本字符数不超过20的数据集;2、如果数据集中存在很多宽高比为10:1样本,则可以将[3, 32, 100]修改为[3, 32, 200]或者[3, 32, 320],也可以参考SVTR中文配置。

如果文本图像中字符个数不确定,但是有的超过了25个,建议采用可以变长输入的模型,比如PP-OCRv3,可以根据图像高宽比设置输入,也可以识别超长的文本。

如果大部分图像都超过了25个字符,建议训练时根据实际情况修改:max_text_length,并将input_size设置为宽高比更大的比例

@yulm-1
Copy link

yulm-1 commented Sep 28, 2022

SVTR借鉴Vision Transformer结构,使用了绝对位置编码,无法应对变长的输入,只能识别25个字符以内的文本。因需要统计训练集和测试集样本的宽高比,比如,在中文数据集中发现存在很多宽高比10:1的样本,字符数超过了25,如果直接将这些样本resize到32 100,会造成文本图像的失真,因此我们将图像保留宽高比,高度设为32,如果宽度小于320,这padding,如果宽度大于320,则压缩为320,这样尽可能保留了文本图像的原始信息。

存在问题 由于SVTR使用了绝对位置编码,无法应对变长的输入,一个解决方案即为优化input_size:统计宽高比,例如:1、[3, 32, 100]适应宽高比多数为4:1且单个样本字符数不超过20的数据集;2、如果数据集中存在很多宽高比为10:1样本,则可以将[3, 32, 100]修改为[3, 32, 200]或者[3, 32, 320],也可以参考SVTR中文配置。

如果文本图像中字符个数不确定,但是有的超过了25个,建议采用可以变长输入的模型,比如PP-OCRv3,可以根据图像高宽比设置输入,也可以识别超长的文本。

如果大部分图像都超过了25个字符,建议训练时根据实际情况修改:max_text_length,并将input_size设置为宽高比更大的比例

您好,我想请问一下竖向图片SVTR是怎么对它进行resize的呢?

@Topdu
Copy link
Collaborator

Topdu commented Sep 29, 2022

您好,我想请问一下竖向图片SVTR是怎么对它进行resize的呢?

竖向文本进行旋转后再进行resize

@yulm-1
Copy link

yulm-1 commented Sep 29, 2022

您好,我想请问一下竖向图片SVTR是怎么对它进行resize的呢?

竖向文本进行旋转后再进行resize

我使用Benchmarking Chinese中提供的数据集(格式.lmdb)进行训练,发现可视化结果中竖向文本都被识别为一个字了,代码本身是不包含旋转的代码吗?需要先处理数据集?

@Topdu
Copy link
Collaborator

Topdu commented Sep 29, 2022

我使用Benchmarking Chinese中提供的数据集(格式.lmdb)进行训练,发现可视化结果中竖向文本都被识别为一个字了,代码本身是不包含旋转的代码吗?需要先处理数据集?

SVTR没有对竖向文本做处理,需要自己添加。具体的可以在,图像读取后进行处理,例如,当图片的高大于1.5倍的宽,可以认为是竖向文本,使用np.rot90(img)即可完成旋转

@yulm-1
Copy link

yulm-1 commented Sep 29, 2022

您好,我想请问一下竖向图片SVTR是怎么对它进行resize的呢?

竖向文本进行旋转后再进行resize

还有想问您,训练时的分布式训练使用多张卡训练,是将数据集分成不同的四份分别进行训练,然后每一轮训练结束后进行信息交流吗?还是将同一数据集分别训练四次,每一轮训练结束后进行信息交流?又或者是怎样的呢?

分布式训练需要对轮数,学习率或者其他参数进行怎样的修改?

@Topdu
Copy link
Collaborator

Topdu commented Sep 29, 2022

然后每一轮训练结束后进行信息交流吗?还是将同一数据集分别训练四次,每一轮训练结束后进行信息交流?又或者是怎样的呢?

分布式训练不需要特殊操作,按照https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/distributed_training.md 的说明启动代码即可。

分布式训练需要对轮数,学习率或者其他参数进行怎样的修改?

svtr的中文模型配置是默认4卡gpu训练,如果改变gpu个数或者batchsize,学习率需要和 总batchsize(gpu num * batchsize)同比例缩放。其他参数不变

@yulm-1
Copy link

yulm-1 commented Sep 29, 2022

分布式训练不需要特殊操作,按照https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/distributed_training.md 的说明启动代码即可。

为什么我使用四个卡一起训练机器就崩了?使用2个卡训练显示时间与单卡是一样的呢?/(ㄒoㄒ)/~~我不理解这个分布式训练

@Topdu
Copy link
Collaborator

Topdu commented Sep 29, 2022

为什么我使用四个卡一起训练机器就崩了?使用2个卡训练显示时间与单卡是一样的呢?/(ㄒoㄒ)/~~我不理解这个分布式训练

可以单独提个关于多卡训练的issue,说明环境配置以及详细的报错信息

@yulm-1
Copy link

yulm-1 commented Sep 29, 2022

为什么我使用四个卡一起训练机器就崩了?使用2个卡训练显示时间与单卡是一样的呢?/(ㄒoㄒ)/~~我不理解这个分布式训练

可以单独提个关于多卡训练的issue,说明环境配置以及详细的报错信息

好,谢谢

@icecream-Tnak
Copy link

您好,SVTR论文中对于中文数据集,设置的max_length为40,但是代码中设置的是25,请问哪个为准?

@Topdu
Copy link
Collaborator

Topdu commented Oct 6, 2022

您好,SVTR论文中对于中文数据集,设置的max_length为40,但是代码中设置的是25,请问哪个为准?

请使用下载模型时配套的配置文件,configs/rec/rec_svtrnet_ch.yaml不是svtr论文的配置文件

@quix12345
Copy link

SVTR借鉴Vision Transformer结构,使用了绝对位置编码,无法应对变长的输入,只能识别25个字符以内的文本。因需要统计训练集和测试集样本的宽高比,比如,在中文数据集中发现存在很多宽高比10:1的样本,字符数超过了25,如果直接将这些样本resize到32 100,会造成文本图像的失真,因此我们将图像保留宽高比,高度设为32,如果宽度小于320,这padding,如果宽度大于320,则压缩为320,这样尽可能保留了文本图像的原始信息。

存在问题 由于SVTR使用了绝对位置编码,无法应对变长的输入,一个解决方案即为优化input_size:统计宽高比,例如:1、[3, 32, 100]适应宽高比多数为4:1且单个样本字符数不超过20的数据集;2、如果数据集中存在很多宽高比为10:1样本,则可以将[3, 32, 100]修改为[3, 32, 200]或者[3, 32, 320],也可以参考SVTR中文配置。

如果文本图像中字符个数不确定,但是有的超过了25个,建议采用可以变长输入的模型,比如PP-OCRv3,可以根据图像高宽比设置输入,也可以识别超长的文本。

如果大部分图像都超过了25个字符,建议训练时根据实际情况修改:max_text_length,并将input_size设置为宽高比更大的比例

请问大佬PP-OCRv3对SVTR的什么改进才使得其支持不定长的输入呢?看了论文好像完全没有提到这块,是不是和模型yml文件里的SARHead部分有关系?有没有相关资料可以参考学习一下的,感谢大佬时间!

@Topdu
Copy link
Collaborator

Topdu commented Oct 16, 2022

请问大佬PP-OCRv3对SVTR的什么改进才使得其支持不定长的输入呢?看了论文好像完全没有提到这块,是不是和模型yml文件里的SARHead部分有关系?有没有相关资料可以参考学习一下的,感谢大佬时间!

参考 #7555#7104 (comment)

@xuxiansheng2018
Copy link

您好,SVTR论文中对于中文数据集,设置的max_length为40,但是代码中设置的是25,请问哪个为准?

请使用下载模型时配套的配置文件,configs/rec/rec_svtrnet_ch.yaml不是svtr论文的配置文件

想问一下 SVTR论文的配置文件是在哪个目录下面 我只找到了rec_svtrnet_ch.yaml

@Topdu
Copy link
Collaborator

Topdu commented Oct 23, 2023

您好,SVTR论文中对于中文数据集,设置的max_length为40,但是代码中设置的是25,请问哪个为准?

请使用下载模型时配套的配置文件,configs/rec/rec_svtrnet_ch.yaml不是svtr论文的配置文件

想问一下 SVTR论文的配置文件是在哪个目录下面 我只找到了rec_svtrnet_ch.yaml

下载中文模型的压缩包,解压的文件夹里有中文的配置文件和模型文本

@xuxiansheng2018
Copy link

您好,SVTR论文中对于中文数据集,设置的max_length为40,但是代码中设置的是25,请问哪个为准?

请使用下载模型时配套的配置文件,configs/rec/rec_svtrnet_ch.yaml不是svtr论文的配置文件

想问一下 SVTR论文的配置文件是在哪个目录下面 我只找到了rec_svtrnet_ch.yaml

下载中文模型的压缩包,解压的文件夹里有中文的配置文件和模型文本

你好,可以给我指明中文模型的压缩包的网页链接吗?这对我非常重要!非常感谢!

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

No branches or pull requests

8 participants