ppocrv5自己数据集训练识别踩坑指南

PP-OCRv5自定义数据集训练识别踩坑指南
部署运行你感兴趣的模型镜像

使用版本介绍:

显卡:A5000

CUDA:11.8

cudnn=8.9.2 or 8.7

torch=2.1.1+cu118

torchaudio=2.1.2+cu118

torchvision=0.16.2+cu118

numpy=2.0.1

paddleocr=3.1.0

PaddleOCR-release-3.1

paddlepaddle-gpu=3.1.0

paddlex=3.1.3

pandas=2.3.0

检测配置:config/PP-OCRv5/PP-OCRv5_mobile_det.yml

识别配置: config/PP-OCRv5/PP-OCRv5_mobile_rec.yml

检测训练模型:PP-OCRv5_mobile_det_pretrained.pdparams

识别训练模型:PP-OCRv5_mobile_det_pretrained.pdparams

两次训练:文字检测训练模型det,文字识别训练模型rec

导出训练模型:导出名称可自定义分别位infer_det,infer_rec导出模型文件夹里面有3个文件分别是.json,.yml,.pdiparams,其中yml文件有大坑,Global:model_name有特定名称要求,model_name必须在下面这些范围内,不然会报错:Error: Model name mismatch

[STFPM,  PP-DocBee-2B,  PP-DocBee-7B,  PP-Chart2Table,  PP-DocBee2-3B,  PP-ShiTuV2_rec, 

 PP-ShiTuV2_rec_CLIP_vit_base,  PP-ShiTuV2_rec_CLIP_vit_large,  MobileFaceNet,  

ResNet50_face,  LaTeX_OCR_rec,  UniMERNet,  PP-FormulaNet-S,  PP-FormulaNet-L, 

 PP-FormulaNet_plus-S,  PP-FormulaNet_plus-M,  PP-FormulaNet_plus-L,  

CLIP_vit_base_patch16_224,  CLIP_vit_large_patch14_224,  ConvNeXt_tiny,  ConvNeXt_small,
 
 ConvNeXt_base_224,  ConvNeXt_base_384,  ConvNeXt_large_224,  ConvNeXt_large_384, 

 MobileNetV1_x0_25,  MobileNetV1_x0_5,  MobileNetV1_x0_75,  MobileNetV1_x1_0, 

 
MobileNetV2_x0_25,  MobileNetV2_x0_5,  MobileNetV2_x1_0,  MobileNetV2_x1_5,  

MobileNetV2_x2_0,  MobileNetV3_large_x0_35,  MobileNetV3_large_x0_5,  

MobileNetV3_large_x0_75,  MobileNetV3_large_x1_0,  MobileNetV3_large_x1_25, 

 MobileNetV3_small_x0_35,  MobileNetV3_small_x0_5,  MobileNetV3_small_x0_75, 

 MobileNetV3_small_x1_0,  MobileNetV3_small_x1_25,  MobileNetV4_conv_small,  

MobileNetV4_conv_medium,  MobileNetV4_conv_large,  MobileNetV4_hybrid_medium,  

MobileNetV4_hybrid_large,  PP-HGNet_tiny,  PP-HGNet_small,  PP-HGNet_base,  

PP-HGNetV2-B0,  PP-HGNetV2-B1,  PP-HGNetV2-B2,  PP-HGNetV2-B3,  PP-HGNetV2-B4,  

PP-HGNetV2-B5,  PP-HGNetV2-B6,  PP-LCNet_x0_25,  PP-LCNet_x0_25_textline_ori,  PP-LCNet_x0_35, 

 PP-LCNet_x0_5,  PP-LCNet_x0_75,  PP-LCNet_x1_0,  PP-LCNet_x1_0_doc_ori, 

 PP-LCNet_x1_0_textline_ori,  PP-LCNet_x1_5,  PP-LCNet_x2_0,  PP-LCNet_x2_5, 

 PP-LCNetV2_small,  PP-LCNetV2_base,  PP-LCNetV2_large,  ResNet101,  ResNet152,  

ResNet18,  ResNet34,  ResNet50,  ResNet200_vd,  ResNet101_vd,  ResNet152_vd,  

ResNet18_vd,  ResNet34_vd,  ResNet50_vd,  SwinTransformer_tiny_patch4_window7_224,

  SwinTransformer_small_patch4_window7_224,  SwinTransformer_base_patch4_window7_224, 

 SwinTransformer_base_patch4_window12_384,  SwinTransformer_large_patch4_window7_224, 
 
SwinTransformer_large_patch4_window12_384,  StarNet-S1,  StarNet-S2,  StarNet-S3,  

StarNet-S4,  FasterNet-L,  FasterNet-M,  FasterNet-S,  FasterNet-T0,  FasterNet-T1, 

 FasterNet-T2,  PP-LCNet_x1_0_table_cls,  ResNet50_ML,  PP-LCNet_x1_0_ML,  

PP-HGNetV2-B0_ML,  PP-HGNetV2-B4_ML,  PP-HGNetV2-B6_ML,  CLIP_vit_bE_plus-S, 

 PP-YOLOE_plus-X,  RT-DETR-H,  RT-DETR-L,  RT-DETR-R18,  RT-DETR-R50,  RT-DETR-X, 

 PicoDet_layout_1x,  PicoDet_layout_1x_table,  PicoDet-S_layout_3cls,  

PicoDet-S_layout_17cls,  PicoDet-L_layout_3cls,  PicoDet-L_layout_17cls, 

 RT-DETR-H_layout_3cls,  RT-DETR-H_layout_17cls,  YOLOv3-DarkNet53,  YOLOv3-MobileNetV3, 

 YOLOv3-ResNet50_vd_DCN,  YOLOX-L,  YOLOX-M,  YOLOX-N,  YOLOX-S,  YOLOX-T,  YOLOX-X,  

FasterRCNN-ResNet34-FPN,  FasterRCNN-ResNet50,  FasterRCNN-ResNet50-FPN,  

FasterRCNN-ResNet50-vd-FPN,  FasterRCNN-ResNet50-vd-SSLDv2-FPN,  FasterRCNN-ResNet101,

  FasterRCNN-ResNet101-FPN,  FasterRCNN-ResNeXt101-vd-FPN,  FasterRCNN-Swin-Tiny-FPN,  

Cascade-FasterRCNN-ResNet50-FPN,  Cascade-FasterRCNN-ResNet50-vd-SSLDv2-FPN,  PicoDet-M,

  PicoDet-XS,  FCOS-ResNet50,  DETR-R50,  PP-ShiTuV2_det,  PP-YOLOE-L_human,  

PP-YOLOE-S_human,  PP-YOLOE-L_vehicle,  PP-YOLOE-S_vehicle,  PP-YOLOE_plus_SOD-L, 

 PP-YOLOE_plus_SOD-S,  PP-YOLOE_plus_SOD-largesize-L,  CenterNet-DLA-34, 

 CenterNet-ResNet50,  PicoDet_LCNet_x2_5_face,  BlazeFace,  BlazeFace-FPN-SSH, 

 PP-YOLOE_plus-S_face,  PP-YOLOE-R-L,  Co-Deformable-DETR-R50,  

Co-Deformable-DETR-Swin-T,  Co-DINO-R50,  Co-DINO-Swin-L, 
 RT-DETR-L_wired_table_cell_det,  RT-DETR-L_wireless_table_cell_det, 

 PP-DocLayout-L,  PP-DocLayout-M,  PP-DocLayout-S,  PP-DocLayout_plus-L,

  PP-DocBlockLayout,  Mask-RT-DETR-S,  Mask-RT-DETR-M,  Mask-RT-DETR-X,  

Mask-RT-DETR-H,  Mask-RT-DETR-L,  SOLOv2,  MaskRCNN-ResNet50,  MaskRCNN-ResNet50-FPN,

  MaskRCNN-ResNet50-vd-FPN,  MaskRCNN-ResNet101-FPN,  MaskRCNN-ResNet101-vd-FPN,  

MaskRCNN-ResNeXt101-vd-FPN,  MaskRCNN-ResNet50-vd-SSLDv2-FPN, 

 Cascade-MaskRCNN-ResNet50-FPN,  Cascade-MaskRCNN-ResNet50-vd-SSLDv2-FPN, 

 PP-YOLOE_seg-S,  PP-TinyPose_128x96,  PP-TinyPose_256x192,  BEVFusion,  

whisper_large,  whisper_medium,  whisper_base,  whisper_small,  whisper_tiny,  

GroundingDINO-T,  YOLO-Worldv2-L,  SAM-H_point,  SAM-H_box,  Deeplabv3_Plus-R101, 

 Deeplabv3_Plus-R50,  Deeplabv3-R101,  Deeplabv3-R50,  OCRNet_HRNet-W48, 

 OCRNet_HRNet-W18,  PP-LiteSeg-T,  PP-LiteSeg-B,  SegFormer-B0,  SegFormer-B1, 

 SegFormer-B2,  SegFormer-B3,  SegFormer-B4,  SegFormer-B5,  SeaFormer_base,  

SeaFormer_tiny,  SeaFormer_small,  SeaFormer_large,  MaskFormer_tiny,  MaskFormer_small,
 
 SLANet,  SLANet_plus,  SLANeXt_wired,  SLANeXt_wireless,  PP-OCRv5_mobile_det, 

 PP-OCRv5_server_det,  PP-OCRv4_mobile_det,  PP-OCRv4_server_det, 

 PP-OCRv4_mobile_seal_det,  PP-OCRv4_server_seal_det,  PP-OCRv3_mobile_det, 

 PP-OCRv3_server_det,  PP-OCRv3_mobile_rec,  en_PP-OCRv3_mobile_rec,  

korean_PP-OCRv3_mobile_rec,  japan_PP-OCRv3_mobile_rec,  chinese_cht_PP-OCRv3_mobile_rec,

te_PP-OCRv3_mobile_rec,  ka_PP-OCRv3_mobile_rec,  ta_PP-OCRv3_mobile_rec, 

 latin_PP-OCRv3_mobile_rec,  arabic_PP-OCRv3_mobile_rec,  cyrillic_PP-OCRv3_mobile_rec, 

 devanagari_PP-OCRv3_mobile_rec,  PP-OCRv4_mobile_rec,  PP-OCRv4_server_rec,  

en_PP-OCRv4_mobile_rec,  PP-OCRv4_server_rec_doc,  ch_SVTRv2_rec,  ch_RepSVTR_rec,

  PP-OCRv5_server_rec,  PP-OCRv5_mobile_rec,  latin_PP-OCRv5_mobile_rec, 

 eslav_PP-OCRv5_mobile_rec,  korean_PP-OCRv5_mobile_rec,  AutoEncoder_ad,  DLinear_ad, 

 Nonstationary_ad,  PatchTST_ad,  TimesNet_ad,  TimesNet_cls,  DLinear,  NLinear,  

Nonstationary,  PatchTST,  RLinear,  TiDE,  TimesNet,  PP-TSM-R50_8frames_uniform,  

PP-TSMv2-LCNetV2_8frames_uniform,  PP-TSMv2-LCNetV2_16frames_uniform,  YOWO]

