飞浆OCR模型训练详细教程

news2025/1/24 8:49:10

目录

  • 飞浆使用文档
  • 一 环境查看
    • 1.1 Python 环境
    • 1.2 版本选择
    • 1.3 飞浆测试
  • 二 数据集的标准备
    • 2.1 PPOCRLabelv2
      • 2.1.1 安装 PaddlePaddle
      • 2.1.2 安装与运行 PPOCRLabel
      • 2.1.3 数据集划分
  • 三 PaddleOCR 的环境搭建
    • 3.1 环境搭建
    • 3.2 模型下载
  • 四 模型训练
    • 4.1 检测模型训练
    • 4.2 识别模型训练
  • 五 模型转换
    • 5.1 检测模型转换
    • 5.2 识别模型转换
  • 六 使用模型

飞浆使用文档

  • 官网:https://www.paddlepaddle.org.cn/
  • 教程:PaddleOCR 模型训练及使用详细教程_paddleocr 使用-CSDN 博客

一 环境查看

1.1 Python 环境

Pyhton 环境

  • 需要确认 python 的版本是否满足要求使用以下命令确认是 3.8/3.9/3.10/3.11/3.12

python`` ``--``version

在这里插入图片描述

  • 安装 Python 环境:参考教程:https://blog.csdn.net/qq_53280175/article/details/121107748

pip 的版本

  • 需要确认 pip 的版本是否满足要求,要求 pip 版本为 20.2.2 或更高版本

python -m ensurepip

python -m pip --version

在这里插入图片描述

处理器架构

  • 需要确认 Python 和 pip 是 64bit,并且处理器架构是 x86_64(或称作 x64、Intel 64、AMD64)架构。下面的第一行输出的是”64bit”,第二行输出的是”x86_64”、”x64”或”AMD64”即可

python -c "import platform;print(platform.architecture()[0]);print(platform.machine())"

在这里插入图片描述

1.2 版本选择

  • 简单来说分为 CPU 与 GPU 版本,我这里选择 CPU 版本
  • CPU 的配置较简单,而 GPU 相对复杂,且配置繁琐
  • 安装
python -m pip install paddlepaddle==3.0.0b0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
  • 卸载
python -m pip uninstall paddlepaddle

1.3 飞浆测试

_"""_
_ @Author: EasonShu_
_ @FileName: ImagesTest.py_
_ @DateTime: 2024/7/18 下午4:10_
_"""_
import time

from paddleocr import PaddleOCR
from paddlenlp import Taskflow

from paddleocr import PaddleOCR
from sympy import true
#
# ocr = PaddleOCR(use_angle_cls=True,
#                 lang="ch",
#                 det_model_dir='model/mymodel/',
#                 rec_model_dir='model/recmodel/'
#                 )  # need to run only once to download and load model into memory
ocr = PaddleOCR(use_angle_cls=True,
                lang="ch"
                )  # need to run only once to download and load model into memory

if __name__ == '__main__':
    # 中文结果
    chinese_characters =""
    SatrtTime = time.time()
    # 选择图片
    result = ocr.ocr("./images/微信图片_20240801205243.jpg", cls=True)
    for idx in range(len(result)):
        res = result[idx]
        for line in res:
            # 识别结果, 如果与dict中no_orc.txt的识别字符匹配,则滤掉
            chinese_characters += line[1][0]+"\n"
    print(chinese_characters)
    print("识别时间:", time.time() - SatrtTime)
  • 如果有结果表示安装成功可以进行下一步

二 数据集的标准备

2.1 PPOCRLabelv2

PPOCRLabel 是一款适用于 OCR 领域的半自动化图形标注工具,内置 PP-OCR 模型对数据自动标注和重新识别。使用 Python3 和 PyQT5 编写,支持矩形框标注、表格标注、不规则文本标注、关键信息标注模式,导出格式可直接用于 PaddleOCR 检测和识别模型的训练。

环境搭建

2.1.1 安装 PaddlePaddle

pip3 install --upgrade pip
# 如果您的机器是CPU,请运行以下命令安装
python3 -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 我的机器就是 CPU

2.1.2 安装与运行 PPOCRLabel

  • Window 平台
pip install PPOCRLabel  # 安装
# 选择标签模式来启动
PPOCRLabel --lang ch  # 启动【普通模式】,用于打【检测+识别】场景的标签
PPOCRLabel --lang ch --kie True  # 启动 【KIE 模式】,用于打【检测+识别+关键字提取】场景的标签
  • 运行

