文章目录

  • PaddleOCR简介
  • 环境配置
  • PaddleOCR2.0的配置环境
  • Docker
  • 数据集
  • 文本检测
  • 使用自己的数据集
  • 文本识别
  • 使用自己的数据集
  • 字典
  • 自定义字典
  • 添加空格类别
  • 文本角度分类
  • 文本检测
  • 训练
  • 模型准备
  • 启动训练
  • 断点训练
  • 指标评估
  • 测试检测效果
  • 文本识别
  • 启动训练
  • 评估
  • 预测
  • 文本角度分类
  • 训练
  • 启动训练
  • 数据增强
  • 训练
  • 评估
  • 预测
  • 配置文件说明
  • Global
  • Optimizer ([ppocr/optimizer](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/ppocr/optimizer))
  • Architecture ([ppocr/modeling](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/ppocr/modeling))
  • Loss ([ppocr/losses](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/ppocr/losses))
  • PostProcess ([ppocr/postprocess](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/ppocr/postprocess))
  • Metric ([ppocr/metrics](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/ppocr/metrics))
  • Dataset ([ppocr/data](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.0/ppocr/data))
  • 错误解决方案
  • 当文本识别使用ResNet50时,会出现`DataLoader reader thread raised an exception!`


PaddleOCR简介

PaddleOCR分为文本检测、文本识别和方向分类器三部分,其中文本检测有三个模型,分别是MobileNetV3、ResNet18_vd和ResNet50,其中最常使用的是MobileNetV3模型,整体比较小,适合应用于手机端。文本识别只有一个MobileNetV3预训练模型。方向分类器使用默认的模型。

环境配置

PaddleOCR2.0的配置环境

PaddleOCR2.0的配置环境为:

  • PaddlePaddle 2.0.0
  • Python 3.7
  • glibc 2.23
  • cuDNN 7.6+(GPU)

其中,PaddlePaddle可以使用2.0.*

Docker

如果使用docker运行,可以直接使用paddlepaddle/paddle:2.0.1-gpu-cuda11.0-cudnn8镜像,根据个人使用习惯,可以更换,但是paddlepaddle的版本和cudnn版本不能低于PaddleOCR2.0的配置环境。

数据集

其中,文本检测和文本识别使用的都是icdar2015数据集,方向分类器的数据集需自备

icdar2015数据集可以从官网下载,首次下载需注册。

文本检测

文本检测的icdar2015数据集的标注文件下载:

wget -P ./train_data/  https://paddleocr.bj.bcebos.com/dataset/train_icdar2015_label.txt
wget -P ./train_data/  https://paddleocr.bj.bcebos.com/dataset/test_icdar2015_label.txt

也可以使用PaddleOCR提供的数据格式转换脚本,将官网的label转换为支持的数据格式。转换数据工具为ppocr/utils/gen_label.py

# 将官网下载的标签文件转换为 train_icdar2015_label.txt
python gen_label.py --mode="det" --root_path="icdar_c4_train_imgs/"  \
                    --input_path="ch4_training_localization_transcription_gt" \
                    --output_label="train_icdar2015_label.txt"

解压数据集和下载标注文件后,放在PaddleOCR/train_data文件中,文件目录为:

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

如果不按照这个格式,需要在后面的配置文件中配置

使用自己的数据集

标注文件格式如下,中间用"\t"分隔:

" 图像文件名                    json.dumps编码的图像标注信息"
ch4_test_images/img_61.jpg    [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]

json.dumps编码前的图像标注信息是包含多个字典的list,字典中的 points 表示文本框的四个点的坐标(x, y),从左上角的点开始顺时针排列。 transcription 表示当前文本框的文字,当其内容为“###”时,表示该文本框无效,在训练时会跳过。

如果您想在其他数据集上训练,可以按照上述形式构建标注文件

文本识别

文本识别的数据集也可以参考DTRB,下载benchmark所需的lmdb格式数据集。如果希望复现SRN的论文标准,需要下载离线增广数据,提取码: y3ry。增广数据是由MJSynth和SynthText做旋转和扰动得到的。数据下载完成后请解压到 {your_path}/PaddleOCR/train_data/data_lmdb_release/training/ 路径下。