运行自己模型:

from paddleocr import PaddleOCR

ocr = PaddleOCR(

    text_detection_model_name="PP-OCRv5_mobile_det",
    text_recognition_model_name="PP-OCRv5_mobile_rec",
    
    text_detection_model_dir=r"C:\Users\Administrator\Desktop\Mo_paddleocr\PaddleOCR-release-3.1\output\output_infer_det",
    text_recognition_model_dir=r"C:\Users\Administrator\Desktop\Mo_paddleocr\PaddleOCR-release-3.1\output\output_infer_rec",

    use_doc_orientation_classify=False,
    use_doc_unwarping=False,
    use_textline_orientation=False,
) 


result = ocr.predict("train_data\\icdar2015\\text_localization\\det\\test\\28.jpg")
for res in result:
    res.print()
    res.save_to_img("output")
    res.save_to_json("output")

    text_detection_model_name="PP-OCRv5_mobile_det",
    text_recognition_model_name="PP-OCRv5_mobile_rec",

这两个必须和yml文件中的Madel_name对应

模型导出

模型导出往往是利用官方提供的命令行,博主比较闲麻烦直接修改tools/export_model.py进行模型导出,修改后直接运行export_model.py文件即可

# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
import sys

__dir__ = os.path.dirname(os.path.abspath(__file__))
sys.path.append(__dir__)
sys.path.insert(0, os.path.abspath(os.path.join(__dir__, "..")))