在这里插入图片描述

  • 导入数据,自动标注:注意有些标注点组要自己修改

在这里插入图片描述

在这里插入图片描述

  • 结果文件说明:

2.1.3 数据集划分

  • 方案一:自己下载源码:https://github.com/PFCCLab/PPOCRLabel
  • 安装依赖:

在这里插入图片描述

  • 方案二:先查看下载的 ppocrlabel 库所在位置:pip show ppocrlabel

在这里插入图片描述

  • 进入该目录终端运行该命令
python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath E:\PPOCRLabel-main\train_data --detRootPath E:\PPOCRLabel-main\train_data\det --recRootPath E:\PPOCRLabel-main\train_data\rec
  • trainValTestRatio 是训练集、验证集、测试集的图像数量划分比例,根据实际情况设定,默认是 6:2:2
  • datasetRootPath 是 PPOCRLabel 标注的完整数据集存放路径。默认路径是 …/train_data/
    就是步骤 6 的结果文件夹 train_data 文件夹。
  • detRootPath 是输出训练文字检测的数据集存放路径。默认路径是 …/train_data/det
  • recRootPath 是输出训练文字识别的数据集存放路径。默认路径是 …/train_data/rec

编写脚本方便下次使用

@echo off
setlocal enabledelayedexpansion

:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version

:: 指定数据分割脚本的路径和参数
set _SCRIPT_=gen_ocr_train_val_test.py
set _TRAINVALTESTRATIO_=6:2:2
set _DATASETROOTPATH_=E:\PPOCRLabel-main\train_data
set _DETROOTPATH_=E:\PPOCRLabel-main\train_data\det
set _RECROOTPATH_=E:\PPOCRLabel-main\train_data\rec

:: 打印数据集分割命令
echo --------
echo Data Split Command:
echo python !SCRIPT! --trainValTestRatio !TRAINVALTESTRATIO! --datasetRootPath !DATASETROOTPATH! --detRootPath !DETROOTPATH! --recRootPath !RECROOTPATH!

:: 执行Python数据集分割命令
echo --------
echo -------- begin data split --------
python !SCRIPT! --trainValTestRatio !TRAINVALTESTRATIO! --datasetRootPath !DATASETROOTPATH! --detRootPath !DETROOTPATH! --recRootPath !RECROOTPATH!
echo -------- end data split --------

endlocal
  • 数据集划分结果:为下一步模型训练做准备

三 PaddleOCR 的环境搭建

3.1 环境搭建

  • 下载地址:https://github.com/PaddlePaddle/PaddleOCR/tree/main
  • 解压下载,用 Pycharm 打开

在这里插入图片描述

  • 依赖下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

在这里插入图片描述

3.2 模型下载

  • 参考网站:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/models_list.md
  • 主要分为三类:文本检测,文本识别,文本方向
  • det_model_dir 是检测模型的位置,rec_model_dir 是识别模型的位置,cls_model_dir 是分类模型的位置。

在这里插入图片描述

  • 将上一步的训练数据集已入跟目录下

在这里插入图片描述

四 模型训练

  • 参考配置文件:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/config.md

在这里插入图片描述

  • 新建 pretrain_models 文件夹,下载训练模型
  • 模型下载地址:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md

在这里插入图片描述

在这里插入图片描述

  • 注意:是训练模型,不是推理模型,而且有需要对应的配置文件,这个目录有

在这里插入图片描述
在这里插入图片描述

4.1 检测模型训练

在这里插入图片描述

  • 关键参数
Global:
  debug: false _# debug model_
_  _use_gpu: false _# 是否使用gpu_
_  _epoch_num: 500 _# 训练轮数_
_  _log_smooth_window: 20 _# 训练时,og队列长度,每次打印输出队列里的中间值_
_  _print_batch_step: 10 _# 每多少个batch打印一次日志_
_  _save_model_dir: ./output/ch_PP-OCR_v3_det/ _# 模型保存路径_
_  _save_epoch_step: 100 _# 每多少轮保存一次模型_
_  _max_text_length: 500 _# 最大文本长度_
_  _eval_batch_step: _# 评估模型间隔_
_  _- 0 _# 训练轮数_
_  _- 1 _# 评估轮数_
_  _cal_metric_during_train: false _# 设置是否在训练过程中评估指标,此时评估的是模型在当前batch下的指标_
_  _pretrained_model: ./pretrain_models/ch_PP-OCRv3_det_distill_train/ch_PP-OCRv3_det_distill_train/best_accuracy _#设置加载预训练模型路径_
_  _checkpoints: null _# 加载模型参数路径_
_  _save_inference_dir: null
  use_visualdl: true _# 是否使用visualdl_
