PaddleOCR 初尝试 以及模型训练时遇到的问题以及解决过程

PaddleOCR 初尝试

建议环境

  • conda 虚拟环境
  • python3.10
  • paddlepaddle-gpu==2.4
  • cuda 10.2
  • paddleocr 分支 release 2.6

ocr识别

  • 简单的文字识别 例子:

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        elapsed_time = end_time - start_time
        print(f"函数 {func.__name__} 运行时间为 {elapsed_time:.5f} 秒")
        return result

    return wrapper


@timer
def ocrFn(img_path, res_dir=None):
    ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False)
    resUrl = os.path.basename(img_path)
    file_name, file_ext = os.path.splitext(resUrl)
    resName = file_name + '.txt'
    if os.path.exists(img_path):
        ocr_res = ocr.ocr(img_path, cls=True)
        if res_dir is not None:
            with open(os.path.join(res_dir, resName), 'w') as file_test:
                for idx, res in enumerate(ocr_res):
                    file_test.write(str(res[1]) + '\n')
        return ocr_res
    else:
        raise ValueError("图片路径错误")

ser 模型和 re 模型训练

  1. 使用 paddleLabel 进行 标注数据 (系统: macos m1)
PPOCRLabel --lang ch --kie True
  1. 标注时会有关键词 说法 建议 写成固定的几个后续需要改
    header question answer other 导出标注结果后
    数据样子:
image/custom_1.jpg	[{"transcription": "xxxxxx", "points": [[170, 1215], [1048, 1186], [1056, 1317], [168, 1358]], "difficult": false, "key_cls": "TEST"}]

将上面的数据进行修改, 这里具有主观意见在里面

custom_1.jpg	[{"transcription": "xxxxxx", "points": [[170, 1215], [1048, 1186], [1056, 1317], [168, 1358]], "id": 0, "label": "header", "linking": []}]

以上面的数据为例子 简单解释一下
custom_1.jpg PPOCRLabel 导出的结果在 Label.txt 文件中,通过自己的修改我要自己给数据进行 label 标注 以及 id 编号,linking 关系绑定等,
linking关系的绑定可以去看一下paddleOCR官方是怎么说的

总得说如果自己要进行 ser 和 re 模型的训练 数据集方面博主目前还没发现有什么自动生成工具,还是需要有自己手动去修改数据
kie对的应文档
3. 特别注意

ValueError: (InvalidArgument) The shape of tensor assigned value must match the shape of target shape: [512, 3], but now shape is [513, 3]

如果在训练re模型时遇到以上错误,请检查数据集是否存在一下问题

  • 数据的标注块是否大于 3
  • 是否至少包含一对linking 关系的映射
  • linking 关系的映射是否合理,如:question -> answer 这样才对
  • 检查数据中格式是否错误

注意: 文本文件中默认请将图片路径和图片标签用 \t 分割,如用其他方式分割将造成训练报错。
报错如下

 error happened with msg: Traceback (most recent call last):
  File "/Users/xxx/xxxDesktop/xxx/ai/xxx/ppocr/data/simple_dataset.py", line 144, in __getitem__
    label = substr[1]
IndexError: list index out of range

但是这个是可以更改的,如下

# /ppocr/data/simple_dataset.py 35行 这里 \t 可以修改成其他方便分割的符号,不然会在 训练 ser 和 re 的时候都会报错
self.delimiter = dataset_config.get('delimiter', '\t')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
paddleocrPaddleOCR)是一个开源的OCR(Optical Character Recognition,光学字符识别)框架,可用于进行文本检测、文本识别和文本方向检测。下面是有关paddleocr模型训练的介绍: paddleocr采用了端到端(End-to-End)的训练方式,意味着整个OCR系统的训练可以一次性完成。训练过程主要分为两个阶段:文本检测和文本识别。 文本检测是指检测图像的文字区域,确定文字的位置和边界框。训练过程需要提供大量的带有文字标注框的训练数据集,并通过数据增强的技术对数据进行增强。数据增强可以包括旋转、缩放、裁剪和反转等操作,以增加模型的鲁棒性。使用数据集和数据增强后,可以选择合适的检测模型(如DB、EAST和PSENet等)进行训练。 文本识别是指在文本检测的基础上,进一步识别文字内容。在训练文本识别模型之前,需要对文字进行字符级别的标注,以便模型能够学习识别每个字符。在训练过程,同样需要提供大量的带有标注的训练数据集,并进行数据增强操作。然后,可以使用类似CRNN、Rosetta和STARNet等模型进行训练。 在整个训练过程,使用的损失函数包括定位损失(即文字区域的位置损失)和识别损失(即文字内容的识别损失)。这些损失函数用于指导模型的学习和优化过程。 总之,paddleocr模型训练是一个复杂的过程,需要提供大量带标注的训练数据集,并进行数据增强和选择合适的模型进行训练。通过这样的训练过程,可以得到高质量的OCR模型,用于文字区域检测和识别任务。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李看前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值