PaddleOCR多语言模型训练教程--泰语 训练自己的其他语言数据集(语料,词典,字体,背景图片,文本图片生成器工具)

PaddleOCR 多语言模型训练教程

本教程属于训练其他语言的训练教程,中文英文已经拥有他自己的模型,但是其他语言没有,我实习的内容是大模型性能提升,负责的是OCR部分,需要训练没有发布的语言模型

数据准备

  • 解释了如何使用真实数据和合成数据来准备大量的训练图像。
  • 详细介绍了使用 PPOCRLabel 进行标注,以及如何合成数据(词典、语料库、字体、背景图片)。

模型训练与评估

  • 提供了一个典型的配置文件的示例,展示了如何通过配置文件进行模型训练。
  • 包括了单 GPU 和多 GPU 训练方式的说明,并提到了如何评估模型的性能。

推理

  • 说明了如何使用训练好的模型进行推理。

合成数据和相关资源链接

这些资源可以帮助你更深入地理解和实现自定义语言模型的训练和使用。

PaddleOCR 提供了 80 种语言模型,但仍然无法覆盖全部。发布的模型可以通过使用自己的识别数据进行微调来达到更好的效果。如果您有以下问题:

  • 测试原始识别模型时效果不佳
  • 缺乏数据,对训练过程感到困惑
  • 不知道如何替换或修改词典

本教程将帮助您学习如何合成识别图像来训练自定义识别模型,具体包括:

  • 语料合成可以提高某一类别的识别结果,以泰语为例
  • 使用您自己的词典和语料来训练模型,如纯数字模型、多语言模型等。
  • 分步训练指南,包括如何通过 .yml 配置文件配置训练参数
  • 将训练好的模型导出到推理模型

环境准备

# install paddlepaddle and paddleocr whl package
# !pip install -U pip
!pip install paddlepaddle paddleocr
!git clone https://github.com/PaddlePaddle/PaddleOCR

安装第三方要求

!cd PaddleOCR && pip install -r requirements.txt
!pip install -r ./text_renderer/requirements.txt

快速使用

首先我们展示 paddleocr WHL 包的使用方法。如果您想了解如何使用 WHL 包,请查看本教程

!paddleocr --image_dir /your/image/path --lang=en

数据准备

训练一个识别模型总是需要大量的识别图像,比如 0.1 到 100 万张。除了现有的数据集之外,一般很难获得这么多的真实数据,因此合成数据往往在扩充数据量方面起着重要作用。另一方面,如果只有合成数据,模型的泛化能力可能不够强。在实际训练过程中,按一定比例采样真实数据和合成数据往往是更好的方法。

真实数据标注

我们推荐使用 PPOCRLabel 作为 OCR 任务的标注工具,因为它内置了 PP-OCR 模型,可以自动检测和重新识别数据,效率可提高 50% 以上。

更多信息请阅读 PPOCRLabel 的 README

请添加图片描述

合成数据

数据合成工具:

合成识别图像需要五个元素:词典、语料、字体、背景图片、文本图片生成器工具(推荐text_renderer,适用于多种语言),然后通过间距、横竖、弯曲等配置来控制最终的效果,使合成图像能够近似真实图像。

接下来我们依次介绍如何获取这些元素。

词典和语料库

词典对应模型需要识别的文本信息,也就是说需要识别的文本都应该在词典中出现。语料库是生成文本图片所需要的单词和句子,合成工具会根据语料库来合成文本图片。

PaddleOCR 中的词典文件和语料文件都是 .txt 格式。

例如部分泰语词典如下:

ก
ข
ค
ฆ
ง
จ
ฉ
ช
ซ
ฌ
ญ
ฎ
ฏ

部分泰语语料库如下:

โต้ทีดีอาร์ไอ
แต่คำตอบที่ว่า
ทุกกรณีปัญหา
นักรักชาติ
“นโยบายสามหก”
Islington
อะซีม

获取词典和语料库有三种方式

  • 从 PaddleOCR github 仓库下载

PaddleOCR 在 github 仓库 中发布了一系列词典,用于训练 PP-OCR 多语言模型(训练好的模型可以在 此处 找到)。

  • 自定义词典或语料库

以上词典往往用于通用场景,而其他场景需要的字符是特定的,或者通用词典中的字符不一定全部需要,因此可以根据场景自定义词典的内容。比如你只想识别数字,你的词典就只包含0-9。

如果你想有针对性地提高某些效果,比如空格、特殊符号、标点符号等,可以在构建语料库时多添加这些信息

  • 通过语料库获取词典

第三种方法是基于语料库准备词典。这种方法适合先准备语料库内容,通过算法遍历语料库内容,生成包含语料库中所有单词的词典。