_  _infer_img: doc/imgs_en/img_10.jpg
  save_res_path: ./checkpoints/det_db/predicts_db.txt _# 设置检测模型的结果保存地址_
_  _distributed: true _# 设置是否识别空格_
_  _d2s_train_image_shape: [3, -1, -1]
  amp_dtype: bfloat16

Architecture:
  name: DistillationModel
  algorithm: Distillation
  model_type: det
  Models:
    Student:
      pretrained:
      model_type: det
      algorithm: DB
      Transform: null
      Backbone:
        name: MobileNetV3
        scale: 0.5
        model_name: large
        disable_se: true
      Neck:
        name: RSEFPN
        out_channels: 96
        shortcut: True
      Head:
        name: DBHead
        k: 50
    Student2:
      pretrained:
      model_type: det
      algorithm: DB
      Transform: null
      Backbone:
        name: MobileNetV3
        scale: 0.5
        model_name: large
        disable_se: true
      Neck:
        name: RSEFPN
        out_channels: 96
        shortcut: True
      Head:
        name: DBHead
        k: 50
    Teacher:
      freeze_params: true
      return_all_feats: false
      model_type: det
      algorithm: DB
      Backbone:
        name: ResNet_vd
        in_channels: 3
        layers: 50
      Neck:
        name: LKPAN
        out_channels: 256
      Head:
        name: DBHead
        kernel_list: [7,2,2]
        k: 50

Loss:
  name: CombinedLoss
  loss_config_list:
  - DistillationDilaDBLoss:
      weight: 1.0
      model_name_pairs:
      - ["Student", "Teacher"]
      - ["Student2", "Teacher"]
      key: maps
      balance_loss: true
      main_loss_type: DiceLoss
      alpha: 5
      beta: 10
      ohem_ratio: 3
  - DistillationDMLLoss:
      model_name_pairs:
      - ["Student", "Student2"]
      maps_name: "thrink_maps"
      weight: 1.0
      model_name_pairs: ["Student", "Student2"]
      key: maps
  - DistillationDBLoss:
      weight: 1.0
      model_name_list: ["Student", "Student2"]
      balance_loss: true
      main_loss_type: DiceLoss
      alpha: 5
      beta: 10
      ohem_ratio: 3


_####优化器类名###_
_###学习率是训练神经网络的重要超参数之一,它代表在每一次迭代中梯度向损失函数最优解移动的步长。_
_###_
Optimizer:
  name: Adam _# 目前支持Momentum,Adam,RMSProp, 见ppocr/optimizer/optimizer.py_
_  _beta1: 0.9 _# 设置一阶矩估计的指数衰减率_
_  _beta2: 0.999 _# 设置二阶矩估计的指数衰减率_
_  _lr:
    name: Cosine
    learning_rate: 0.001
    warmup_epoch: 2
  regularizer:
    name: L2
    factor: 5.0e-05

PostProcess:
  name: DistillationDBPostProcess
  model_name: ["Student"]
  key: head_out
  thresh: 0.3
  box_thresh: 0.6
  max_candidates: 1000
  unclip_ratio: 1.5

Metric:
  name: DistillationMetric
  base_metric_name: DetMetric
  main_indicator: hmean
  key: "Student"
_# 训练数据集配置_
Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/ _# 数据集路径_
_    _label_file_list:
      - ./train_data/det/train.txt _# 训练数据标签文件_
_    _ratio_list: [1.0]
    transforms:
    - DecodeImage:
        img_mode: BGR
        channel_first: false
    - DetLabelEncode: null
    - CopyPaste:
    - IaaAugment:
        augmenter_args:
        - type: Fliplr
          args:
            p: 0.5
        - type: Affine
          args:
            rotate:
            - -10
            - 10
        - type: Resize
          args:
            size:
            - 0.5
            - 3
    - EastRandomCropData:
        size:
        - 960
        - 960
        max_tries: 50
        keep_ratio: true
    - MakeBorderMap:
        shrink_ratio: 0.4
        thresh_min: 0.3
        thresh_max: 0.7
    - MakeShrinkMap:
        shrink_ratio: 0.4
        min_text_size: 8
    - NormalizeImage:
        scale: 1./255.
        mean:
        - 0.485
        - 0.456
        - 0.406
        std:
        - 0.229
        - 0.224
        - 0.225
        order: hwc
    - ToCHWImage: null
    - KeepKeys:
        keep_keys:
        - image
        - threshold_map
        - threshold_mask
        - shrink_map
        - shrink_mask
  loader:
    shuffle: true
    drop_last: false
    batch_size_per_card: 8
    num_workers: 4