PaddleOCR提供了一份用于训练icdar2015数据集的标签文件:

# 训练集标签
wget -P ./train_data/ic15_data  https://paddleocr.bj.bcebos.com/dataset/rec_gt_train.txt
# 测试集标签
wget -P ./train_data/ic15_data  https://paddleocr.bj.bcebos.com/dataset/rec_gt_test.txt

PaddleOCR也提供了数据格式转换文本,可以将官网label转换支持的数据格式。数据转换工具在ppocr/utils/gen_label.py

# 将官网下载的标签文件转换为 rec_gt_label.txt
python gen_label.py --mode="rec" --input_path="{path/of/origin/label}" --output_label="rec_gt_label.txt"
使用自己的数据集

默认请将图片路径和图片标签用 \t 分割,如用其他方式分割将造成训练报错。

" 图像文件名                 图像标注信息 "

train_data/train_0001.jpg   简单可依赖
train_data/train_0002.jpg   用科技让复杂的世界更简单

最终训练集的文件结构为:

|-train_data
    |-ic15_data
        |- rec_gt_train.txt
        |- train
            |- word_001.png
            |- word_002.jpg
            |- word_003.jpg
            | ...

测试集的文件结构为:

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

文本检测与文本识别相比还需要一个字典文件({word_dict_name}.txt),使用模型训练时,可以将所有出现的字符映射为字典的索引。

因此字典需要包含所有希望被正确是被的字符,{word_dict_name}.txt需要写成如下格式,并以utf-8编码格式保存:

l
d
a
d
r
n

word_dict.txt每行有一个单子,将字符与数字索引映在一起,“and”将被索引称[2 5 1]

ppocr/utils/ppocr_keys_v1.txt 是一个包含6623个字符的中文字典

ppocr/utils/ic15_dict.txt 是一个包含36个字符的英文字典

ppocr/utils/dict/french_dict.txt 是一个包含118个字符的法文字典

ppocr/utils/dict/japan_dict.txt 是一个包含4399个字符的日文字典

ppocr/utils/dict/korean_dict.txt 是一个包含3636个字符的韩文字典

ppocr/utils/dict/german_dict.txt 是一个包含131个字符的德文字典

ppocr/utils/dict/en_dict.txt 是一个包含63个字符的英文字典

您可以按需使用。

目前的多语言模型仍处在demo阶段,会持续优化模型并补充语种。

自定义字典

如需自定义dic文件,请在 configs/rec/rec_icdar15_train.yml 中添加 character_dict_path 字段, 指向您的字典路径。 并将 character_type 设置为 ch

添加空格类别

如果希望支持识别"空格"类别, 请将yml文件中的 use_space_char 字段设置为 True

文本角度分类

请按如下步骤设置数据集:

训练数据的默认存储路径是 PaddleOCR/train_data/cls,如果您的磁盘上已有数据集,只需创建软链接至数据集目录:

ln -sf <path/to/dataset> <path/to/paddle_ocr>/train_data/cls/dataset

请参考下文组织您的数据。

  • 训练集

首先请将训练图片放入同一个文件夹(train_images),并用一个txt文件(cls_gt_train.txt)记录图片路径和标签。

注意: 默认请将图片路径和图片标签用 \t 分割,如用其他方式分割将造成训练报错

0和180分别表示图片的角度为0度和180度

" 图像文件名                 图像标注信息 "
train/word_001.jpg   0
train/word_002.jpg   180

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

|-train_data
    |-cls
        |- cls_gt_train.txt
        |- train
            |- word_001.png
            |- word_002.jpg
            |- word_003.jpg
            | ...
  • 测试集

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

|-train_data
    |-cls
        |- cls_gt_test.txt
        |- test
            |- word_001.jpg
            |- word_002.jpg
            |- word_003.jpg
            | ...

文本检测

训练

模型准备

首先下载模型backbone的pretrain model,PaddleOCR的检测模型目前支持两种backbone,分别是MobileNetV3、ResNet_vd系列, 您可以根据需求使用PaddleClas中的模型更换backbone。

