PaddleOCR模型训练
Paddle OCR 模型训练
参考链接:https://blog.csdn.net/cyj972628089/article/details/136444512
1、环境安装
(1)安装PaddlePaddle 2.0
(2)PaddleOCR 工程下载
git clone https://github.com/PaddlePaddle/PaddleOCR
(3)第三方库安装
cd PaddleOCR
pip install -r requirements.txt
2、数据集制作
(1)打标工具安装
pip install PPOCRLabel # 安装
(2)数据标注
选择标签模式来启动
PPOCRLabel --lang ch # 启动【普通模式】,用于打【检测+识别】场景的标签
PPOCRLabel --lang ch --kie True # 启动 【KIE 模式】,用于打【检测+识别+关键字提取】场景的标签
导出标记结果和导出识别结果两项
(3)数据划分
cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
在运行前,需要修改gen_ocr_train_val_test.py中第42行:
imagePath = os.path.join(dataAbsPath, "{}\{}".format(args.recImageDirName, imageName))
开始划分数据集
python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../train_data
3、模型训练
(1)预训练模型下载
cd PaddleOCR
使用该指令下载需要的预训练模型
wget -P ./pretrained_models/ https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_train.tar
解压预训练模型文件
tar -xf ./pretrained_models/ch_PP-OCRv4_rec_train.tar -C pretrained_models
(2)训练参数配置
修改配置文件configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml
epoch_num: 100 # 训练epoch数
save_model_dir: ./output/ch_PP-OCR_v4_rec
save_epoch_step: 10
eval_batch_step: [0, 100] # 评估间隔,每隔100step评估一次
pretrained_model: ./pretrained_models/ch_PP-OCRv4_rec_train/student # 预训练模型路径
lr:
name: Cosine # 修改学习率衰减策略为Cosine
learning_rate: 0.0001 # 修改fine-tune的学习率
warmup_epoch: 2 # 修改warmup轮数
Train:
dataset:
name: MultiScaleDataSet
data_dir: ./train_data/
ext_op_transform_idx: 1
label_file_list:
- ./train_data/rec/train.txt
Eval:
dataset:
name: SimpleDataSet
data_dir: ./train_data/
label_file_list:
- ./train_data/rec/val.txt
(3)开始训练模型
开始训练识别模型
python tools/train.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml
训练报错:
File "D:\paddle_ocr\PaddleOCR-release-2.7\tools\program.py", line 656, in eval
metric['fps'] = total_frame / total_time
ZeroDivisionError: float division by zero
需要修改验证集的loder配置 batch_size_per_card ,按照验证集数量进行合理配置
如验证集只有10张,可配置为2或5
loader:
shuffle: false
drop_last: false
batch_size_per_card: 1
num_workers: 4
4、验证模型
python tools/eval.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.pretrained_model="./output/rec_ppocr_v4/best_accuracy"
5、模型导出
(1)保存推理模型:
python tools/export_model.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.pretrained_model="./output/rec_ppocr_v4/best_accuracy" Global.save_inference_dir="./inference/ch_PP-OCRv4_rec/"
(2)模型格式转换:
paddle2onnx 包安装:
pip install paddle2onnx
开始转换格式
paddle2onnx --model_dir ./inference/ch_PP-OCRv4_rec/ --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./inference/ch_PP-OCRv4_rec/ch_PP-OCRv4_rec.onnx --opset_version 11 --enable_onnx_checker True
6、模型推理
python tools/infer/predict_rec.py --image_dir="./train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg" --rec_model_dir="./inference/ch_PP-OCRv4_rec/"
联合推理
使用方向分类器
python tools/infer/predict_system.py --image_dir="./train_data/handwrite/HWDB2.0Test_images/" --det_model_dir="./ch_PP-OCRv4_det_infer/" --cls_model_dir="./ch_ppocr_mobile_v2.0_cls_infer/" --rec_model_dir="./inference/ch_PP-OCRv4_rec/" --use_angle_cls=true
python tools/infer/predict_system.py --image_dir="./train_data/rec/test/" --det_model_dir="./inference/ch_PP-OCRv4_det_infer/" --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" --rec_model_dir="./inference/ch_PP-OCRv4_rec/" --use_angle_cls=true