资讯动态

mmDetection 实战:Faster R-CNN 自定义数据集训练全流程解析

发布时间:2026/8/30 2:01:04 来源:尧图企业网站定制
1. 环境准备与问题排查在开始使用mmDetection训练Faster R-CNN之前我们需要先解决一些环境配置的常见问题。很多新手在第一次运行时都会遇到OMP报错这个问题其实和你的操作系统环境变量有关。我自己的Windows电脑就经常出现这个情况解决方法很简单import os os.environ[KMP_DUPLICATE_LIB_OK] TRUE把这行代码加在train.py和test.py文件的开头就能解决问题。不过要注意这不是mmDetection的问题而是OpenMP库在Windows下的特殊表现。如果你用的是Linux系统可能完全不会遇到这个报错。关于mmDetection的安装官方文档已经写得很清楚了但有几个容易踩坑的地方PyTorch版本要严格匹配CUDA版本mmcv-full必须安装与mmdetection兼容的版本建议使用conda创建虚拟环境我建议先用以下命令检查基础环境nvidia-smi # 查看GPU状态 python -c import torch; print(torch.__version__) # 检查PyTorch版本 python -c import mmcv; print(mmcv.__version__) # 检查mmcv版本2. 配置文件生成与管理2.1 配置文件的选择策略mmDetection的配置文件都在configs目录下对于Faster R-CNN我们通常会选择faster-rcnn_r50_fpn_1x_coco.py作为基础配置。这里有个重要建议永远不要直接修改原始配置文件我见过太多人直接在原文件上修改结果把项目搞得一团糟。正确的做法是通过运行生成新的配置文件。虽然第一次运行会因为缺少数据集而报错但会在work_dirs下生成完整的配置文件副本。这样做有两个好处保留原始配置作为参考方便版本控制和管理2.2 两种运行方式详解终端运行方式最灵活适合需要频繁调整参数的情况python ./tools/train.py ./configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.pyIDE运行配置更适合调试阶段。以PyCharm为例右键train.py选择修改运行配置在形参中输入配置文件路径设置运行目录为mmDetection根目录点击应用后即可通过运行按钮启动无论哪种方式运行后都会在work_dirs下生成类似faster-rcnn_r50_fpn_1x_coco/20240621_115125这样的目录里面包含新的配置文件和日志。3. 自定义数据集处理3.1 数据集目录结构规范为了最小化配置修改建议完全遵循COCO数据集的目录结构mmdetection/ ├── data/ │ ├── coco/ │ │ ├── annotations/ │ │ │ ├── instances_train2017.json │ │ │ ├── instances_val2017.json │ │ │ └── instances_test2017.json │ │ ├── train2017/ # 训练集图片 │ │ ├── val2017/ # 验证集图片 │ │ └── test2017/ # 测试集图片这种结构可以避免修改配置文件中的数据集路径。我建议使用软链接(ln -s)来映射实际数据位置而不是复制文件。3.2 标注文件转换技巧如果你的数据不是COCO格式可以使用以下Python代码进行转换from pycocotools.coco import COCO import json # 自定义格式转COCO格式的示例 def convert_to_coco(original_anns): coco_anns { info: {...}, licenses: [...], categories: [...], images: [...], annotations: [...] } # 具体转换逻辑根据原始格式实现 return coco_anns对于小规模数据集也可以使用labelme2coco.py这样的现成工具。4. 关键配置修改4.1 类别定义修改需要修改两个关键文件mmdet/datasets/coco.py替换默认的COCO类别和调色板mmdet/evaluation/functional/class_names.py修改评估时使用的类别名称建议使用IDE的全局搜索功能确保所有出现COCO类别的地方都被替换。我曾经因为漏改一处导致评估结果完全错误。4.2 配置文件调整在新生成的配置文件中主要修改三个地方num_classes改为你的实际类别数data字典中的img_scale根据你的图片尺寸调整optimizer配置学习率等超参数对于显存小的设备可以这样调整# 减小batch_size data dict( samples_per_gpu1, # 原值通常是2或4 workers_per_gpu1 ) # 减少训练轮次 runner dict(max_epochs3) # 原值可能是12或205. 训练与测试实战5.1 训练过程监控启动训练的命令很简单python tools/train.py work_dirs/faster-rcnn_r50_fpn_1x_coco/faster-rcnn_r50_fpn_1x_coco.py训练过程中可以使用tail -f work_dirs/*/202*/log.txt实时查看日志通过TensorBoard监控损失曲线观察GPU使用情况(nvidia-smi -l 1)如果遇到显存不足可以尝试减小img_scale使用梯度累积启用AMP自动混合精度5.2 模型测试与可视化测试命令示例python tools/test.py \ work_dirs/faster-rcnn_r50_fpn_1x_coco/faster-rcnn_r50_fpn_1x_coco.py \ work_dirs/faster-rcnn_r50_fpn_1x_coco/epoch_3.pth \ --show-dir results \ --eval bbox关键参数说明--show-dir指定可视化结果保存目录--eval指定评估指标(bbox, segm等)--options可以覆盖配置中的参数测试完成后建议使用mmdet/utils/analysis_tools/analyze_results.py对预测结果进行详细分析。6. 常见问题排查在实际项目中我遇到过各种奇怪的问题这里分享几个典型案例问题1训练时loss不下降检查学习率是否合理确认数据标注是否正确加载验证数据增强是否过度问题2测试时AP为0检查类别名称是否完全匹配确认测试集标注路径正确验证模型是否真的学到了特征问题3CUDA out of memory减小batch_size降低输入图像分辨率尝试使用--auto-scale-lr自动调整学习率对于更复杂的问题建议查阅mmDetection的issue区很多问题都有现成的解决方案。记住深度学习训练就是个不断试错的过程重要的是保持耐心系统性地排查问题。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价