_# 评估数据集配置_
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/ _# 数据集路径_
_    _label_file_list:
      - ./train_data/det/val.txt _# 训练数据标签文件_
_    _transforms:
      - DecodeImage: _# load image_
_          _img_mode: BGR
          channel_first: False
      - DetLabelEncode: _# Class handling label_
_      _- DetResizeForTest:
      - NormalizeImage:
          scale: 1./255.
          mean: [0.485, 0.456, 0.406]
          std: [0.229, 0.224, 0.225]
          order: 'hwc'
      - ToCHWImage:
      - KeepKeys:
          keep_keys: ['image', 'shape', 'polys', 'ignore_tags']
  loader:
    shuffle: False
    drop_last: False
    batch_size_per_card: 1 _# must be 1_
_    _num_workers: 2
  • 开始训练,注意在根目录下
python tools/train.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml
  • 编写运行脚本下次使用
@echo off
setlocal enabledelayedexpansion

:: 指定Python解释器的路径,如果不在PATH中
:: set PYTHON_EXECUTABLE=C:\path\to\python.exe

:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version
echo PaddlePaddle Version:
python -c "import paddle; print(paddle.__version__)"

:: 指定训练脚本和配置文件的路径
set _TRAIN_SCRIPT_=tools\train.py
set _CONFIG_FILE_=pretrain_models\ch_PP-OCRv3_det_cml.yml

:: 打印训练命令
echo --------
echo Training Command:
echo python !TRAIN_SCRIPT! -c !CONFIG_FILE!

:: 执行Python训练命令
echo --------
echo -------- begin train --------
python !TRAIN_SCRIPT! -c !CONFIG_FILE!
echo -------- end train --------

endlocal
  • 查看日志

在这里插入图片描述

  • 评估模型中
hmean: 0.90104772991851, is_float16: False, precision: 0.8745762711864407, recall: 0.929171668667467, fps: 0.010587729849145846, best_epoch: 1
  1. hmean (调和平均数): 这是精度(precision)和召回率(recall)的调和平均数,通常用于评估分类器的整体性能。它在两个指标都较高时才给出较高的值,因此是一个更全面的性能度量。0.90104772991851 是一个相当高的值,表明模型在预测方面表现良好。
  2. is_float16: 这个布尔值表明模型是否使用了 float16 数据类型。False 意味着模型使用的是更高精度的数据类型,如 float32 或 float64。
  3. precision (精确率): 这是所有被模型预测为正类别的样本中,真正属于正类别的比例。0.8745762711864407 表示当模型预测某个样本为正类时,大约有 87.46% 的概率它是正确的。
  4. recall (召回率): 这是所有实际为正类别的样本中,被模型正确识别为正类别的比例。0.929171668667467 表示模型能够识别出大约 92.92% 的真实正类样本。
  5. fps: 这可能指的是每秒帧数(Frames Per Second),如果这个上下文与图像处理或视频分析相关。但是,在机器学习模型评估中,这可能是指“假阳性每秒”(False Positives per Second),表示模型每秒钟产生的假阳性数量。0.010587729849145846 指的是模型每秒产生的假阳性非常低。
  6. best_epoch: 这个值指示训练过程中哪个 epoch(训练轮次)的模型表现最佳。在这个例子中,best_epoch 是 1,意味着模型在第一个 epoch 结束时达到了最佳性能。
  • 日志查看:经过 20 轮的训练,我们可以看到参数在发生变化,但是 CPU 运行效率有点慢

!在这里插入图片描述

在这里插入图片描述

4.2 识别模型训练

在这里插入图片描述

  • 配置文件
Global:
  debug: true
  use_gpu: false
  epoch_num: 100
  log_smooth_window: 20
  print_batch_step: 1
  save_model_dir: ./output/rec_ppocr_v3_distillation
  save_epoch_step: 10
  eval_batch_step: [0, 10]
  cal_metric_during_train: true
  pretrained_model: ./pretrain_models/ch_PP-OCRv3_rec_train/ch_PP-OCRv3_rec_train/best_accuracy _#设置加载预训练模型路径_