cd PaddleOCR/
# 下载MobileNetV3的预训练模型
wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/MobileNetV3_large_x0_5_pretrained.tar
# 或,下载ResNet18_vd的预训练模型
wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/ResNet18_vd_pretrained.tar
# 或,下载ResNet50_vd的预训练模型
wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_vd_ssld_pretrained.tar

# 解压预训练模型文件,以MobileNetV3为例
tar -xf ./pretrain_models/MobileNetV3_large_x0_5_pretrained.tar ./pretrain_models/

# 注:正确解压backbone预训练权重文件后,文件夹下包含众多以网络层命名的权重文件,格式如下:
./pretrain_models/MobileNetV3_large_x0_5_pretrained/
  └─ conv_last_bn_mean
  └─ conv_last_bn_offset
  └─ conv_last_bn_scale
  └─ conv_last_bn_variance
  └─ ......

启动训练

# 单机单卡训练 mv3_db 模型
python3 tools/train.py -c configs/det/det_mv3_db.yml \
     -o Global.pretrain_weights=./pretrain_models/MobileNetV3_large_x0_5_pretrained/
# 单机多卡训练,通过 --gpus 参数设置使用的GPU ID
python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/det/det_mv3_db.yml \
     -o Global.pretrain_weights=./pretrain_models/MobileNetV3_large_x0_5_pretrained/

如果安装的是cpu版本,请将配置文件中的use_gpu字段修改为false

训练参数

  • -m 配置paddle
  • –gpus 使用的GPU
  • -c 选择配置文件
  • -o 配置配置文件中的内容
  • pretrain_weights: 使用的模型目录
  • Optimizer.base_lr: 训练时的学习率

断点训练

如果训练程序中断,如果希望加载训练中断的模型从而恢复训练,可以通过指定Global.checkpoints指定要加载的模型路径(如./output/det_r50_vd/latest):

python3 tools/train.py -c configs/det/det_mv3_db.yml -o Global.checkpoints=./output/det_mv3_vd/latest

注意Global.checkpoints的优先级高于Global.pretrain_weights的优先级,即同时指定两个参数时,优先加载Global.checkpoints指定的模型,如果Global.checkpoints指定的模型路径有误,会加载Global.pretrain_weights指定的模型。

指标评估

PaddleOCR计算三个OCR检测相关的指标,分别是:Precision、Recall、Hmean。

运行如下代码,根据配置文件det_db_mv3.ymlsave_res_path指定的测试集检测结果文件,计算评估指标。

评估时设置后处理参数box_thresh=0.5unclip_ratio=1.5,使用不同数据集、不同模型训练,可调整这两个参数进行优化 训练中模型参数默认保存在Global.save_model_dir目录下。在评估指标时,需要设置Global.pretrained_model指向保存的参数文件。

python3 tools/eval.py -c configs/det/det_mv3_db.yml  -o Global.pretrained_model="./output/det_mv3_vd/best_accuracy" PostProcess.box_thresh=0.5 PostProcess.unclip_ratio=1.5
  • 注:box_threshunclip_ratio是DB后处理所需要的参数,在评估EAST模型时不需要设置

测试检测效果

测试单张图像的检测效果

python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/img_10.jpg" Global.pretrained_model="./output/det_db/best_accuracy" Global.load_static_weights=false

测试DB模型时,调整后处理阈值,

python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/img_10.jpg" Global.pretrained_model="./output/det_db/best_accuracy" Global.load_static_weights=false PostProcess.box_thresh=0.6 PostProcess.unclip_ratio=1.5

测试文件夹下所有图像的检测效果

python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/" Global.pretrained_model="./output/det_db/best_accuracy" Global.load_static_weights=false

文本识别

启动训练

PaddleOCR提供了训练脚本、评估脚本和预测脚本,本节将以 CRNN 识别模型为例:

首先下载pretrain model,您可以下载训练好的模型在 icdar2015 数据上进行finetune

cd PaddleOCR/
# 下载MobileNetV3的预训练模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar
# 解压模型参数
cd pretrain_models
tar -xf rec_mv3_none_bilstm_ctc_v2.0_train.tar && rm -rf rec_mv3_none_bilstm_ctc_v2.0_train.tar

开始训练:

如果您安装的是cpu版本,请将配置文件中的 use_gpu 字段修改为false

