• PaddleOCR 自制模型训练


    一、前言

    文字识别场景举例:文字识别也是图像领域一个常见问题。然而,对于自然场景图像,首先要定位图像中的文字位置,然后才能进行识别。 所以一般来说,从自然场景图片中进行文字识别,需要包括2个步骤:

    • 文字检测:解决的问题是哪里有文字,文字的范围有多少
    • 文字识别:对定位好的文字区域进行识别,主要解决的问题是每个文字是什么,将图像中的文字区域进转化为字符信息。

    二、训练检测模型

    2.1 数据准备

    数据集的制作可以通过PPOCRLabel工具完成。 关于PPOCRLabel的使用,可以参考文章《PaddleOCR 标注工具PPOCRLabel的使用》

    本节以icdar15数据集为例,介绍如何完成PaddleOCR中文字检测模型的训练、评估与测试。

    来到官网:https://rrc.cvc.uab.es/?ch=4&com=downloads可以看到有各个年份比赛的数据集。我们下载的是2015版数据集。
    在这里插入图片描述

    我们已经为您准备好了icdar15的数据集,存放在 ~/data/data34815/icdar2015.tar 中,可以运行如下指令完成数据集解压。

    cd ~/data/data34815/ && tar xf icdar2015.tar && mv icdar2015  ~/PaddleOCR/train_data/
    

    运行上述指令后 ~/train_data/icdar2015/text_localization 有两个文件夹和两个文件,分别是:

    ~/train_data/icdar2015/text_localization 
      └─ icdar_c4_train_imgs/         icdar数据集的训练数据
      └─ ch4_test_images/             icdar数据集的测试数据
      └─ train_icdar2015_label.txt    icdar数据集的训练标注
      └─ test_icdar2015_label.txt     icdar数据集的测试标注
    

    2.2 快速启动训练

    首先下载pretrain model预训练模型),PaddleOCR的检测模型目前支持两种backbone,分别是MobileNetV3ResNet50_vd, 您可以根据需求使用PaddleClas中的模型更换backbone。

    • 下载预训练模型
    # 下载MobileNetV3的预训练模型
    !wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/MobileNetV3_large_x0_5_pretrained.tar
    ! cd pretrain_models/ && tar xf MobileNetV3_large_x0_5_pretrained.tar
    # 下载ResNet50的预训练模型
    !wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_vd_ssld_pretrained.tar
    ! cd pretrain_models/ && tar xf ResNet50_vd_ssld_pretrained.tar
    
    • 训练backbone为MobileNetV3的db算法的检测模型
    # 训练backbone为MobileNetV3的db算法的检测模型
    !python3 tools/train.py -c configs/det/det_mv3_db.yml -o Global.eval_batch_step="[0,2000]" 
    

    上述指令中,通过-c 选择训练使用configs/det/det_db_mv3.yml配置文件。 有关配置文件的详细解释,请参考/doc目录下的config.md。
    您也可以通过-o参数在不需要修改yml文件的情况下,改变训练的参数,比如,调整训练的学习率为0.0001

    python3 tools/train.py -c configs/det/det_db_mv3.yml -o Optimizer.base_lr=0.0001
    

    det_mv3_db.yml 文件内容参考:

    Global:
      algorithm: DB
      use_gpu: true
      epoch_num: 1200
      log_smooth_window: 20
      print_batch_step: 2
      save_model_dir: ./output/det_db/
      save_epoch_step: 200
      # evaluation is run every 5000 iterations after the 4000th iteration
      eval_batch_step: [4000, 5000]
      train_batch_size_per_card: 16
      test_batch_size_per_card: 16
      image_shape: [3, 640, 640]
      reader_yml: ./configs/det/det_db_icdar15_reader.yml
      pretrain_weights: ./pretrain_models/MobileNetV3_large_x0_5_pretrained/
      checkpoints:
      save_res_path: ./output/det_db/predicts_db.txt
      save_inference_dir:
      
    Architecture:
      function: ppocr.modeling.architectures.det_model,DetModel
    
    Backbone:
      function: ppocr.modeling.backbones.det_mobilenet_v3,MobileNetV3
      scale: 0.5
      model_name: large
    
    Head:
      function: ppocr.modeling.heads.det_db_head,DBHead
      model_name: large
      k: 50
      inner_channels: 96
      out_channels: 2
    
    Loss:
      function: ppocr.modeling.losses.det_db_loss,DBLoss
      balance_loss: true
      main_loss_type: DiceLoss
      alpha: 5
      beta: 10
      ohem_ratio: 3
    
    Optimizer:
      function: ppocr.optimizer,AdamDecay
      base_lr: 0.001
      beta1: 0.9
      beta2: 0.999
    
    PostProcess:
      function: ppocr.postprocess.db_postprocess,DBPostProcess
      thresh: 0.3
      box_thresh: 0.7
      max_candidates: 1000
      unclip_ratio: 2.0
    

    2.3 测试检测效果

    训练过程中的检测模型保存在./output/det_db/中 ,模型保存的位置通过det_mv3_db.yml配置文件的Global.save_model_dir参数设置。

    • 使用训练好的模型测试单张图像的检测效果:
    python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o TestReader.infer_img="./doc/imgs_en/img_10.jpg"  	Global.checkpoints="./output/det_db/best_accuracy"
    
    • 使用训练好的模型,测试文件夹下所有图像的检测效果
    python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o TestReader.infer_img="./doc/imgs_en/"  Global.checkpoints="./output/det_db/best_accuracy"
    

    三、训练识别模型

    3.1 数据准备

    • 使用自己数据集:
      若您希望使用自己的数据进行训练,请参考下文组织您的数据。
    • 训练集:
      首先请将训练图片放入同一个文件夹(train_images),并用一个txt文件(rec_gt_train.txt)记录图片路径和标签。
    • 注意: 默认请将图片路径和图片标签用 \t 分割,如用其他方式分割将造成训练报错
    " 图像文件名                 图像标注信息 "
    
    train_images/train_0001.jpg   简单可依赖
    train_images/train_0002.jpg   用科技让复杂的世界更简单
    

    最终训练集应有如下文件结构:

    |-train_data
        |-ic15_data
            |- rec_gt_train.txt
            |- train
                |- word_001.png
                |- word_002.jpg
                |- word_003.jpg
                | ...
    
    • 测试集
      同训练集类似,测试集也需要提供一个包含所有图片的文件夹(test)和一个rec_gt_test.txt,测试集的结构如下所示:
    |-train_data
        |-ic15_data
            |- rec_gt_test.txt
            |- test
                |- word_001.jpg
                |- word_002.jpg
                |- word_003.jpg
                | ...
    

    3.2 快速启动训练

    首先下载pretrain model,PaddleOCR的检测模型目前支持两种backbone,分别是MobileNetV3ResNet50_vd, 您可以根据需求使用PaddleClas中的模型更换backbone。 本节将以 CRNN 识别模型为例:

    • CRNN 识别模型下载
    wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/rec_mv3_none_bilstm_ctc.tar
    cd pretrain_models && tar -xf rec_mv3_none_bilstm_ctc.tar && rm -rf rec_mv3_none_bilstm_ctc.tar
    
    • 开始训练
    python3 tools/train.py -c configs/rec/rec_icdar15_train.yml
    

    3.3 测试识别效果

    • 测试单张图像的识别结果
    python3 tools/infer_rec.py -c configs/rec/rec_icdar15_train.yml -o Global.checkpoints=./output/rec_CRNN/best_accuracy Global.infer_img=./doc/imgs_words_en/word_10.png
    
    • 测试文件夹下所有图像的文字识别效果
    python3 tools/infer_rec.py -c configs/rec/rec_icdar15_train.yml -o Global.checkpoints=./output/rec_CRNN/best_accuracy Global.infer_img=./doc/imgs_words_en/
    

    四、参考

    十分钟掌握PaddleOCR使用

  • 相关阅读:
    k8s 中 Pod 的控制器
    【Unity】简单案例脚本实现 | 鼠标观察/键盘控制移动飞行/行走/碰撞检测
    iOS 添加震动效果
    二轮平衡小车3:PID速度环
    前端组件化
    快速解决 const 与 typedef 类型组合时 ,const修饰谁的问题
    Sophon AutoCV Q&A大放送:如何加速视觉模型生产和落地(上篇)
    [附源码]JAVA毕业设计会议室租赁管理系统(系统+LW)
    并查集的实现【学习算法】
    在微信小程序中使用 echarts 图片-例 折线图
  • 原文地址:https://blog.csdn.net/zhanglei5415/article/details/126875564