赞
踩
自我熟悉训练部署流程,记录遇到的问题与解决方案。
参考:https://blog.csdn.net/qq_52852432/article/details/131817619
版本型号:
1.CPU版本
2.PaddleOcr-main 使用训练集v4
创建虚拟环境:
conda create -n paddleTest python=3.8
安装paddle开始使用_飞桨-源于产业实践的开源深度学习平台
conda install paddlepaddle==2.6.1 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
pycharm打开PaddleOCR-Main 激活虚拟环境 后安装相关配置
打开anaconda终端,进入PaddleOCR-Main目录下激活环境并输入以下指令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
下载PaddleOCR推理模型:分为文本检测det,文本识别rec
PaddleOCR/doc/doc_ch/models_list.md at main · PaddlePaddle/PaddleOCR · GitHub
在PaddleOCR-Main文件夹下创建文件夹inferencr_model,将上述两个推理模型解压到文件中
打开anaconda进入PaddleOCR-Main路径中,并激活当前的虚拟环境,输入下列代码测试推理结果
--image_dir="D:\DeepLearn\box\images\test.jpg" 可以是文件或文件夹,看测试需求是单一图像还是多图像
--det_model_dir="./inference_model/ch_PP-OCRv4_det_infer/" 文字检测模型路径
--rec_model_dir="./inference_model/ch_PP-OCRv4_rec_infer/" 文字识别模型路径
python tools/infer/predict_system.py --image_dir="D:\DeepLearn\box\images\1-122720001-OCR-AH-A01.jpg" --det_model_dir="./inference_model/ch_PP-OCRv4_det_infer/" --rec_model_dir="./inference_model/ch_PP-OCRv4_rec_infer/"
测试结果如下:
开始制作自己的数据集:
因为PaddleOCR-Main中没有PPOCRLabel文件夹,我是使用的2.7版本中的PPOCRLabel进行数据的标注。
(这里我比较抽象,我又配了一套2.7版本的虚拟环境,为了做这个标注)
在anaconda中,激活虚拟环境后,进入到此路径下D:\DeepLearn\PaddleOCR-release-2.7\PPOCRLabel,输入以下代码打开打标软件。
python PPOCRLabel.py
进入后左上角读取需要标注的文件夹后进行图像的读取,这里可以使用矩形标注或多边形标注
左下角auto recognition 为自动标注,后一张一张检查,标注为自己需要的效果。
全部标注完毕后,点击左上角file-export label后在点击 exprot Recognition Result 。完成后再文件夹多出四个文件fileState,Label,rec_gt, crop_img。其中crop_img中的图片用来训练文字识别模型,fileState记录图片的打标完成与否,Label为训练文字检测模型的标签,rec_gt为训练文字识别模型的标签。
下面制作数据集,在PaddleOCR-realse-2.7目录下建立train_data文件夹,将刚刚标签生成的driving文件放入里面。
然后打开 anaconda 路径改到PaddleOCR-realse-2.7,激活虚拟环境后,输入一下代码进行数据集的划分。
python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../train_data/drivingData
输入指令之后,在train_data文件夹下会出现以下文件,其中det是用来训练文字检测的数据集,rec是用来训练文字识别的数据集。此时可以删去drivingData。
此时,数据集制作完毕
训练文字检测模型:
下载之后在PaddleOCR-Main根目录下建立pretrain_models文件夹,并将训练模型解压至该文件夹下。如下图所示:
配置文字检测文件:
打开 PaddleOCR-Main/configs/det/ch_PP-OCRv4/ch_PP-OCRv4_det_cml.yml
配置文件解释:PaddleOCR/doc/doc_ch/config.md at main · PaddlePaddle/PaddleOCR · GitHub
这里只需修改如下几点:
开始训练
打开anaconda,激活虚拟环境,进入到PaddleOCR-Main路径下,输入下列代码开始训练:
python tools/train.py -c configs/det/ch_PP-OCRv4/ch_PP-OCRv4_det_cml.yml
这里我在运行的过程中出现了三个个问题:
1.数据格式不对一直报错 :如此图所示
2.是成功运行后卡在 INFO: During the training process, after the 0th iteration, an evaluation is run every 2000 iterations 不运行
3.OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
--------------------------------------分割线------------------------------------------------------
问题1:检查train.txt val.txt test.txt 的文件格式 代码如下,主要作用是判断空格位置是否为/t
- file_path = "D://DeepLearn//PaddleOCR-main//train_data//rec//val.txt"
- flie = open(file_path,"rb")
- print(flie.read())
- flie.close()
输出结果如下:文件名后面是\t,最后一行结尾是\r\n,符合此数据格式就可以正常开始训练
D:\\DeepLearn\\PaddleOCR-main\\train_data\\det\\val\\1-123113001-OCR-AH-A01.jpg\t[{"transcription": "MCU9154516", "points": [[6, 62], [809, 75], [807, 191], [5, 179]], "difficult": false}]\r\n
如果发现文件名后不是\t 则需要将此位置的空格更换为\t
- file_path = "D://DeepLearn//PaddleOCR-main//train_data//rec//val.txt"
- with open(file_path, 'r', encoding='utf-8') as file:
- lines = file.readlines()
-
- new_lines = []
- for line in lines:
- if '\t' not in line:
- # 如果没有找到制表符,则将空格替换为制表符
- line = line.replace(' ', '\t')
- # print(line)
- new_lines.append(line)
-
- with open(file_path, 'w', encoding='utf-8') as file:
- file.writelines(new_lines)
问题2:这个问题可能是cpu版本有点慢,实际是在训练只是很久不出结果,我将640*640的图像改为320*320就可以正常训练
问题3:在执行的.py文件最上方,加入代码
- import os
- os.environ['KMP_DUPLICATE_LIB_OK']='True'
训练文字识别模型:将上述det的路径更换为ref即可。
模型测试:
打开anaconda,激活环境与目录到PaddleOCR-Main下,输入下列代码分别测试det与ref的训练效果
configs/det/ch_PP-OCRv4/ch_PP-OCRv4_det_cml.yml 配置文件
Global.pretrained_model=output/ch_PP-OCRv4/latest.pdparams 需要测试的训练好的文件
Global.infer_img="D:/DeepLearn/box/train_data/det/test/1-122749001-OCR-LB-C02.jpg 待测试图像
- python tools/infer_det.py -c configs/det/ch_PP-OCRv4/ch_PP-OCRv4_det_cml.yml -o Global.pretrained_model=output/ch_PP-OCRv4/latest.pdparams Global.infer_img="D:/DeepLearn/box/train_data/det/test/1-122749001-OCR-LB-C02.jpg"
- python tools/infer_rec.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.pretrained_model=output/rec_ppocr_v4/latest.pdparams Global.infer_img="D:/DeepLearn/PaddleOCR-main/train_data/rec/test/1-123210001-OCR-AS-B01_crop_1.jpg"
转换为推理模型:
打开anaconda,激活环境与目录到PaddleOCR-Main下,
./configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml 为配置文件
Global.pretrained_model="./output/rec_ppocr_v4/latest.pdparams 为训练后的结果文件
Global.save_inference_dir="./inference_model/rec/ 保存的路径
- python tools/export_model.py -c "./configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml" -o Global.pretrained_model="./output/rec_ppocr_v4/latest.pdparams" Global.save_inference_dir="./inference_model/rec/"
- python tools/export_model.py -c "./configs/det/ch_PP-OCRv4/ch_PP-OCRv4_det_cml.yml" -o Global.pretrained_model="./output/ch_PP-OCRv4/latest.pdparams" Global.save_inference_dir="./inference_model/det/"
执行后 文件目录如下:
det与rec为最后的推理模型,可以使用 predict_system.py验证:
image_dir="D:/DeepLearn/box/train_data/det/test" 图像路径
det_model_dir="./inference_model/det/Student" 选择det下的生成的训练文件
rec_model_dir="./inference_model/ch_PP-OCRv4_rec_infer 选择rec下生成的训练文件
- python tools/infer/predict_system.py --image_dir="D:/DeepLearn/box/train_data/det/test" --det_model_dir="./inference_model/det/Student" --rec_model_dir="./inference_model/ch_PP-OCRv4_rec_infer"
- python tools/infer/predict_system.py --image_dir="D:/DeepLearn/box/train_data/det/test" --det_model_dir="./inference_model/ch_PP-OCRv4_det_infer/" --rec_model_dir="./inference_model/ch_PP-OCRv4_rec_infer"
最后得到结果:
相比于之前,文字检测的框选有了很大的变动,基本达到预期效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。