# GPU训练 支持单卡,多卡训练,通过--gpus参数指定卡号
# 训练icdar15英文数据 训练日志会自动保存为 "{save_model_dir}" 下的train.log
python3 -m paddle.distributed.launch --gpus '0,1,2,3'  tools/train.py -c configs/rec/rec_icdar15_train.yml
  • 数据增强

PaddleOCR提供了多种数据增强方式,如果您希望在训练时加入扰动,请在配置文件中设置 distort: true

默认的扰动方式有:颜色空间转换(cvtColor)、模糊(blur)、抖动(jitter)、噪声(Gasuss noise)、随机切割(random crop)、透视(perspective)、颜色反转(reverse)。

训练过程中每种扰动方式以50%的概率被选择,具体代码实现请参考:img_tools.py

由于OpenCV的兼容性问题,扰动操作暂时只支持Linux

  • 训练

PaddleOCR支持训练和评估交替进行, 可以在 configs/rec/rec_icdar15_train.yml 中修改 eval_batch_step 设置评估频率,默认每500个iter评估一次。评估过程中默认将最佳acc模型,保存为 output/rec_CRNN/best_accuracy

如果验证集很大,测试将会比较耗时,建议减少评估次数,或训练完再进行评估。

其他模型配置请参考PaddleOCR github

评估

评估数据集可以通过 configs/rec/rec_icdar15_train.yml 修改Eval中的 label_file_path 设置。

# GPU 评估, Global.pretrained_model 为待测权重
python3 -m paddle.distributed.launch --gpus '0' tools/eval.py -c configs/rec/rec_icdar15_train.yml -o Global.pretrained_model={path/to/weights}/best_accuracy

预测

  • 训练引擎的预测

使用 PaddleOCR 训练好的模型,可以通过以下脚本进行快速预测。

默认预测图片存储在 infer_img 里,通过 -o Global.pretrained_model 指定权重:

# 预测英文结果
python3 tools/infer_rec.py -c configs/rec/rec_icdar15_train.yml -o Global.pretrained_model={path/to/weights}/best_accuracy Global.load_static_weights=false Global.infer_img=doc/imgs_words/en/word_1.png

预测使用的配置文件必须与训练一致,如您通过 python3 tools/train.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml 完成了中文模型的训练, 您可以使用如下命令进行中文模型预测。

# 预测中文结果
python3 tools/infer_rec.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml -o Global.pretrained_model={path/to/weights}/best_accuracy Global.load_static_weights=false Global.infer_img=doc/imgs_words/ch/word_1.jpg

文本角度分类

训练

启动训练

将准备好的txt文件和图片文件夹路径分别写入配置文件的 Train/Eval.dataset.label_file_listTrain/Eval.dataset.data_dir 字段下,Train/Eval.dataset.data_dir字段下的路径和文件里记载的图片名构成了图片的绝对路径。

PaddleOCR提供了训练脚本、评估脚本和预测脚本。

开始训练:

如果您安装的是cpu版本,请将配置文件中的 use_gpu 字段修改为false

# GPU训练 支持单卡,多卡训练,通过 '--gpus' 指定卡号。
# 启动训练,下面的命令已经写入train.sh文件中,只需修改文件里的配置文件路径即可
python3 -m paddle.distributed.launch --gpus '0,1,2,3,4,5,6,7'  tools/train.py -c configs/cls/cls_mv3.yml

数据增强

PaddleOCR提供了多种数据增强方式,如果您希望在训练时加入扰动,请在配置文件中取消Train.dataset.transforms下的RecAugRandAugment字段的注释。

默认的扰动方式有:颜色空间转换(cvtColor)、模糊(blur)、抖动(jitter)、噪声(Gasuss noise)、随机切割(random crop)、透视(perspective)、颜色反转(reverse),随机数据增强(RandAugment)。

训练过程中除随机数据增强外每种扰动方式以50%的概率被选择,具体代码实现请参考: rec_img_aug.py randaugment.py

由于OpenCV的兼容性问题,扰动操作暂时只支持linux

训练

PaddleOCR支持训练和评估交替进行, 可以在 configs/cls/cls_mv3.yml 中修改 eval_batch_step 设置评估频率,默认每1000个iter评估一次。训练过程中将会保存如下内容:

├── best_accuracy.pdopt # 最佳模型的优化器参数
├── best_accuracy.pdparams # 最佳模型的参数
├── best_accuracy.states # 最佳模型的指标和epoch等信息
├── config.yml # 本次实验的配置文件
├── latest.pdopt # 最新模型的优化器参数
├── latest.pdparams # 最新模型的参数
├── latest.states # 最新模型的指标和epoch等信息
└── train.log # 训练日志

如果验证集很大,测试将会比较耗时,建议减少评估次数,或训练完再进行评估。

注意,预测/评估时的配置文件请务必与训练一致

评估

评估数据集可以通过修改configs/cls/cls_mv3.yml文件里的Eval.dataset.label_file_list 字段设置。

export CUDA_VISIBLE_DEVICES=0
# GPU 评估, Global.checkpoints 为待测权重
python3 tools/eval.py -c configs/cls/cls_mv3.yml -o Global.checkpoints={path/to/weights}/best_accuracy

预测

  • 训练引擎的预测

使用 PaddleOCR 训练好的模型,可以通过以下脚本进行快速预测。

通过 Global.infer_img 指定预测图片或文件夹路径,通过 Global.checkpoints 指定权重:

# 预测分类结果
python3 tools/infer_cls.py -c configs/cls/cls_mv3.yml -o Global.pretrained_model={path/to/weights}/best_accuracy Global.load_static_weights=false Global.infer_img=doc/imgs_words/ch/word_1.jpg

配置文件说明

Global

字段

用途

默认值

备注

use_gpu

设置代码是否在gpu运行

true

\

epoch_num

最大训练epoch数

500

\

log_smooth_window

log队列长度,每次打印输出队列里的中间值

20

\

print_batch_step

设置打印log间隔

10

\

save_model_dir

设置模型保存路径

output/{算法名称}

\

save_epoch_step

设置模型保存间隔

3

\

eval_batch_step

设置模型评估间隔

2000 或 [1000, 2000]

2000 表示每2000次迭代评估一次,[1000, 2000]表示从1000次迭代开始,每2000次评估一次

cal_metric_during_train

设置是否在训练过程中评估指标,此时评估的是模型在当前batch下的指标

true

\

load_static_weights

设置预训练模型是否是静态图模式保存(目前仅检测算法需要)

true

\

pretrained_model

设置加载预训练模型路径

./pretrain_models/CRNN/best_accuracy

\

checkpoints

加载模型参数路径

None

用于中断后加载参数继续训练

use_visualdl

设置是否启用visualdl进行可视化log展示

False

教程地址

infer_img

设置预测图像路径或文件夹路径

./infer_img

|

character_dict_path

设置字典路径

./ppocr/utils/ppocr_keys_v1.txt

\

max_text_length

设置文本最大长度

25

\

character_type

设置字符类型

ch

en/ch, en时将使用默认dict,ch时使用自定义dict

use_space_char

设置是否识别空格

True

仅在 character_type=ch 时支持空格

label_list

设置方向分类器支持的角度

[‘0’,‘180’]

仅在方向分类器中生效

save_res_path

设置检测模型的结果保存地址

./output/det_db/predicts_db.txt

仅在检测模型中生效

Optimizer (ppocr/optimizer)

字段

用途

默认值

备注

name

优化器类名

Adam

目前支持Momentum,Adam,RMSProp, 见ppocr/optimizer/optimizer.py

beta1

设置一阶矩估计的指数衰减率

0.9

\

beta2

设置二阶矩估计的指数衰减率

0.999

\

clip_norm

所允许的二范数最大值

\

lr

设置学习率decay方式

-

\

name

学习率decay类名

Cosine

目前支持Linear,Cosine,Step,Piecewise, 见ppocr/optimizer/learning_rate.py

learning_rate

基础学习率

0.001

\

regularizer

设置网络正则化方式

-

\

name

正则化类名

L2

目前支持L1,L2, 见ppocr/optimizer/regularizer.py

factor

学习率衰减系数

0.00004

\

Architecture (ppocr/modeling)

在ppocr中,网络被划分为Transform,Backbone,Neck和Head四个阶段

字段