_  _checkpoints:
  save_inference_dir:
  use_visualdl: false
  infer_img: doc/imgs_words/ch/word_1.jpg
  character_dict_path: ppocr/utils/ppocr_keys_v1.txt
  max_text_length: &max_text_length 1000
  infer_mode: false
  use_space_char: true
  distributed: true
  save_res_path: ./output/rec/predicts_ppocrv3_distillation.txt
  d2s_train_image_shape: [3, 48, -1]


Optimizer:
  name: Adam
  beta1: 0.9
  beta2: 0.999
  lr:
    name: Piecewise
    decay_epochs : [700]
    values : [0.0005, 0.00005]
    warmup_epoch: 5
  regularizer:
    name: L2
    factor: 3.0e-05


Architecture:
  model_type: &model_type "rec"
  name: DistillationModel
  algorithm: Distillation
  Models:
    Teacher:
      pretrained:
      freeze_params: false
      return_all_feats: true
      model_type: *model_type
      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
    Student:
      pretrained:
      freeze_params: false
      return_all_feats: true
      model_type: *model_type
      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: CombinedLoss
  loss_config_list:
  - DistillationDMLLoss:
      weight: 1.0
      act: "softmax"
      use_log: true
      model_name_pairs:
      - ["Student", "Teacher"]
      key: head_out
      multi_head: True
      dis_head: ctc
      name: dml_ctc
  - DistillationDMLLoss:
      weight: 0.5
      act: "softmax"
      use_log: true
      model_name_pairs:
      - ["Student", "Teacher"]
      key: head_out
      multi_head: True
      dis_head: sar
      name: dml_sar
  - DistillationDistanceLoss:
      weight: 1.0
      mode: "l2"
      model_name_pairs:
      - ["Student", "Teacher"]
      key: backbone_out
  - DistillationCTCLoss:
      weight: 1.0
      model_name_list: ["Student", "Teacher"]
      key: head_out
      multi_head: True
  - DistillationSARLoss:
      weight: 1.0
      model_name_list: ["Student", "Teacher"]
      key: head_out
      multi_head: True

PostProcess:
  name: DistillationCTCLabelDecode
  model_name: ["Student", "Teacher"]
  key: head_out
  multi_head: True

Metric:
  name: DistillationMetric
  base_metric_name: RecMetric
  main_indicator: acc
  key: "Student"
  ignore_space: False

Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/ _# 数据集路径_
_    _ext_op_transform_idx: 1
    label_file_list:
    - ./train_data/rec/train.txt _# 训练数据标签文件_
_    _transforms:
    - DecodeImage:
        img_mode: BGR
        channel_first: false
    - RecConAug:
        prob: 0.5
        ext_data_num: 2
        image_shape: [48, 320, 3]
        max_text_length: *max_text_length
    - 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/rec/val.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
  • 执行训练
**python tools/train.py -c pretrain_models/ch_PP-OCRv3_rec_distillation.yml**
  • 编写脚本
@echo off
setlocal enabledelayedexpansion

:: 指定Python解释器的路径,如果不在PATH中
:: set PYTHON_EXECUTABLE=C:\path\to\python.exe

:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version
echo PaddlePaddle Version:
python -c "import paddle; print(paddle.__version__)"

:: 指定训练脚本和配置文件的路径
set _TRAIN_SCRIPT_=tools\train.py
set _CONFIG_FILE_=pretrain_models\ch_PP-OCRv3_rec_distillation.yml

:: 打印训练命令
echo --------
echo Training Command:
echo python !TRAIN_SCRIPT! -c !CONFIG_FILE!

:: 执行Python训练命令
echo --------
echo -------- begin train --------
python !TRAIN_SCRIPT! -c !CONFIG_FILE!
echo -------- end train --------

endlocal
  • 运行结果:我们可以发现准确率不高,需要多次训练
acc: 0.5774739545737373, norm_edit_dis: 0.8797479676734311, Teacher_acc: 0.5605468713506063, Teacher_norm_edit_dis: 0.8741167944408945, fps: 3.7627413423809424

acc (Accuracy, 准确率):

  • : 0.5774739545737373
  • 解释: 准确率表示模型预测正确的比例。在这里,模型的准确率约为 57.75%,即模型在测试数据上有 57.75% 的预测是正确的。

