• 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 大小

  • 相关阅读:
    野指针
    MFC动态创建控件及其消息响应函数
    关于CString总结
    关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
    VS2005、VS2008中的快捷键、组合键大全
    could not be found (are you missing a using directive or an assembly reference?)
    项目任务管理系统
    VSDBCMD
    sqlcmd
    Microsoft® Command Line Utilities 11 for SQL Server®
  • 原文地址:https://www.cnblogs.com/zwbsoft/p/16331779.html
Copyright © 2020-2023  润新知