训练文本识别模型报错,版本2.8.0,2.9.0,2.6.0 #14515
-
由于图像识别里对方框和打对勾的方框识别一直有问题,所以想在 PP-OCRV3的版本上训练一下,能识别出来方框,标记成box和checked box;我选用的cpu训练,样本图片1个,样本检测点12个; 文本检测的训练通过了,在做文本识别的训练的时候一直没有响应,日志在下面这里不动了 过了很长时间报错如下;递推死循环调用,不知道大家有没有做过类似的文本识别训练,一直没有训练通过;麻烦大家帮忙看下 Exception in thread Thread-1 (_thread_loop): During handling of the above exception, another exception occurred: Traceback (most recent call last): |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
这个得debug一下,可以提供一下数据集吗 |
Beta Was this translation helpful? Give feedback.
-
您好,非常感谢收到您的回复;刚检查了一下 RecAug 配置已经是空值了,如果改为None 为报错,无法启动模型 ;
另外我的样本里只有1个txt 文件; 是不是有文件丢失?
——————————————————————————————
Chen YiGeng/陈一赓
Asiainfo Overseas Business Unit
AsiaInfo Holdings, Inc.
…-----------------------------------------------------------------
Email: ***@***.***
-----------------------------------------------------------------
发件人: Wang Xin ***@***.***>
答复: PaddlePaddle/PaddleOCR ***@***.***>
日期: 2025年1月8日 星期三 11:00
收件人: PaddlePaddle/PaddleOCR ***@***.***>
抄送: chenyigeng ***@***.***>, Author ***@***.***>
主题: Re: [PaddlePaddle/PaddleOCR] 训练文本识别模型报错,版本2.8.0,2.9.0,2.6.0 (Discussion #14515)
根据您提供的错误日志和描述,训练文本识别模型时出现了递归深度超限的错误(RecursionError: maximum recursion depth exceeded)。以下是可能的原因以及解决方案:
问题分析
数据增强问题
错误日志中提到的问题来源于 tia_distort 数据增强方法。具体是:
文件路径:ppocr/data/imaug/text_image_aug/warp_mls.py
方法:warp_mls.py 的 generate 和 calc_delta 函数中似乎出现了递归调用问题。
这个数据增强是在处理图像的形变时(如扭曲变换 tia_distort)导致递归深度超限。
数据集或样本问题
数据集中可能存在异常样本,例如:
图像文件路径无效(文件不存在或路径错误)。
图像文件损坏或格式不支持。
标签文件(如 train.txt 或 val.txt)中的标注格式有误。
版本兼容性问题
您提到使用的是 PaddleOCR 2.8.0、2.9.0 和 2.6.0,可能某些版本在数据增强或数据加载部分存在潜在的 bug。
递归调用本身的限制
Python 的默认递归深度限制通常为 1000,深度超过这个值会触发 RecursionError。
解决方案
1. 检查数据集
验证图像路径和完整性:
确保 train.txt 和 val.txt 中的所有图像路径都是有效的。
使用以下代码检查是否有无效图像:
o import os
o from PIL import Image
o
o with open("train.txt", "r") as f:
o lines = f.readlines()
o
o for line in lines:
o img_path = line.split("\t")[0] # 根据实际格式调整索引
o if not os.path.exists(img_path):
o print(f"Missing file: {img_path}")
o else:
o try:
o img = Image.open(img_path)
o img.verify()
o except Exception as e:
print(f"Corrupted file: {img_path}, Error: {e}")
检查标签格式:
确保标签文件的格式符合 PaddleOCR 的要求(一般是 image_path \t label),并没有多余的空行或其他干扰字符。
2. 修改数据增强配置
禁用或替换问题增强方法:
在配置文件(如 configs/rec/rec_svtrnet_bn_en.yml)中,找到数据增强部分,禁用 tia_distort 或相关增强。
如果使用的增强是 RecAug,可以将其替换为其他增强方法或直接设置为 None:
RecAug: None
调整 tia_distort 的参数:
如果必须使用 tia_distort,可以减少随机参数范围(如 random.randint(3, 6) 改为 random.randint(3, 4)):
修改路径:ppocr/data/imaug/rec_img_aug.py。
img = tia_distort(img, random.randint(3, 4)) # 减少范围
3. 提高递归深度限制
如果问题出在递归深度,可以临时提高系统的递归深度限制(非根本性解决方案):
· import sys
sys.setrecursionlimit(2000) # 提高递归深度限制
注意:
这种方法仅适用于小规模数据集或临时测试,可能会导致内存溢出。
4. 使用最新版本的 PaddleOCR
升级 PaddleOCR 和 PaddlePaddle:
如果您使用的版本存在已知问题,建议升级到最新的稳定版本(PaddleOCR 版本与 PaddlePaddle 版本需要匹配)。
o pip install paddlepaddle==2.5.0
pip install paddleocr==2.6.1
检查相关 Issue 或 Discussions:
根据类似问题的讨论,可能存在补丁或修复:
相关讨论链接。
5. 验证预训练模型兼容性
错误日志中有提示:
· The shape of model params head.fc.weight [192, 168] not matched with loaded params head.fc.weight [192, 37]!
这表明预训练模型的输出维度与当前训练配置不匹配。解决方法:
检查配置文件中 character_dict_path 是否与预训练模型一致。
如果不一致,重新生成字符字典或选择新的预训练模型。
6. 使用 Debug 模式检查数据加载
在代码中插入调试日志,检查数据加载的过程:
· print(f"Data item: {data}")
print(f"Transformed data: {outs}")
总结
按照以下步骤依次排查:
检查数据集的完整性和格式。
修改配置文件以禁用 tia_distort 或调整其参数。
临时提高递归深度限制以确认问题。
升级到最新版本的 PaddleOCR 和 PaddlePaddle。
验证预训练模型和配置文件的兼容性。
如果问题仍未解决,可以参考 GitHub Discussions 中的其他类似问题,或者提 issue 上传您的数据和配置文件供开发团队排查。
Response generated by feifei-bot | chatgpt-4o-latest
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
这个得debug一下,可以提供一下数据集吗