PaddleOCR icon indicating copy to clipboard operation
PaddleOCR copied to clipboard

一定报这个错RecursionError: maximum recursion depth exceeded while calling a Python object

Open VieteChen opened this issue 2 years ago • 11 comments

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

  • 系统环境/System Environment:windows10
  • 版本号/Version:Paddle:1.0.1 PaddleOCR: 2.6.0.1问题相关组件/Related components:
  • 运行指令/Command Code:python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml
  • 完整报错/Complete Error Message: [2022/09/09 21:20:44] ppocr ERROR: When parsing line crop_img/a6e5c1f33de64cb58577015728712e54_1.jpg 汁 , error happened with msg: Traceback (most recent call last): File "D:\alpha\PaddleOCR\ppocr\data\simple_dataset.py", line 137, in getitem outs = transform(data, self.ops) File "D:\alpha\PaddleOCR\ppocr\data\imaug_init_.py", line 53, in transform data = op(data) File "D:\alpha\PaddleOCR\ppocr\data\imaug\rec_img_aug.py", line 47, in call img = tia_distort(img, random.randint(3, 6)) File "D:\alpha\PaddleOCR\ppocr\data\imaug\text_image_aug\augment.py", line 60, in tia_distort dst = trans.generate() File "D:\alpha\PaddleOCR\ppocr\data\imaug\text_image_aug\warp_mls.py", line 42, in generate return self.gen_img() File "D:\alpha\PaddleOCR\ppocr\data\imaug\text_image_aug\warp_mls.py", line 148, in gen_img nx = np.clip(nx, 0, src_w - 1) File "<array_function internals>", line 6, in clip File "D:\Envs\paddle\lib\site-packages\numpy\core\fromnumeric.py", line 2097, in clip return _wrapfunc(a, 'clip', a_min, a_max, out=out, **kwargs) File "D:\Envs\paddle\lib\site-packages\numpy\core\fromnumeric.py", line 58, in _wrapfunc return bound(*args, **kwds) File "D:\Envs\paddle\lib\site-packages\numpy\core_methods.py", line 115, in _clip if _clip_dep_is_scalar_nan(min): File "D:\Envs\paddle\lib\site-packages\numpy\core_methods.py", line 75, in _clip_dep_is_scalar_nan if ndim(a) != 0: File "<array_function internals>", line 6, in ndim File "D:\Envs\paddle\lib\site-packages\numpy\core\fromnumeric.py", line 3108, in ndim return a.ndim RecursionError: maximum recursion depth exceeded while calling a Python object

已确定标签用\t分隔用\n分行 train_str[:100] 'crop_img/c03573d72bc14ced94bda0a77add1e1a_0.jpg\t炸\ncrop_img/c03573d72bc14ced94bda0a77add1e1a_1.jpg\t脂\n'

通过data/simple_dataset.py debug,outs一直是None,请问多出来的\r是否有影响,我强行把\r删除依然报错 data_line = 'crop_img/cba6d5a442f54569882b4c9273cfcd5d_1.jpg\t仁\r\n' file_name = 'crop_img/cba6d5a442f54569882b4c9273cfcd5d_1.jpg' label = '仁\r' image

VieteChen avatar Sep 09 '22 13:09 VieteChen

提供一下你的label文件看看,可能是换行问题或者部分分隔符不是\t,或者使用这个函数看一下数据读取是否正确 https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/tools/train.py#L203

andyjiang1116 avatar Sep 13 '22 03:09 andyjiang1116

请问你最后是怎么解决的!

ZzyChris97 avatar Sep 15 '22 12:09 ZzyChris97

label标签格式要统一,如下

图像路径\t图像标签\n
图像路径\t图像标签\n

可以对label进行检查,看是不是有不合法的

andyjiang1116 avatar Sep 16 '22 08:09 andyjiang1116

label标签格式要统一,如下

图像路径\t图像标签\n
图像路径\t图像标签\n

可以对label进行检查,看是不是有不合法的

已经找到原因,max_text_length不能改,一改就报这个错,不知道这算不算Bug

VieteChen avatar Sep 16 '22 10:09 VieteChen

应该不会的,这个参数是支持修改的,默认最大长度是25,超过的会自动过滤

andyjiang1116 avatar Sep 19 '22 07:09 andyjiang1116

另外,RecConAug数据增强里面也涉及max_text_length这个参数,注意同步修改, 或者不使用该数据增强方式 https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/ppocr/data/imaug/rec_img_aug.py#L133

andyjiang1116 avatar Sep 19 '22 07:09 andyjiang1116

另外,RecConAug数据增强里面也涉及max_text_length这个参数,注意同步修改, 或者不使用该数据增强方式 https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/ppocr/data/imaug/rec_img_aug.py#L133

最新版2.6分支代码已经暴露了该参数

andyjiang1116 avatar Sep 19 '22 08:09 andyjiang1116

应该不会的,这个参数是支持修改的,默认最大长度是25,超过的会自动过滤

label标签格式要统一,如下

图像路径\t图像标签\n
图像路径\t图像标签\n

可以对label进行检查,看是不是有不合法的

已经找到原因,max_text_length不能改,一改就报这个错,不知道这算不算Bug

我是用来做四位验证码识别,把max_text_length设置成了4,然后就报了这个错误,后来我把max_text_length扩大成了6,就没有再出现这个问题了

ZzyChris97 avatar Sep 19 '22 08:09 ZzyChris97

这是因为v3使用了一个attention 分支,编码期间需要添加开始和结束字符,所以有效字符长度>= max_text_length-1就会过滤,你这里是4位,所以要设置成6

andyjiang1116 avatar Sep 19 '22 08:09 andyjiang1116

这是因为v3使用了一个attention 分支,编码期间需要添加开始和结束字符,所以有效字符长度>= max_text_length-1就会过滤,你这里是4位,所以要设置成6

了解了!当时看到有人说max_text_length的值,我就猜是不是因为有额外字符的原因,就想着扩大试试,看来果然如此

ZzyChris97 avatar Sep 19 '22 09:09 ZzyChris97

嗯嗯,因为正常来说max_text_length这个参数默认是25,会满足大部分文本场景,如果需要适配自己的文本场景,看情况修改即可

andyjiang1116 avatar Sep 19 '22 09:09 andyjiang1116