norm_edit_dis (Normalized Edit Distance, 归一化编辑距离):

  • : 0.8797479676734311
  • 解释: 归一化编辑距离用于衡量模型预测与真实标签之间的差异,值越小表示预测越接近真实值。在这里,归一化编辑距离约为 0.88,表明模型预测与真实标签之间有一定的差异。

Teacher_acc (Teacher Accuracy, 教师模型准确率):

  • : 0.5605468713506063
  • 解释: 教师模型是用于指导学生模型训练的参考模型。教师模型的准确率约为 56.05%。

Teacher_norm_edit_dis (Teacher Normalized Edit Distance, 教师模型归一化编辑距离):

  • : 0.8741167944408945
  • 解释: 教师模型的归一化编辑距离约为 0.87,表示教师模型预测与真实标签之间的差异情况。

fps (Frames per Second, 每秒帧数):

  • : 3.7627413423809424
  • 解释: 每秒帧数表示模型处理每帧图像的速度。在这里,模型每秒能处理约 3.76 帧图像,说明模型的计算速度。

五 模型转换

5.1 检测模型转换

  • 执行命令
python tools/export_model.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml -o Global.pretrained_model=./output/ch_PP-OCR_v3_det/best_accuracy  Global.save_inference_dir=./inference_model/det_model/
@echo off
setlocal enabledelayedexpansion

:: 指定Python解释器的路径,如果不在PATH中
:: set PYTHON_EXECUTABLE=C:\path\to\python.exe

:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version
echo PaddlePaddle Version:
python -c "import paddle; print(paddle.__version__)"

:: 指定导出模型的脚本和配置文件的路径
set _EXPORT_SCRIPT_=tools\export_model.py
set _CONFIG_FILE_=pretrain_models\ch_PP-OCRv3_det_cml.yml
set _PRETRAINED_MODEL_=./output/rec_ppocr_v3_distillation/best_accuracy
set _SAVE_INFERENCE_DIR_=./inference_model/ret_model/

:: 打印导出模型的命令
echo --------
echo Export Model Command:
echo python !EXPORT_SCRIPT! -c !CONFIG_FILE! -o Global.pretrained_model=!PRETRAINED_MODEL! Global.save_inference_dir=!SAVE_INFERENCE_DIR!

:: 执行Python导出模型命令
echo --------
echo -------- begin export --------
python !EXPORT_SCRIPT! -c !CONFIG_FILE! -o Global.pretrained_model=!PRETRAINED_MODEL! Global.save_inference_dir=!SAVE_INFERENCE_DIR!
echo -------- end export --------

endlocal
  • -c 指定导出模型使用的配置文件,需与训练时使用的配置文件相同
  • -o 指定配置文件中的某个参数,即在不修改配置文件的情况下修改参数
  • Global.pretrained_model 此处是指要导出模型的参数文件路径
  • Global.save_inference_dir 指导出模型的保存路径
  • 导出结果

在这里插入图片描述

5.2 识别模型转换

  • 执行命令
python tools/export_model.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml -o Global.pretrained_model=./output/rec_ppocr_v3_distillation/best_accuracy  Global.save_inference_dir=./inference_model/ret_model/
@echo off
setlocal enabledelayedexpansion

:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version
echo PaddlePaddle Version:
python -c "import paddle; print(paddle.__version__)"

:: 指定模型导出脚本和配置文件的路径
set _EXPORT_SCRIPT_=tools\export_model.py
set _CONFIG_FILE_=pretrain_models\ch_PP-OCRv3_det_cml.yml
set _PRETRAINED_MODEL_=./output\rec_ppocr_v3_distillation\best_accuracy
set _SAVE_INFERENCE_DIR_=./inference_model\ret_model/

:: 打印模型导出命令
echo --------
echo Export Model Command:
echo python !EXPORT_SCRIPT! -c !CONFIG_FILE! -o Global.pretrained_model=!PRETRAINED_MODEL! Global.save_inference_dir=!SAVE_INFERENCE_DIR!

:: 执行Python模型导出命令
echo --------
echo -------- begin export --------
python !EXPORT_SCRIPT! -c !CONFIG_FILE! -o Global.pretrained_model=!PRETRAINED_MODEL! Global.save_inference_dir=!SAVE_INFERENCE_DIR!
echo -------- end export --------

endlocal
  • -c 指定导出模型使用的配置文件,需与训练时使用的配置文件相同
  • -o 指定配置文件中的某个参数,即在不修改配置文件的情况下修改参数
  • Global.pretrained_model 此处是指要导出模型的参数文件路径
  • Global.save_inference_dir 指导出模型的保存路径
  • 导出结果,参考上面只是目录不一样