字体和背景

当模型识别一些没见过的字体形式(比如点阵字体、数码管字体)时,可能会出现不好的效果,所以需要合成类似字体的数据。

你可以在字体网站找到不同类型的字体。

合成数据的背景应该与真实数据相似。如果你针对特定场景训练模型,你可以直接从真实数据中抓取背景图像。例如,在PCB场景中,图像都是绿色的,这就需要一张类似的绿色图像作为背景。

如果场景中的背景不均匀,你也可以使用ImageNet中的数据作为背景图像

请添加图片描述

开始合成

使用text renderer的方法很简单,只需要指定fonts listchars_file到你的字体和字典的路径即可

将准备好的语料库、词典、背景图放在text_renderer/data目录下,并修改默认配置,以英文数据为例。

  1. 准备thai_movies.txt中列出的n个语料库
  2. 如果要增强数据丰富度,可以准备一些背景图放在data/bg路径下,本例提供了5张imagenet。
  3. 修改text_renderer/parse_args.py中的默认参数:--chars_file--fonts_list--corpus_dir--corpus_mode

启动数据合成脚本

!cd text_renderer && python main.py --num_img=10

另外,可用于训练 PaddleOCR 的真实信息存储在 output/default/label.txt

default/00000000.jpg	(พลังน้ำ)
default/00000001.jpg	โต้ทีดีอาร์ไอ
default/00000002.jpg	แต่คำตอบที่ว่า
default/00000003.jpg	ทุกกรณีปัญหา
default/00000004.jpg	นักรักชาติ
default/00000005.jpg	“นโยบายสามหก”
default/00000006.jpg	และคนมีเหตุมีผล
...

泰语数据

由于合成过程较长,提供已合成的泰语数据集。

点击链接将合成泰语数据保存到您的 Google Drive,然后从您的 Drive 中打开文件,将 th_img.tar 解压到 PaddleOCR 文件夹。

PaddleOCR 要求的标注格式是使用 \t 来分割图片路径和图片标签,如果使用其他方式分割,会造成训练误差

" Image file name                          Image annotation "
th_img/0/ILSVRC2012_val_00019591_5.jpg  ทุกกรณีปัญหา
th_img/0/ILSVRC2012_val_00010000_5.jpg  ทุกกรณีปัญหา
th_img/0/ILSVRC2012_val_00012707_5.jpg  ทุกกรณีปัญหา
th_img/0/ILSVRC2012_val_00017283_5.jpg  ทุกกรณีปัญหา
th_img/0/ILSVRC2012_val_00012583_5.jpg  ทุกกรณีปัญหา
th_img/0/ILSVRC2012_val_00015817_6.jpg  นักรักชาติ
th_img/0/ILSVRC2012_val_00018484_6.jpg  นักรักชาติ
th_img/0/ILSVRC2012_val_00010596_6.jpg  นักรักชาติ
th_img/0/ILSVRC2012_val_00013689_6.jpg  นักรักชาติ
th_img/0/ILSVRC2012_val_00013117_6.jpg  นักรักชาติ

...

当您使用自己的数据进行训练时,请参考以下内容来组织文件结构。

  • 训练集

建议将训练图像放在同一个文件夹中,并使用一个txt文件(例如rec_gt_train.txt)存储图像路径和标签。rec_gt_train.txt的格式如上。txt文件的内容如下:

最终的训练集应该具有以下文件结构:

|-train_data
|-rec
|- rec_gt_train.txt
|- train
|- word_001.png
|- word_002.jpg
|- word_003.jpg
| ...
  • 测试集

与训练集类似,测试集也需要提供一个包含所有图像的文件夹(test)和一个rec_gt_test.txt。测试集的结构如下:

|-train_data
|-rec
|-ic15_data
|- rec_gt_test.txt
|- test
|- word_001.jpg
|- word_002.jpg
|- word_003.jpg
| ...

模型训练与评估

PaddleOCR 将训练参数以配置文件的形式传入(包括模型结构、训练配置等),下面是一个典型的配置文件形式。

我们对下面一些重要的参数进行了注释,更多配置可以在 /config/ 中找到

如果需要添加新的配置文件,请参考下面的示例修改 character_dict_pathdataset

Global:
  debug: false
  use_gpu: true
  epoch_num: 2
  log_smooth_window: 20
  print_batch_step: 10
  save_model_dir: ./output/thai
  save_epoch_step: 3
  eval_batch_step: [0, 2000]
  cal_metric_during_train: true
  pretrained_model:
  checkpoints:
  save_inference_dir:
  use_visualdl: false
  infer_img: doc/imgs_words/ch/word_1.jpg
  character_dict_path: train_data/th_img/th_dict.txt
  max_text_length: &max_text_length 25
  infer_mode: false
  use_space_char: true
  distributed: true
  save_res_path: ./output/rec/predicts_ppocrv3_thai.txt


