实战指南:基于PaddleOCR的车牌识别自定义数据集训练全流程
1. 从零开始准备车牌识别数据集第一次接触PaddleOCR做车牌识别时最让我头疼的就是数据集准备。网上公开的车牌数据集要么格式不统一要么数量太少。经过几个项目的摸索我总结出一套高效的数据处理方法。车牌数据集通常包含两部分图片文件和标注文件。图片最好是jpg或png格式建议分辨率控制在1000x300像素左右。标注文件推荐使用PPOCRLabel工具生成的标准格式每行对应一张图片格式为图片路径\t[{transcription: 车牌号, points: [[x1,y1],[x2,y2],[x3,y3],[x4,y4]]}]。实际操作中我习惯这样组织目录结构train_data/ ├── car_plate/ │ ├── train/ │ │ ├── images/ # 存放训练图片 │ │ └── label.txt # 训练标注 │ └── test/ │ ├── images/ # 存放测试图片 │ └── label.txt # 测试标注对于数据增强PaddleOCR内置了几种实用方法。在配置文件中可以设置Train: dataset: transforms: - DecodeImage: # 读取图片 img_mode: BGR - DetLabelEncode: # 解析标注 - IaaAugment: # 图像增强 augmenter_args: - { type: Fliplr, args: { p: 0.5 } } - { type: Affine, args: { rotate: [-10, 10] } }2. 深度解析PaddleOCR配置文件很多新手直接复制默认配置文件就开始训练结果效果不理想。其实配置文件里的每个参数都值得仔细推敲。以车牌识别为例我通常会重点调整这些参数在ch_det_mv3_db_v2.0.yml中关键配置项包括Global: use_gpu: true # GPU加速 epoch_num: 300 # 训练轮次 log_smooth_window: 20 # 日志平滑窗口 print_batch_step: 10 # 打印间隔 Optimizer: name: Adam beta1: 0.9 beta2: 0.999 lr: name: Cosine # 余弦退火学习率 learning_rate: 0.001 warmup_epoch: 5 # 热身轮次特别要注意的是数据加载部分Train: dataset: name: SimpleDataSet data_dir: ./train_data/car_plate/train/ label_file_list: - ./train_data/car_plate/train/label.txt ratio_list: [1.0] # 数据集采样比例验证集配置也很关键Eval: dataset: name: SimpleDataSet data_dir: ./train_data/car_plate/test/ label_file_list: - ./train_data/car_plate/test/label.txt save_res_path: ./output/det_db/predicts_db.txt # 预测结果保存路径3. 模型训练实战技巧启动训练看似简单但有几个坑我踩过多次。首先是学习率设置车牌识别建议初始学习率设为0.001采用余弦退火策略。训练命令示例python tools/train.py \ -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml \ -o Global.pretrained_model./pretrain_models/ch_ppocr_server_v2.0_det_train/best_accuracy \ Global.save_model_dir./output/det_db/训练过程中要关注几个关键指标检测模型的hmean值理想情况应该稳定在0.9以上损失曲线应该呈现平稳下降趋势GPU利用率保持在80%以上说明数据加载没有瓶颈如果遇到loss震荡可以尝试减小学习率乘以0.1增加batch_size显存允许的情况下检查数据标注质量断点续训的命令稍有不同python tools/train.py \ -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml \ -o Global.checkpoints./output/det_db/latest \ Global.save_model_dir./output/det_db/4. 模型评估与优化策略训练完成后我习惯用三种方式评估模型效果单张图片测试python tools/infer_det.py \ -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml \ -o Global.infer_img./test_imgs/plate_001.jpg \ Global.pretrained_model./output/det_db/best_accuracy批量测试整个文件夹python tools/infer_det.py \ -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml \ -o Global.infer_img./test_imgs/ \ Global.pretrained_model./output/det_db/best_accuracy量化评估指标python tools/eval.py \ -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml \ -o Global.checkpoints./output/det_db/best_accuracy常见优化策略包括数据层面增加倾斜、模糊车牌的样本平衡不同颜色车牌的比例模型层面尝试更大的backbone如ResNet50调整DB算法的二值化阈值训练技巧使用指数移动平均(EMA)尝试label smooth策略5. 模型部署实战将训练好的模型转换为推理格式python tools/export_model.py \ -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml \ -o Global.pretrained_model./output/det_db/best_accuracy \ Global.save_inference_dir./inference/det_db/转换后会得到三个关键文件inference.pdiparams模型参数inference.pdmodel模型结构inference.yml配置文件C部署示例代码框架#include opencv2/opencv.hpp #include paddle_inference_api.h void LoadModel(const std::string model_dir) { paddle::AnalysisConfig config; config.SetModel(model_dir /inference.pdmodel, model_dir /inference.pdiparams); auto predictor paddle::CreatePaddlePredictor(config); }Python部署更简单from paddleocr import PaddleOCR ocr PaddleOCR(det_model_dir./inference/det_db/) result ocr.ocr(test.jpg, clsFalse)在实际项目中我发现几个性能优化点开启TRT加速能提升3-5倍速度批量处理图片比单张处理更高效合理设置det_limit_side_len参数建议设为736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2502552.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!