PaddleDetection2.4实战:5分钟搞定自定义数据集训练(附避坑指南)

张开发
2026/4/21 21:28:41 15 分钟阅读

分享文章

PaddleDetection2.4实战:5分钟搞定自定义数据集训练(附避坑指南)
PaddleDetection2.4实战5分钟搞定自定义数据集训练附避坑指南当你第一次尝试用PaddleDetection训练自己的数据集时可能会被各种配置文件和数据格式搞得晕头转向。别担心这篇文章就是为你准备的——我们将用最简单直接的方式带你快速完成从数据准备到模型训练的全过程同时避开那些容易踩的坑。1. 环境准备与安装在开始之前确保你的系统满足以下基本要求操作系统Ubuntu 18.04/20.0422.04有兼容性问题Python版本3.6-3.8CUDA10.2或11.2cuDNN7.6安装PaddleDetection其实很简单但有几个关键点需要注意# 创建conda环境推荐 conda create -n paddle python3.7 conda activate paddle # 安装PaddlePaddle GPU版本 pip install paddlepaddle-gpu2.3.1 -i https://mirror.baidu.com/pypi/simple # 安装PaddleDetection git clone https://github.com/PaddlePaddle/PaddleDetection.git cd PaddleDetection pip install -r requirements.txt注意如果你使用的是Ubuntu 22.04会遇到gcc版本过高的问题。解决方案是降级gcc或者使用docker环境。2. 数据准备从标注到COCO格式PaddleDetection支持多种数据格式但COCO格式的模型支持最全面。假设你已经用labelme完成了标注接下来需要转换为COCO格式。2.1 标注文件结构你的原始标注数据应该类似这样my_dataset/ ├── images/ │ ├── img1.jpg │ ├── img2.jpg │ └── ... └── labels/ ├── img1.json ├── img2.json └── ...2.2 转换到COCO格式PaddleDetection自带了转换工具使用起来非常方便python tools/x2coco.py \ --dataset_type labelme \ --json_input_dir ./my_dataset/labels \ --image_input_dir ./my_dataset/images \ --output_dir ./my_dataset_coco \ --train_proportion 0.9 \ --val_proportion 0.1转换后的COCO格式结构my_dataset_coco/ ├── annotations/ │ ├── instances_train.json │ └── instances_val.json └── images/ ├── train/ └── val/常见问题如果遇到KeyError: shapes检查你的labelme标注文件版本是否太旧。3. 模型选择与配置修改3.1 选择合适的模型对于小样本数据集2k张左右图片推荐以下模型模型名称推理速度(FPS)mAP适用场景PP-YOLO-tiny11230.6速度优先PP-YOLOv25049.5平衡型Faster RCNN2042.6精度优先3.2 修改配置文件以Faster RCNN为例需要修改的主要配置项数据集配置(configs/datasets/coco_detection.yml):metric: COCO num_classes: 5 # 修改为你的类别数 TrainDataset: !COCODataSet image_dir: images/train anno_path: annotations/instances_train.json dataset_dir: /path/to/my_dataset_coco data_fields: [image, gt_bbox, gt_class, is_crowd] EvalDataset: !COCODataSet image_dir: images/val anno_path: annotations/instances_val.json dataset_dir: /path/to/my_dataset_coco TestDataset: !ImageFolder anno_path: annotations/instances_val.json dataset_dir: /path/to/my_dataset_coco训练策略(configs/runtime.yml):use_gpu: true log_iter: 20 save_dir: output snapshot_epoch: 14. 训练与监控4.1 启动训练使用以下命令开始训练并启用VisualDL监控python tools/train.py \ -c configs/faster_rcnn/faster_rcnn_r50_vd_fpn_ssld_2x_coco.yml \ --eval \ --use_vdltrue \ --vdl_log_dirvdl_log4.2 实时监控训练过程在另一个终端启动VisualDLvisualdl --logdir vdl_log --port 8040然后在浏览器访问http://localhost:8040你可以看到Loss曲线监控训练是否收敛mAP曲线评估模型性能学习率变化检查学习率调度是否合理4.3 常见训练问题排查Loss不下降检查学习率是否合适尝试1e-4到1e-2确认数据标注是否正确尝试减小batch size显存不足减小batch_size在reader.yml中修改使用更小的模型尝试AMP自动混合精度训练5. 模型导出与推理5.1 导出部署模型训练完成后导出为部署格式python tools/export_model.py \ -c configs/faster_rcnn/faster_rcnn_r50_vd_fpn_ssld_2x_coco.yml \ -o weightsoutput/faster_rcnn_r50_vd_fpn_ssld_2x_coco/best_model \ --output_dir./inference_model5.2 单张图片测试python deploy/python/infer.py \ --model_dir./inference_model/faster_rcnn_r50_vd_fpn_ssld_2x_coco \ --image_filedemo/your_image.jpg \ --deviceGPU5.3 集成到你的应用中这里是一个简单的Python调用示例from deploy.python.infer import Detector # 初始化检测器 model_dir inference_model/faster_rcnn_r50_vd_fpn_ssld_2x_coco detector Detector( model_dir, deviceGPU, threshold0.5 # 置信度阈值 ) # 执行推理 results detector.predict_image([your_image.jpg]) print(results)6. 实战避坑指南在实际项目中我遇到过不少问题这里分享几个最有价值的经验数据标注一致性确保所有标注员使用相同的标注标准定期检查标注质量特别是边界框的紧密度小样本训练技巧使用更强的数据增强如MixUp、Mosaic尝试迁移学习加载预训练权重冻结部分网络层特别是backbone的浅层性能优化对于部署考虑使用TensorRT加速量化模型可以显著减小体积但会损失少量精度使用多线程预处理提高推理速度常见错误解决遇到KeyError: image检查数据路径是否正确CUDA out of memory减小batch size评估指标异常确认eval数据集配置正确

更多文章