Optimizer:
  name: Adam
  beta1: 0.9
  beta2: 0.999
  lr:
    name: Cosine
    learning_rate: 0.001
    warmup_epoch: 5
  regularizer:
    name: L2
    factor: 3.0e-05


Architecture:
  model_type: rec
  algorithm: SVTR_LCNet
  Transform:
  Backbone:
    name: MobileNetV1Enhance
    scale: 0.5
    last_conv_stride: [1, 2]
    last_pool_type: avg
    last_pool_kernel_size: [2, 2]
  Head:
    name: MultiHead
    head_list:
      - CTCHead:
          Neck:
            name: svtr
            dims: 64
            depth: 2
            hidden_dims: 120
            use_guide: True
          Head:
            fc_decay: 0.00001
      - SARHead:
          enc_dim: 512
          max_text_length: *max_text_length

Loss:
  name: MultiLoss
  loss_config_list:
    - CTCLoss:
    - SARLoss:

PostProcess:  
  name: CTCLabelDecode

Metric:
  name: RecMetric
  main_indicator: acc
  ignore_space: False

Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/
    ext_op_transform_idx: 1
    label_file_list:
    - ./train_data/th_img/train_list.txt
    transforms:
    - DecodeImage:
        img_mode: BGR
        channel_first: false
    - RecConAug:
        prob: 0.5
        ext_data_num: 2
        image_shape: [48, 320, 3]
    - RecAug:
    - MultiLabelEncode:
    - RecResizeImg:
        image_shape: [3, 48, 320]
    - KeepKeys:
        keep_keys:
        - image
        - label_ctc
        - label_sar
        - length
        - valid_ratio
  loader:
    shuffle: true
    batch_size_per_card: 128
    drop_last: true
    num_workers: 4
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data
    label_file_list:
    - ./train_data/th_img/val_list.txt
    transforms:
    - DecodeImage:
        img_mode: BGR
        channel_first: false
    - MultiLabelEncode:
    - RecResizeImg:
        image_shape: [3, 48, 320]
    - KeepKeys:
        keep_keys:
        - image
        - label_ctc
        - label_sar
        - length
        - valid_ratio
  loader:
    shuffle: false
    drop_last: false
    batch_size_per_card: 128
    num_workers: 4

训练

因为我们通过配置文件指定了很多参数,所以启动模型训练任务的命令很简单,只需要通过-c指定配置文件的路径即可

!python3 tools/train.py -c configs/rec/PP-OCRv3/multi_language/latin_PP-OCRv3_rec.yml

PaddleOCR 提供了单GPU和多GPU两种训练方式。当数据量较大时,我们建议使用多GPU模式,命令如下:

#通过--gpus指定GPU数量
python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.pretrained_model=en_PP-OCRv3_rec_train/best_accuracy

这里由于平台上不是每个人都可以使用多GPU模式,所以我们还是使用单CPU来启动基础训练。

由于我们提供的数据集大小不足以训练出好的泰语模型,我们建议您合成或添加更多数据。

!python3 tools/train.py -c train_data/th_img/thai_PP-OCRv3_rec.yml -o Global.use_gpu=False

如果你熟悉持续训练、使用新主干进行训练、混合精度训练、使用知识蒸馏进行训练,你可以在本文档中了解更多用法

评估

训练时的模型参数默认保存在Global.save_model_dir目录下,评估指标时需要设置Global.checkpoints指向保存的参数文件,评估数据集可以通过修改configs/rec/PP-OCRv3/{your/config/file}.yml文件中的Eval.dataset.label_file_list字段来设置。

!python3 tools/eval.py -c train_data/th_img/thai_PP-OCRv3_rec.yml -o Global.checkpoints=./output/thai/best_accuracy

推理