六 使用模型

在这里插入图片描述

_"""
 @Author: EasonShu
 @FileName: ImagesTest.py
 @DateTime: 2024/7/18 下午4:10
"""
import time

from paddleocr import PaddleOCR
from paddlenlp import Taskflow

from paddleocr import PaddleOCR
from sympy import true
#
ocr = PaddleOCR(use_angle_cls=True,
                lang="ch",
                det_model_dir='model/mymodel/',
                rec_model_dir='model/ch_PP-OCRv4_rec_server_infer/'
                )  # need to run only once to download and load model into memory
# ocr = PaddleOCR(use_angle_cls=True,
#                 lang="ch"
#                 )  # need to run only once to download and load model into memory
# 加载dict下的不识别字符,过滤掉



if __name__ == '__main__':
    # 中文结果
    chinese_characters =""
    SatrtTime = time.time()
    # 选择图片
    result = ocr.ocr("./images/810a19d8bc3eb1359aef8739a61ea8d3fd1f4403.jpg", cls=True)
    for idx in range(len(result)):
        res = result[idx]
        for line in res:
            # 识别结果, 如果与dict中no_orc.txt的识别字符匹配,则滤掉
            chinese_characters += line[1][0]+"\n"
    print(chinese_characters)
__    print("识别时间:", time.time() - SatrtTime)_

在这里插入图片描述

  • 可以发现效果不是很好,可能需要更多数据集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1977947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

萱仔环境记录——git的安装流程

最近由于我有一个大模型的offer,由于我只在实验室的电脑上装了git,我准备在自己的笔记本上本地安装一个git,也给我的一个师弟讲解一下git安装和使用的过程,给我的环境安装章节添砖加瓦。 github是基于git的一个仓库托管平台。 g…

用Python实现亚马逊Amazon高性能爬虫采集销量信息

用Python实现亚马逊Amazon高性能爬虫采集销量信息 引言 亚马逊作为全球最大的电商平台,拥有丰富的商品种类和庞大的用户基数。因此,采集亚马逊的销量信息对于市场分析、竞争对手研究以及运营优化有着重要的作用。本文将详细介绍如何用Python实现高性能的…

机械学习—零基础学习日志(高数20——洛必达法则)

零基础为了学人工智能,真的开始复习高数 这里讲解一个历史,洛必达法则其实并不是洛必达想出来的,洛必达整理了第一本微积分的书籍,是真正的知识传播者。洛必达法则是洛必达从伯努利哪里买过来的,并结合了莱布尼兹的论…

本地部署 Llama-3-EvoVLM-JP-v2

本地部署 Llama-3-EvoVLM-JP-v2 0. 引言1. 关于 Llama-3-EvoVLM-JP-v22. 本地部署2-0. 克隆代码2-1. 安装依赖模块2-2. 创建 Web UI2-3.启动 Web UI2-4. 访问 Web UI 0. 引言 Sakana AI 提出了一种称为进化模型合并的方法,并使用该方法创建大规模语言模型&#xff…

数论——线性同余方程、扩欧求解线性同余方程、线性组合、原根求解

线性同余方程 线性同余方程是形如 的方程&#xff0c;其中a 、b、m 为给定的整数&#xff0c;x 是未知整数。 扩欧求解线性同余方程 void mod_slover(int a, int b, int n) {int d, x, y, x0;d extend_gcd(a, n, x, y);if (b % d ! 0)cout << "no answer";…

联邦学习研究综述【联邦学习】

文章目录 0 前言机器学习两大挑战&#xff1a; 1 什么是联邦学习&#xff1f;联邦学习的一次迭代过程如下&#xff1a;联邦学习技术具有以下几个特点&#xff1a; 2 联邦学习的算法原理目标函数本地目标函数联邦学习的迭代过程 3 联邦学习分类横向联邦学习纵向联邦学习联邦迁移…

科普文:微服务之Spring Cloud OpenFeign服务调用调用过程分析

概叙 Feign和OpenFeign的关系 其实到现在&#xff0c;至少是2018年之后&#xff0c;我们说Feign&#xff0c;或者说OpenFeign其实是一个东西&#xff0c;就是OpenFeign&#xff0c;是2018.12 Netflix停止维护后&#xff0c;Spring cloud整合Netflix生态系统的延续。后面其实都…

ComfyUI-BrushNet(局部重绘)节点安装及效果、模型下载及详细使用方法✨

