一、前言
拿文字识别场景举例:文字识别也是图像领域一个常见问题。然而,对于自然场景图像,首先要定位图像中的文字位置,然后才能进行识别。 所以一般来说,从自然场景图片中进行文字识别,需要包括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 ,分别是MobileNetV3 、ResNet50_vd , 您可以根据需求使用PaddleClas中的模型更换backbone。
!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
!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算法的检测模型
!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
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,分别是MobileNetV3 、ResNet50_vd , 您可以根据需求使用PaddleClas中的模型更换backbone。 本节将以 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使用
|