使用PaddleOcr训练自己数据集CPU版本

自我熟悉训练部署流程,记录遇到的问题与解决方案。

参考: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"

最后得到结果:

        相比于之前,文字检测的框选有了很大的变动,基本达到预期效果。

使用PaddleOCR训练自己的数据集,首先需要准备训练数据。训练数据应包含两个主要部分:图像和对应的标注信息。图像是待识别的文本图像,标注信息是图像中文本的位置框和对应的文本内容。 接下来,需要将训练数据转换为PaddleOCR可接受的格式。可以使用LabelImg等工具对图像进行标注,并将标注信息保存为XML或JSON格式。然后使用PaddleOCR提供的脚本将标注信息转换为PaddleOCR所需的格式,如PaddleOCR提供的demo中的数据格式。 在数据准备好之后,需要配置PaddleOCR训练参数。可以通过修改PaddleOCR提供的训练配置文件来设置训练的参数,如网络结构、学习率等。 接下来,运行PaddleOCR训练脚本,开始训练自己的数据集。在训练过程中,PaddleOCR使用标注信息进行模型的训练和优化。可以根据设定的训练轮数等参数来控制训练过程的长度。 训练完成后,可以使用训练好的模型对新的图像进行文本识别。可以使用PaddleOCR提供的预测脚本,将图像输入模型,得到文本识别结果。 需要注意的是,在整个训练过程中,可能需要对数据集进行多次的迭代和调优,才能得到较好的识别效果。可以根据实际情况进行反复训练和调整。 总之,使用PaddleOCR训练自己的数据集需要准备标注好的训练数据,配置训练参数,运行训练脚本,并反复迭代和调整,最终得到满意的文本识别模型。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值