PaddleOCR模型训练

环境准备

1.PaddlePaddle 按照官网安装即可

2.PaddleOCR 下载zip压缩包

3.PPOCRLabel PaddleOCR中以包含

4.需要训练的数据图片

使用PPOCRLabel标注数据

1.打开PPOCRLabel并打开数据文件夹

1. 将下载好的PaddleOCR解压并进入解压后的目录PPOCRLabel
2. 在PPOCRLabel目录下运行cmd
3. 执行以下命令打开PPOCRLabel: PPOCRLabel --lang ch 



对图片数据进行标注修正

可选用左下角自动标注或手动进行标注,如果需要识别表格必须右侧表格标注,自动标注后如有不对的需要手动进行修正。
例如下图中的一个单元格识别成了两个数据标注框

可以手动删除多余的标注框,然后修改相应的标注框内容,确认无误后点击确认进行下一张图片的标注。

说有数据全部标注确认后导出结果。

导出有顺序,如果需要导出表格Json结果必须先导出标记结果和识别结果

导出的文件说明

文件名 说明
Label.txt 检测标签,可直接用于PPOCR检测模型训练。用户每确认5张检测结果后,程序会进行自动写入。当用户关闭应用程序或切换文件路径后同样会进行写入。
fileState.txt 图片状态标记文件,保存当前文件夹下已经被用户手动确认过的图片名称。
Cache.cach 缓存文件,保存模型自动识别的结果。
rec_gt.txt 识别标签。可直接用于PPOCR识别模型训练。需用户手动点击菜单栏“文件” - "导出识别结果"后产生。
crop_img 识别数据。按照检测框切割后的图片。与rec_gt.txt同时产生。
tableRec_excel_output 表格识别生成的excel文件
annotation.json 导出的表格Json标注数据 。

使用标注好的数据进行模型训练

这里以表格训练为例,其余的修改配置文件即可

完整的配置文件说明可以参考配置文件

首先修改配置文件 PaddleOCR\configs\table\table_mv3.yml
修改相应的训练集数据文件夹(数据图片的路径)、数据标签路径(导出的annotation.json或者Label.txt或rec_gt.txt)和验证集数据文件夹和标签路径

我修改后的配置文件
如果是PaddlePaddle-CPU 则将以下配置文件的 use_gpu: True 改为 use_gpu: False

Global:
  use_gpu: True
  epoch_num: 400
  log_smooth_window: 20
  print_batch_step: 5
  save_model_dir: ./output/table_infer/
  save_epoch_step: 3
  # evaluation is run every 400 iterations after the 0th iteration
  eval_batch_step: [0, 2]
  cal_metric_during_train: True
  pretrained_model:
  checkpoints: 
  save_inference_dir:
  use_visualdl: False
  infer_img: doc/table/table.jpg
  # for data or label process
  character_dict_path: ppocr/utils/dict/table_structure_dict.txt
  character_type: en
  max_text_length: 100
  max_elem_length: 800
  max_cell_num: 500
  infer_mode: False
  process_total_num: 0
  process_cut_num: 0

Optimizer:
  name: Adam
  beta1: 0.9
  beta2: 0.999
  clip_norm: 5.0
  lr:
    learning_rate: 0.001
  regularizer:
    name: 'L2'
    factor: 0.00000

Architecture:
  model_type: table
  algorithm: TableAttn
  Backbone:
    name: MobileNetV3
    scale: 1.0
    model_name: large
  Head:
    name: TableAttentionHead
    hidden_size: 256
    l2_decay: 0.00001
    loc_type: 2
    max_text_length: 100
    max_elem_length: 800
    max_cell_num: 500

Loss:
  name: TableAttentionLoss
  structure_weight: 100.0
  loc_weight: 10000.0

PostProcess:
  name: TableLabelDecode

Metric:
  name: TableMetric
  main_indicator: acc

# 训练集配置
Train:
  dataset:
    name: PubTabDataSet
    data_dir: C:\\Users\77175\Desktop\table\train  # 训练集数据文件夹
    label_file_path: C:\\Users\77175\Desktop\table\annotation.json  #数据集标签路径
    transforms:
      - DecodeImage: # load image
          img_mode: BGR
          channel_first: False
      - ResizeTableImage:
          max_len: 4
      - TableLabelEncode:
      - NormalizeImage:
          scale: 1./255.
          mean: [0.485, 0.456, 0.406]
          std: [0.229, 0.224, 0.225]
          order: 'hwc'
      - PaddingTableImage:
      - ToCHWImage:
      - KeepKeys:
          keep_keys: ['image', 'structure', 'bbox_list', 'sp_tokens', 'bbox_list_mask']
  loader:
    shuffle: True
    batch_size_per_card: 4
    drop_last: True
    num_workers: 1
# 验证集配置
Eval:
  dataset:
    name: PubTabDataSet
    data_dir: C:\\Users\77175\Desktop\table\train #验证集数据文件夹
    label_file_path: C:\\Users\77175\Desktop\table\annotation.json #验证集标签路径
    transforms:
      - DecodeImage: # load image
          img_mode: BGR
          channel_first: False
      - ResizeTableImage:
          max_len: 4
      - TableLabelEncode:
      - NormalizeImage:
          scale: 1./255.
          mean: [0.485, 0.456, 0.406]
          std: [0.229, 0.224, 0.225]
          order: 'hwc'
      - PaddingTableImage:
      - ToCHWImage:
      - KeepKeys:
          keep_keys: ['image', 'structure', 'bbox_list', 'sp_tokens', 'bbox_list_mask']
  loader:
    shuffle: False
    drop_last: False
    batch_size_per_card: 4
    num_workers: 1

开始训练模型

在PPOCRLabel目录下运行cmd执行以下命令

# 单机单卡训练
python tools/train.py -c configs/table/table_mv3.yml
# 单机多卡训练,通过 --gpus 参数设置使用的GPU ID
python -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/table/table_mv3.yml

训练后会在输出文件夹下生成训练模型

将训练模型转换成推理模型

python tools/export_model.py -c configs/table/table_mv3.yml -o Global.pretrained_model=./output/table_mv3/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./table_infer

训练好的推理模型进行验证和测试后就可使用了

补充

windows如果是cuda可以配置环境变量,在环境变量中添加 变量名:CUDA_VISIBLE_DEVICES 变量值:0 (你gup)

如果提示内存不足可以修改配置文件的训练时单卡batch size字段:batch_size_per_card 大小

posted @ 2022-05-31 18:14  zwbsoft  阅读(3536)  评论(0编辑  收藏  举报