&#x1f35c;背景介绍 ComfyUI 中BrushNet的节点已经发布了三个月左右的时间了&#xff0c;后来陆续更新了更多的功能和模型接入&#xff0c;整体效果看起来还是不错的。这个节点随着能力的更新&#xff0c;接入了更多的模型&#xff0c;而每个模型默认的名字又比较相似&…

RoboDK的插件

目录 collision-free-planner&#xff1a; opc-ua&#xff1a; collision-free-planner&#xff1a; RoboDK 的无碰撞规划器插件使用概率路线图 (PRM) 自动在机器人工作空间内创建无碰撞路径。 有关无碰撞规划器的更多信息&#xff0c;请访问我们的 文档。 生成参数无碰撞…

揭秘:查询大数据信用报告的三大作用

相信很多朋友都听说过大数据信用是什么&#xff0c;其实早在几年前&#xff0c;不少的网贷平台都是用人行征信加上大数据信用作为平台风控审核的依据&#xff0c;直到大数据技术的发展&#xff0c;现在不少的银行等机构都将大数据信用作为银行放贷风控审核的重要指标&#xff0…

趋势跟踪策略 文华财经指标公式源码 九稳量化系统 多空趋势指标神器 期货起爆点买入指标源码

斯坦利•克罗 1、赢利时是长线&#xff0c;亏损时就是短线。 2、50%回调位金字塔加码&#xff0c;“坐”着赚钱&#xff0c;甚至不惜用鸵鸟政策&#xff0c;眼不见心不烦。 3、阻碍长线操作成功的最主要原因是觉得单调乏味和失去纪律。 4、把自己的止损点设在远离绝大多数投…

detr论文解读

参考&#xff1a;https://www.bilibili.com/video/BV1md4y1s7nW/?spm_id_from333.788&vd_source156234c72054035c149dcb072202e6be 补充&#xff1a;decoder更关注边缘特征 补充&#xff1a; spatial pos.enc.&#xff1a;空间位置编码。包含encoder和decoder的空间位置…

Flutter 2024: Impeller引擎引领渲染新纪元

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 Flutter 2024: Impeller引擎引领渲染新纪元 在移动应用开发领域&#xff0c;Flutter凭借其跨平台能力、丰富的组件库和高性能的渲染引擎&#…

OpenStack概述

一、初识OpenStack OpenStack Docs: 概况 一&#xff09;OpenStack架构简述 1、理解OpenStack OpenStack既是一个社区&#xff0c;也是一个项目和一个开源软件&#xff0c;提供开放源码软件&#xff0c;建立公共和私有云&#xff0c;它提供了一个部署云的操作平台或工具集&…

Linux 内核源码分析---通用文件模型及 VFS 结构

通用文件模型 通常一个完整的 Linux 系统由数千到数百万个文件组成&#xff0c;文件中存储了程序、数据和各种信息。层次化的目录结构用于对文件进行编排和分组。 ReiserFS&#xff08;新型的文件系统&#xff09;–>Reiser4 它通过一种与众不同的方式—完全平衡树结构来容…

高并发下的分布式缓存 | 设计和实现LRU缓存

LRU缓存介绍 什么是LRU缓存&#xff1f; LRU缓存是一种缓存策略&#xff0c;当缓存满了&#xff0c;需要腾出空间存放新数据时&#xff0c;它会删除最近最少使用的数据。换句话说&#xff0c;它会优先淘汰那些最久没有被访问的元素&#xff0c;以确保缓存中的数据是最近使用的…

学习安卓开发遇到的问题

问题1&#xff1a;学习禁用与恢复按钮中&#xff1a; java代码报错&#xff1a;报错代码是 R.id.btn_enable;case R.id.btn_disable;case R.id.btn_test: 代码如下&#xff1a;&#xff08;实现功能在代码后面&#xff09; package com.example.apptest;import static java.…

04 表的操作

目录 创建查看修改删除 1. 创建 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储殷勤; 说明&#xff1a; field&#xff0c;表示列名 datatype&#xff0c;表示列的类型…

专题十_哈希表

目录 题型总结 1. 两数之和 解析 题解 面试题 01.02. 判定是否互为字符重排 解析 题解 217. 存在重复元素 解析 题解 219. 存在重复元素 II 解析 题解 49. 字母异位词分组 解析 题解 题型总结 1. 两数之和 1. 两数之和 解析 题解 class Solution { public:ve…

ECMAScript 12 (ES12, ES2021) 新特性

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…