当前位置:   article > 正文

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

paddleocr训练自己的数据集

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

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

  1. file_path = "D://DeepLearn//PaddleOCR-main//train_data//rec//val.txt"
  2. flie = open(file_path,"rb")
  3. print(flie.read())
  4. 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

  1. file_path = "D://DeepLearn//PaddleOCR-main//train_data//rec//val.txt"
  2. with open(file_path, 'r', encoding='utf-8') as file:
  3. lines = file.readlines()
  4. new_lines = []
  5. for line in lines:
  6. if '\t' not in line:
  7. # 如果没有找到制表符,则将空格替换为制表符
  8. line = line.replace(' ', '\t')
  9. # print(line)
  10. new_lines.append(line)
  11. with open(file_path, 'w', encoding='utf-8') as file:
  12. file.writelines(new_lines)

        问题2:这个问题可能是cpu版本有点慢,实际是在训练只是很久不出结果,我将640*640的图像改为320*320就可以正常训练

        问题3:在执行的.py文件最上方,加入代码

  1. import os
  2. 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   待测试图像
  1. 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"
  2. 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/  保存的路径
  1. 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/"
  2. 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下生成的训练文件
  1. 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"
  2. 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"

最后得到结果:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/946168
推荐阅读
相关标签
  

闽ICP备14008679号