!python3 tools/infer_rec.py -c train_data/th_img/thai_PP-OCRv3_rec.yml -o Global.checkpoints=./output/thai/best_accuracy  Global.infer_img=./train_data/th_img/0/ILSVRC2012_val_00019591_5.jpg
<think>嗯,我需要向用户介绍PaddleOCR的PPOCRLabel工具。首先,我应该确认PPOCRLabel是什么,它的主要功能和用途。根据之前的知识,PPOCRLabel是一个用于OCR数据标注的图形化工具,帮助用户快速标注图像中的文本区域和内容,支持PaddleOCR模型训练数据准备。 接下来,我需要整理使用步骤。可能包括安装方法,界面介绍,基本操作流程,比如打开图片,标注文本框,识别文本,导出数据等。用户可能关心如何安装,如何具体操作每个步骤,以及常见问题如何处理。 要确保结构清晰,分步骤说明。可能需要分为几个部分,比如安装指南、界面功能、标注流程、注意事项等。同时,要使用中文,符合用户的要求,避免使用专业术语过多,保持易懂。 还要注意用户可能的疑问点,比如是否需要安装PaddleOCR本身,或者PPOCRLabel是否依赖其他库。安装步骤是否需要使用pip或者conda?是否支持不同的操作系统,比如Windows、Linux、macOS? 另外,标注后的数据如何导出,支持的格式是什么?是否可以直接用于PaddleOCR训练?可能需要说明导出的文件结构,比如标签文件的格式,如图片路径、文本框坐标、识别文本等。 可能还需要提到高级功能,比如自动标注、手动修正、快捷键的使用,这些能提高用户的标注效率。例如,PPOCRLabel可能有基于现有模型的自动检测和识别功能,减少手动标注的工作量。 另外,注意事项部分应该包括常见问题,比如环境配置问题,依赖项冲突,或者标注时的技巧,比如如何调整文本框的顶点,如何修改识别结果等。 最后,需要确保回答真实可靠,参考官方文档或可靠的资料,避免错误信息。如果有不确定的地方,可能需要查阅PPOCRLabel的GitHub仓库或官方文档确认细节。 现在将这些思路组织成结构化的回答,分步骤介绍,确保每个部分都清晰易懂。使用中文,避免Markdown格式,按照用户的要求,分点说明,但不需要编号,用自然的中文分段。</think>PaddleOCR的PPOCRLabel是一款专为OCR数据标注设计的图形化工具,可高效完成文本检测与识别数据的标注任务。以下是其核心使用步骤和要点: --- ### **一、安装指南** 1. **环境要求** - Python 3.6+ - 推荐使用Anaconda管理环境 - 操作系统:Windows/Linux/macOS 2. **安装命令** ```bash pip install PPOCRLabel # 自动安装PaddlePaddle等依赖 ``` --- ### **二、快速启动** - **命令行启动**: ```bash PPOCRLabel # 默认语言为英文 PPOCRLabel --lang ch # 切换为中文界面 ``` --- ### **三、核心功能与操作流程** 1. **导入图片** - 点击菜单栏 `文件` → `打开目录`,选择待标注图片文件夹。 - 支持格式:JPEG、PNG等常见图片类型。 2. **自动标注(高效技巧)** - 点击 `自动标注` 按钮,工具会调用内置模型预测文本位置和内容。 - 标注结果以绿色框显示,用户仅需核对修正,节省80%以上时间。 3. **手动标注(精细调整)** - **绘制文本框**:点击工具栏“框选”图标,鼠标拖拽绘制矩形框。 - **修改文本**:双击文本框直接编辑识别结果。 - **调整顶点**:拖动文本框四角或边线,精调区域位置。 4. **标签保存** - 标注结果自动保存到图片同名`.txt`文件(格式:`坐标, 文本内容`)。 - 例如:`[[10,20],[100,20],[100,50],[10,50]], "PaddleOCR"` 5. **导出训练数据** - 点击菜单栏 `文件` → `导出标记结果`,生成PaddleOCR支持的训练格式: - `Label.txt`:包含所有图片路径和标注信息。 - `crop_img/`:可选导出裁剪的文本区域小图(用于识别模型训练)。 --- ### **四、高级技巧与注意事项** 1. **快捷键提升效率** - `W`:触发框选工具 - `Ctrl + Z`:撤销操作 - `D`:切换下一张图片 - `A`:切换上一张图片 2. **模型切换策略** - 若自动标注效果不佳,可通过菜单 `工具` → `更换模型` 选择更适配的预训练模型。 3. **常见问题处理** - **标注框偏移**:放大图片(鼠标滚轮)后精细调整顶点。 - **文本漏标**:手动补标后点击 `重新识别` 补全内容。 - **依赖冲突**:建议使用官方推荐Python版本,避免第三方库版本不匹配。 --- ### **五、典型应用场景** - **学术研究**:快速构建自定义OCR数据集(如古籍、特殊字体)。 - **工业落地**:标注生产线铭牌、仪表盘数字等垂直场景数据。 - **模型优化**:通过增量标注提升现有模型在特定领域的准确率。 通过合理利用自动标注与手动修正的组合策略,PPOCRLabel可使标注效率提升3-5倍,是OCR数据生产的强力工具。建议定期备份标注数据,并参考官方文档更新工具版本以获取最新功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hsling松子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值