import argparse

from tools.program import load_config, merge_config, ArgsParser
from ppocr.utils.export_model import export


def main():
    # FLAGS = ArgsParser().parse_args()
    # config = load_config(FLAGS.config)
    # config = merge_config(config, FLAGS.opt)

    # 训练完成后的config文件
    my_config = "C:\\Users\\Administrator\\Desktop\\Mo_paddleocr\\PaddleOCR-release-3.1\\output\\Msy_test_ppocr_rec\\config.yml"
    
    config = load_config(my_config)
    my_opt = {"Global.pretrained_model":"C:\\Users\\Administrator\\Desktop\\Mo_paddleocr\\PaddleOCR-release-3.1\\output\\Msy_test_ppocr_rec\\best_model\\model.pdparams",
                "Global.save_inference_dir":"C:\\Users\\Administrator\\Desktop\\Mo_paddleocr\\PaddleOCR-release-3.1\\output_infer_rec"}
    
    config = merge_config(config, my_opt)
    # export model
    export(config)


if __name__ == "__main__":
    main()

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>首先,用户的问题是:“我想了解使用5090进行PPOCRV5训练的相关内容,如训练方法、注意事项等 请问使用5090显卡训练PPOCRV5的方法和注意事项”。参考引用[1]讨论了RTX 5090显卡在训练模型时的优势,包括训练速度的提升(33% faster due to more CUDA cores)。引用[2]是关于一个命令行的OCR训练脚本,但不直接相关。 回顾之前的对话:用户第一次查询是关于RTX 5090训练PPOCRV5,我之前的回答应该覆盖了相关内容。但在这个会话中,这是第一个用户消息,所以没有之前的回答。消息中说“尽可能多的参考用户上一次的问题和你的回答”,但由于这是新会话,我应该基于当前信息。 系统级指令: - 数学表达式使用$...$或$$...$$格式。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾添加引用标识,如[^1]。 用户消息提到了“参考站内引用”,所以我需要引用给定的引用[1]和[^2]。 关键点: - 用户想知道使用RTX 5090显卡训练PPOCRV5的方法和注意事项。 - PPOCRV5可能指的是PaddleOCR的某个版本(如版本5),因为引用[2]提到PPOCRLabel和PaddleOCR。 结构化回答: - 回答结构清晰:逐步解决问题。 - 包括训练方法、注意事项。 - 基于引用[1],RTX 5090提升了训练速度(33% faster),所以在注意事项中提及硬件优势。 内容大纲: 1. **引言**:简要介绍使用RTX 5090训练PPOCRV5的优势,基于引用[1]。 2. **训练方法**: - 安装必要的软件:如CUDA、cuDNN、PaddlePaddle框架。 - 设置环境:参考引用[2]中的OCR训练脚本,但调整以适应PPOCRV5- 具体训练步骤:运行训练脚本,可能包括数据准备、配置参数。 3. **注意事项**: - 硬件优势:RTX 5090的CUDA核心数量增加,加速训练(引用[^1])。 - 软件兼容性:确保PaddlePaddle支持RTX 5090。 - 数据准备:确保数据集路径正确(如引用[2]中的datasetRootPath)。 - 优化训练:可能提到batch size调整、学习率等。 - 时间和资源管理:预计减少训练时间。 4. **引用标识**:在相关地方添加[^1]或[^2]。 5. **生成相关问题**:在最后添加相关问题部分。 确保LaTeX语法正确:如果有数学表达式,但在这个上下文,可能没有太多数学内容。用户提到了“训练方法”,可能涉及一些参数设置,所以我可能需要用到LaTeX。 例如,在讨论batch size或学习率时,可以用行内数学表达式:例如,学习率 $\eta = 0.001$。 回答用中文。 相关问题示例(基于主题): 1. PPOCRV5训练的具体优化技巧? 2. 如何在不同硬件上比较PPOCRV5训练效率? 3. PPOCRV5训练数据准备有哪些最佳实践? 最终回答结构: - 开头:直接回应问题。 - 主体:分点解释训练方法和注意事项。 - 结尾:生成相关问题。 输入引用: - [^1]: 引用[1]的内容。 - [^2]: 引用[2]的内容,尽管不那么相关,但用户提供了,所以我应该提到。 响应内容: - 训练方法: - 安装PaddlePaddle框架。 - 准备数据集,使用类似命令如gen_ocr_train_val_test.py来划分数据。 - 运行训练脚本,指定参数。 - 注意事项: - RTX 5090加速训练,预计时间减少33%[^1]。 - 确保驱动和库兼容。 - 监控GPU使用率。 </think>### 使用RTX 5090显卡训练PPOCRV5的方法和注意事项 PPOCRV5(PaddleOCR V5)是一个基于PaddlePaddle框架的光学字符识别OCR)模型。选用RTX 5090显卡训练PPOCRV5时,能充分利用其强大的计算性能(21,760个CUDA核心),显著提升训练效率。根据引用[1],RTX 5090相较于RTX 4090训练速度提升33%,一轮训练时间可缩短至约8小时,总训练时间大幅减少(例如200轮训练从2400小时降至1600小时)[^1]。以下我将逐步介绍训练方法和注意事项,确保内容清晰实用。 #### 训练方法 使用RTX 5090训练PPOCRV5的核心步骤涉及环境配置、数据准备和训练执行。整个过程基于PaddlePaddle框架,需确保软件兼容性(建议使用Python 3.7+和PaddlePaddle最新版本)。以下是详细方法: 1. **环境安装与配置**: - 安装CUDA和cuDNN:RTX 5090需要CUDA 11.8或更高版本(支持Ampere架构)。下载并安装对应版本的CUDA Toolkit和cuDNN库。 ```bash # 示例命令:安装CUDA 11.8 sudo apt-get install cuda-11-8 ``` - 设置PaddlePaddle环境:创建Python虚拟环境并安装PaddlePaddle GPU版本。 ```bash # 创建环境(参考引用[2]中的OCR环境) conda create -n ppocr python=3.8 conda activate ppocr # 安装PaddlePaddle(指定GPU支持) pip install paddlepaddle-gpu==2.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple ``` - 安装PPOCRV5依赖:克隆PPOCRV5仓库并安装额外库。 ```bash git clone https://github.com/PaddlePaddle/PaddleOCR.git cd PaddleOCR pip install -r requirements.txt ``` 2. **数据准备**: - 数据集划分:使用类似引用[2]中的脚本自动划分训练集、验证集和测试集(比例如6:2:2)。确保数据集路径正确。 ```bash # 示例命令(基于引用[2]调整) python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath /path/to/your/dataset ``` - `--datasetRootPath` 指定数据集根目录(需包含图像和标注文件)。 - 输出训练文件列表(如`train.txt`, `val.txt`)。 - 数据增强:PPOCRV5支持在线增强(如旋转、缩放),可在配置文件中启用以减少过拟合。 3. **训练执行**: - 修改配置文件:编辑PPOCRV5的YAML文件(如`configs/rec/PP-OCRv5/rec_ppocrv5.yml`),调整参数: - `batch_size_per_card`:增大batch size以利用RTX 5090的内存优势(例如从32提高到64),公式为:$\text{batch\_size} \times \text{num\_cards}$,其中 $\text{num\_cards}$ 是GPU数量。 - `learning_rate`:初始学习率可设为 $0.001$,根据收敛情况调整。 - `num_epochs`:设置训练轮数(如200轮)。 - 启动训练:运行训练脚本,指定GPU。 ```bash # 使用单个RTX 5090 GPU python tools/train.py -c configs/rec/PP-OCRv5/rec_ppocrv5.yml -o Global.device=gpu ``` - 监控训练:使用VisualDL或TensorBoard可视化损失和准确率。 4. **性能优化**: - 混合精度训练:启用AMP(Automatic Mixed Precision)加速计算,减少显存占用。 ```bash python tools/train.py ... -o AMP.use_amp=True ``` - 分布式训练(可选):如果使用多张RTX 5090,可通过`-o Distributed.use=True`实现并行训练,进一步提升速度[^1]。 #### 注意事项 使用RTX 5090训练PPOCRV5时,需注意以下关键点以确保稳定性和效率: - **硬件兼容性**:RTX 5090的CUDA核心增加33%,但需确保驱动程序更新(建议NVIDIA驱动版本≥535)。安装后验证兼容性: ```bash nvidia-smi # 检查GPU状态 paddle.utils.run_check() # 验证PaddlePaddle GPU支持 ``` - **软件依赖**:PaddlePaddle版本必须支持RTX 5090。截至2024年,PaddlePaddle 2.6+已优化支持。避免使用过时库引发错误。 - **训练效率管理**: - 基于引用[1],RTX 5090可将总训练时间减少33%,但需监控GPU利用率(使用`nvtop`或`gpustat`)。如果利用率不足,检查数据加载瓶颈(如IO速度)。 - 调整`batch_size`时避免超出显存(RTX 5090通常有24GB显存)。建议起始batch size设为64,逐步增加。 - **数据与模型优化**: - 数据集质量:确保标注准确(PPOCRV5对噪声敏感),使用引用[2]的脚本正确划分数据。 - 过拟合预防:启用正则化(如Dropout)和早停(Early Stopping),验证集损失上升时停止训练- 学习率调度:采用余弦退火(Cosine Annealing)策略,公式表达为 $\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min})(1 + \cos(\frac{t}{T}\pi))$,其中 $t$ 是当前迭代,$T$ 是总迭代数。 - **资源与错误处理**: - 显存监控:训练中如果报错“Out of Memory”,减少`batch_size`或启用梯度累积。 - 日志记录:保存训练日志便于调试(PPOCRV5默认输出到`output`目录)。 - 备份与恢复:定时保存检查点(`-o Global.save_model_dir=./output`),避免硬件故障中断。 - **其他提示**:RTX 5090的能效比高,但训练时确保散热良好(推荐机箱通风或水冷)。初始测试用小数据集(如10%数据)验证配置正确性。 通过以上方法,RTX 5090能显著加速PPOCRV5训练,提升模型迭代效率[^1]。若有具体数据集或错误细节,可提供进一步反馈。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值