赞
踩
目录
1.安装PPOCRLabel并为自己的数据打标签,构建数据集
代码:从网址中下载压缩包并解压缩得到名为“PaddleOCR-main”的文件夹(我直接放到了桌面上)。
- conda create --name padocr python=3.9
-
- # 检查是否是64位版本(基本上都是)
- python --version
- python -c "import platform;print(platform.architecture()[0]);print(platform.machine())"
飞桨PaddlePaddle-源于产业实践的开源深度学习平台
- conda activate padocr
-
- # 比自己电脑的cuda版本低就行,我这里下载的我电脑可以接受的最新的
- conda install paddlepaddle-gpu==2.6.1 cudatoolkit=11.6 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
-
- # 检查是否安装成功
- import paddle
- paddle.utils.run_check() # 如果出现PaddlePaddle is installed successfully!,说明已成功安装
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
如果训练自己的数据集,则不需要安装。
参考资料:
- pip install paddleocr==2.7.0.0 -i https://mirror.baidu.com/pypi/simple
-
- # 放一张图片在桌面上,测试安装是否成功
- cd Desktop
- paddleocr --image_dir img.pdf --use_angle_cls true --use_gpu false
在测试的过程中,出现了OMP的错误,显示如下。
解决该错误的方法如下(这里我同样属于情况一,删去其中一个,问题就解决了):
【补充,没有这些错误就不用看了】
注意:如果上面安装出现问题时,比如缺少shapely,可以采用如下的方法。
对于Windows环境用户:直接通过pip安装的shapely库可能出现[winRrror 126]找不到指定模块的问题
。建议从下面网址下载shapely安装包完成安装。
Links for shapely (tsinghua.edu.cn)
(1)下载shapely安装包并将其放置在“PaddleOCR-main”文件夹中
(2)安装shapely后再执行下载paddleocr的命令
- cd PaddleOCR-main
- pip install shapely-2.0.4-cp38-cp38-win_amd64.whl
参考:
- pip install PPOCRLabel -i https://pypi.tuna.tsinghua.edu.cn/simple
- # 完成后,位置在D:\anaconda3\envs\padocr\Lib\site-packages\PPOCRLabel
-
- # 选择标签模式来启动,一般选第一个【检测+识别】的即可
- PPOCRLabel --lang ch # 启动【普通模式】,用于打【检测+识别】场景的标签
- PPOCRLabel --lang ch --kie True # 启动 【KIE 模式】,用于打【检测+识别+关键字提取】场景的标签
- # 下面是官网给出的示例
- cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
- python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../train_data
-
- # 一定要注意:路径一定要设置正确!!!
- '''
- trainValTestRatio 是训练集、验证集、测试集的图像数量划分比例,根据实际情况设定,默认是6:2:2
- datasetRootPath 是PPOCRLabel标注的完整数据集存放路径。默认路径是 PaddleOCR-main/train_data 。
- 数据集在划分前应有如下结构:
- |-train_data
- |-crop_img
- |- word_001_crop_0.png
- |- word_002_crop_0.jpg
- |- word_003_crop_0.jpg
- | ...
- |- Label.txt
- |- rec_gt.txt
- |- word_001.png
- |- word_002.jpg
- |- word_003.jpg
- | ...
- '''
我的数据集的划分
- cd ./PPOCRLabel
- python gen_ocr_train_val_test.py --trainValTestRatio 7:2:1 --datasetRootPath ../train_data/carriages
-
- '''
- 划分前我数据集的结构:
- |- train_data
- |- carriages
- |- crop_img
- |- carriage1450036_1_crop_0.jpg
- |- carriage1450036_1_crop_1.jpg
- |- carriage1450036_2_crop_0.jpg
- | ...
- |- fileState.txt
- |- Label.txt
- |- rec_gt.txt
- |- Cache.cach
- |- carriage1450036_1.png
- |- carriage1450036_2.jpg
- |- carriage1500244_1.jpg
- | ...
- '''
- '''
- 划分后我数据集的结构:
- |- train_data
- |- carriages
- |- det
- |- train(图像)
- |- val
- |- test
- |- train.txt(标签)
- |- val.txt
- |- test.txt
- |- rec
- |- train
- |- val
- |- test
- |- train.txt
- |- val.txt
- |- test.txt
- '''
【补充】如果在ubuntu中运行划分数据集的命令的话,在修改fileState.txt中的路径后,会产生如下错误。
此时,只需要将gen_ocr_train_val_test.py中的 \\ 修改为 / 即可。
参考:PaddleOCR/applications/轻量级车牌识别.md at main · PaddlePaddle/PaddleOCR (github.com)
doc/doc_ch/models_list.md,在这里面下载预训练权重,并放在新建的pretrain_models中。
首先在汽车车牌号数据集下做初步的训练。
汽车车牌号数据集CCPD2020的文件结构如下:
|- train_data |- carriages |- det |- rec |- CCPD2020 |- ccpd_green |- train(图像) |- val |- test |- PPOCR |- train |- crop_imgs(图像) |- det.txt |- rec.txt |- val |- crop_imgs(图像) |- det.txt |- rec.txt |- test |- crop_imgs(图像) |- det.txt |- rec.txt
- # 首先,在汽车车牌号数据集CCPD2020上训练检测模型,具体过程可以前面参考链接里的内容
- python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=pretrain_models/ch_PP-OCRv3_det_distill_train/ch_PP-OCRv3_det_distill_train/student.pdparams Global.save_model_dir=output/det_carlicense Global.epoch_num=100 Global.eval_batch_step="[0, 772]" Optimizer.lr.name=Const Optimizer.lr.learning_rate=0.0005 Optimizer.lr.warmup_epoch=5 Optimizer.regularizer.factor= 5.0e-05 Train.dataset.data_dir=./train_data/CCPD2020/ccpd_green Train.dataset.label_file_list=[./train_data/CCPD2020/PPOCR/train/det.txt] Eval.dataset.data_dir=./train_data/CCPD2020/ccpd_green Eval.dataset.label_file_list=[./train_data/CCPD2020/PPOCR/val/det.txt]
-
- # 然后,利用在汽车车牌号数据集上训练得到的权重来训练车厢号数据集
- python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=./output/det_carlicense/best_accuracy.pdparams Global.save_model_dir=./output/PP-OCRv3_det Global.epoch_num=500 Optimizer.lr.name=Const Optimizer.lr.learning_rate=0.0005 Optimizer.lr.warmup_epoch=20 Optimizer.regularizer.factor=5.0e-05 Train.dataset.data_dir=./train_data/det/train/ Train.dataset.label_file_list=[./train_data/det/train.txt] Eval.dataset.data_dir=./train_data/det/val/ Eval.dataset.label_file_list=[./train_data/det/val.txt]
- # 注意:文本识别的训练需要有一个txt文件来存储数据集中出现的文字、数字、字母等。
- # 其位置放在ppocr/utils/train_carriage_mine.txt
-
- # 首先,在汽车车牌号数据集CCPD2020上训练识别模型,具体过程可以前面参考链接里的内容
- python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv3_rec_train/ch_PP-OCRv3_rec_train/student Global.save_model_dir=./output/rec_carlicense Global.character_dict_path=ppocr/utils/train_carriage_mine Global.use_amp=True Global.scale_loss=1024.0 Global.use_dynamic_loss_scaling=True Train.dataset.data_dir=./train_data/CCPD2020/PPOCR Train.dataset.label_file_list=[./train_data/CCPD2020/PPOCR/train/rec.txt] Eval.dataset.data_dir=./train_data/CCPD2020/PPOCR Eval.dataset.label_file_list=[./train_data/CCPD2020/PPOCR/val/rec.txt] # 混合精度训练
-
- # 然后,利用在汽车车牌号数据集上训练得到的权重训练车厢号数据集
- python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=./output/rec_carlicense/best_accuracy Global.save_model_dir=./output/PP-OCRv3_rec Global.character_dict_path=ppocr/utils/train_carriage_mine Global.use_amp=True Global.scale_loss=1024.0 Global.use_dynamic_loss_scaling=True Train.dataset.data_dir=./train_data/rec/train Train.dataset.label_file_list=[./train_data/rec/train.txt] Eval.dataset.data_dir=./train_data/rec/val Eval.dataset.label_file_list=[./train_data/rec/val.txt] # 混合精度训练
python tools/infer_det.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=./output/PP-OCRv3_det/best_accuracy.pdparams Global.infer_img="C:\Users\W.ChenY\Desktop\PaddleOCR-main\train_data\det\test\carriage1503954_3.jpg"
python tools/infer_rec.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=./output/PP-OCRv3_rec/best_accuracy.pdparams Global.infer_img="train_data/carriages/crop_img/carriage1505936_1_crop_1.jpg"
python tools/export_model.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=output/PP-OCRv3_det/best_accuracy.pdparams Global.save_inference_dir=output/infer_mine/det
python tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=output/PP-OCRv3_rec/best_accuracy.pdparams Global.save_inference_dir=output/infer_mine/rec
检测模型和识别模型同时使用
- # 注意:使用识别模型进行推理时,需要指定rec_char_dict_path
-
- # 单张图像检测+识别
- python tools/infer/predict_system.py --image_dir="train_data/carriages/carriage1553696_2.jpg" --det_model_dir="output/infer_mine/det" --rec_model_dir="output/infer_mine/rec" --use_angle_cls=false --draw_img_save_dir="./inference_results/use_infer" --rec_char_dict_path="ppocr/utils/train_carriage_mine"
-
- # 文件夹内全部图像检测+识别
- python tools/infer/predict_system.py --det_model_dir="output/infer_mine/det" --rec_model_dir="output/infer_mine/rec" --image_dir="train_data/carriages" --draw_img_save_dir=infer/fine-tune --use_dilation=true --rec_char_dict_path="ppocr/utils/train_carriage_mine"
只使用识别模型
python tools/infer/predict_rec.py --image_dir="train_data/carriages/crop_img/carriage1505936_1_crop_1.jpg" --rec_model_dir="output/infer_mine/rec" --rec_char_dict_path="ppocr/utils/train_carriage_mine"
- # 将gt和上一步保存的预测结果转换为端对端评测需要的数据格式,并根据转换后的数据进行端到端指标计算
-
- # 转换gt信息
- python tools/end2end/convert_ppocr_label.py --mode=gt --label_path="train_data/carriages/Label.txt" --save_folder=end2end/gt
-
- # 转换fine-tune预测信息
- python tools/end2end/convert_ppocr_label.py --mode=pred --label_path=infer/fine-tune/system_results.txt --save_folder=end2end/fine-tune
-
- # 将两者进行比对评估
- python tools/end2end/eval_end2end.py end2end/gt end2end/fine-tune
gt: fine_tune:
需要准备 Paddle2ONNX 模型转化环境,和 ONNXRuntime 预测环境。
注意:在安装以下环境时,参考NVIDIA - CUDA | onnxruntime,选择合适的版本号。
- pip install paddle2onnx -i https://pypi.tuna.tsinghua.edu.cn/simple/
- # 如果使用CPU进行推理
- pip install onnxruntime -i https://pypi.tuna.tsinghua.edu.cn/simple/
- # 如果使用GPU进行推理
- pip install onnxruntime-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple/
注意:在该步骤中,由于paddlepaddle-gpu版本的问题,转换识别模型时出现了错误,即: [ERROR] Cannot found attribute beta in op: swish
解决方法:
(1)首先,我的paddlepaddle-gpu版本为2.6.1,需要降低为2.5.2。
python -m pip install -U paddlepaddle-gpu==2.5.2 -i https://mirror.baidu.com/pypi/simple
(2)然后,将检测模型和识别模型重新转换为推理模型。(步骤在上面,即:二(四))
(3)最后,使用如下命令即可成功转出onnx。
- # 检测
- paddle2onnx --model_dir ./output/infer_mine/det --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./inference/det_onnx/model.onnx --opset_version 11 --enable_onnx_checker True
-
- # 识别
- paddle2onnx --model_dir ./output/infer_mine/rec --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./inference/rec_onnx/model.onnx --opset_version 11 --enable_onnx_checker True
-
-
- # 分类(这个我用不到)
- paddle2onnx --model_dir ./inference/ch_ppocr_mobile_v2.0_cls_infer --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./inference/cls_onnx/model.onnx --opset_version 11 --enable_onnx_checker True
python -m paddle2onnx.optimize --input_model=inference/det_onnx/model.onnx --output_model=inference/det_onnx/model.onnx --input_shape_dict="{'x': [-1,3,-1,-1]}"
python tools/infer/predict_system.py --use_gpu=True --use_onnx=True --det_model_dir=./inference/det_onnx/model.onnx --rec_model_dir=./inference/rec_onnx/model.onnx --image_dir=./train_data/carriages --draw_img_save_dir="./inference_results/use_onnx" --rec_char_dict_path="ppocr/utils/train_carriage_mine"
--------------------------------------------截止--------------------------------------------
【补充】
车号识别模型的验证和推理
- python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
-
- python tools/infer_rec.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=output/rec_carlicense/best_accuracy.pdparams Global.infer_img="图像绝对路径"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。