用途

默认值

备注

model_type

网络类型

rec

目前支持rec,det,cls

algorithm

模型名称

CRNN

支持列表见algorithm_overview

Transform

设置变换方式

-

目前仅rec类型的算法支持, 具体见ppocr/modeling/transform

name

变换方式类名

TPS

目前支持TPS

num_fiducial

TPS控制点数

20

上下边各十个

loc_lr

定位网络学习率

0.1

\

model_name

定位网络大小

small

目前支持small,large

Backbone

设置网络backbone类名

-

具体见ppocr/modeling/backbones

name

backbone类名

ResNet

目前支持MobileNetV3,ResNet

layers

resnet层数

34

支持18,34,50,101,152,200

model_name

MobileNetV3 网络大小

small

支持small,large

Neck

设置网络neck

-

具体见ppocr/modeling/necks

name

neck类名

SequenceEncoder

目前支持SequenceEncoder,DBFPN

encoder_type

SequenceEncoder编码器类型

rnn

支持reshape,fc,rnn

hidden_size

rnn内部单元数

48

\

out_channels

DBFPN输出通道数

256

\

Head

设置网络Head

-

具体见ppocr/modeling/heads

name

head类名

CTCHead

目前支持CTCHead,DBHead,ClsHead

fc_decay

CTCHead正则化系数

0.0004

\

k

DBHead二值化系数

50

\

class_dim

ClsHead输出分类数

2

\

Loss (ppocr/losses)

字段

用途

默认值

备注

name

网络loss类名

CTCLoss

目前支持CTCLoss,DBLoss,ClsLoss

balance_loss

DBLossloss中是否对正负样本数量进行均衡(使用OHEM)

True

\

ohem_ratio

DBLossloss中的OHEM的负正样本比例

3

\

main_loss_type

DBLossloss中shrink_map所采用的的loss

DiceLoss

支持DiceLoss,BCELoss

alpha

DBLossloss中shrink_map_loss的系数

5

\

beta

DBLossloss中threshold_map_loss的系数

10

\

PostProcess (ppocr/postprocess)

字段

用途

默认值

备注

name

后处理类名

CTCLabelDecode

目前支持CTCLoss,AttnLabelDecode,DBPostProcess,ClsPostProcess

thresh

DBPostProcess中分割图进行二值化的阈值

0.3

\

box_thresh

DBPostProcess中对输出框进行过滤的阈值,低于此阈值的框不会输出

0.7

\

max_candidates

DBPostProcess中输出的最大文本框数量

1000

unclip_ratio

DBPostProcess中对文本框进行放大的比例

2.0

\

Metric (ppocr/metrics)

字段

用途

默认值

备注

name

指标评估方法名称

CTCLabelDecode

目前支持DetMetric,RecMetric,ClsMetric

main_indicator

主要指标,用于选取最优模型

acc

对于检测方法为hmean,识别和分类方法为acc

Dataset (ppocr/data)

字段

用途

默认值

备注

dataset

每次迭代返回一个样本

-

-

name

dataset类名

SimpleDataSet

目前支持SimpleDataSetLMDBDateSet

data_dir

数据集图片存放路径

./train_data

\

label_file_list

数据标签路径

["./train_data/train_list.txt"]

dataset为LMDBDateSet时不需要此参数

ratio_list

数据集的比例

[1.0]

若label_file_list中有两个train_list,且ratio_list为[0.4,0.6],则从train_list1中采样40%,从train_list2中采样60%组合整个dataset

transforms

对图片和标签进行变换的方法列表

[DecodeImage,CTCLabelEncode,RecResizeImg,KeepKeys]

ppocr/data/imaug

loader

dataloader相关

-

shuffle

每个epoch是否将数据集顺序打乱

True

\

batch_size_per_card

训练时单卡batch size

256

\

drop_last

是否丢弃因数据集样本数不能被 batch_size 整除而产生的最后一个不完整的mini-batch

True

\

num_workers

用于加载数据的子进程个数,若为0即为不开启子进程,在主进程中进行数据加载

8

错误解决方案

当文本识别使用ResNet50时,会出现DataLoader reader thread raised an exception!

将配置文件的train loader batch_size_per_card改为8即可