使用MMDetection3.x训练自定义数据集和类别

本文介绍使用MMDetection3.x进行自定义数据集和类别的训练流程,包括数据准备、配置、训练、测试及评估指标详解。涵盖目标检测评估如Precision、Recall计算及COCO数据集上的性能指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 安装

2. 训练

2.1 准备数据和配置文件

2.2 训练

  • 训练方式一
python tools/train.py configs/balloon/mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon.py
  • 会出现如下错误, 且生成的.pth文件不能检测到balloon, 原因是lr太大
    在这里插入图片描述

  • 训练方式二

python tools/train.py configs/balloon/mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon.py --auto-scale-lr

2.3 测试

  • 测试图片集并对比显示
python tools/test.py configs/balloon/mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon.py work_dirs/mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon/epoch_12.pth --show
  • 测试图片并保存结果
python demo/image_demo.py data/balloon/val/test.jpg configs/balloon/mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon.py work_dirs/mask-rcnn_r50-caffe_fpn_ms-poly-1x_balloon/epoch_12.pth --out-file 1.jpg

3. 评价指标 (Evaluation Metrics)

3.1 目标检测评估( Detection Evaluation)

在这里插入图片描述

  • 基于2分类的指标如下:
    • Recall 召回率(查全率): 所有真实目标中,模型预测正确的目标比例,其公式为: R e c a l l = t p r = T P / ( T P + F N ) Recall = tpr = TP / (TP+FN) Recall=tpr=TP/(TP+FN)

    • Precision 精确率(查准率):模型预测的所有目标中,预测正确的比例,其公式为: P r e c i s i o n = T P / ( T P + F P ) Precision = TP / (TP+FP) Precision=TP/(TP+FP)

    • Accuracy准确率。正确分类(正例分为正例,负例分为负例)的样本数除以所有的样本数,正确率越高,分类器越好。其公式为: A c c u r a c y = ( T P + T N ) / ( T P + T N + F P + F N ) Accuracy=(TP+TN)/ (TP+TN+FP+FN) Accuracy=TP+TN/(TP+TN+FP+FN)
      在这里插入图片描述

    • FP (False Positive):IoU<=0.5时的检测框(或者是检测到同一个GT的多余检测框的数量)

      • 误报,即负例中识别为正例的样本。其中在计算roc曲线的时候需要fpr = FP / (FP + TN)
    • FN (False Negative):没有检测到的GT的数量 (漏检)

    • TP (True Positive):IoU>0.5的检测框数量(同一Ground Truth只计算一次)

    • TN (True Negative)

    • IOU (Intersection-Over-Union):交并比(交集与并集的比值)

    • AP:P-R曲线下面积

    • P-R曲线:Precision-Recall曲线

    • mAP:mean Average Precision,即各类别AP的平均值 (每个类别有一个AP)

3.1.1 计算Precision和Recall

  • 计算Precision和Recall, Rank为1表示Confidence不小于0.98的才视为正确检测出来,即Confidence取不同的阈值所得到的Precision和Recall,参考目标检测mAP计算以及coco评价标准

  • 计算一类物体的AP
    在这里插入图片描述
    在这里插入图片描述

3.1.2 通过P-R曲线计算AP

在这里插入图片描述

3.2 COCO上物体检测器的性能指标 (12个)

指标描述
Average Precision (AP):
AP% AP at IoU=0.50:0.05:0.95 (primary challenge metric)
IoU从0.5到0.95,间隔为0.05,总共10个IoU(0.5, 0.55, 0.60, …, 0.90, 0.95),
对于每个IoU计算一个AP,再取这10个AP的均值
A P I o U = . 50 AP^{IoU=.50} APIoU=.50% AP at IoU=0.50 (PASCAL VOC metric)
A P I o U = . 75 AP^{IoU=.75} APIoU=.75% AP at IoU=0.75 (strict metric)
AP Across Scales:对不同尺度目标的检测效果
A P s m a l l AP^{small} APsmall% AP for small objects: a r e a < 3 2 2 area < 32^2 area<322
A P m e d i u m AP^{medium} APmedium% AP for medium objects: 3 2 2 < a r e a < 9 6 2 32^2 < area < 96^2 322<area<962
A P l a r g e AP^{large} APlarge% AP for large objects: a r e a > 9 6 2 area > 96^2 area>962
Average Recall (AR):
A R m a x = 1 AR^{max=1} ARmax=1% AR given 1 detection per image
A R m a x = 10 AR^{max=10} ARmax=10% AR given 10 detections per image
A R m a x = 100 AR^{max=100} ARmax=100% AR given 100 detections per image
通过NMS之后,每个图像最多预测100个目标
AR Across Scales:
A P s m a l l AP^{small} APsmall% AR for small objects: a r e a < 3 2 2 area < 32^2 area<322
A P m e d i u m AP^{medium} APmedium% AR for medium objects: 3 2 2 < a r e a < 9 6 2 32^2 < area < 96^2 322<area<962
A P l a r g e AP^{large} APlarge% AR for large objects: a r e a > 9 6 2 area > 96^2 area>962
  • area:测量的面积(area)是分割掩码(segmentation mask)中的像素数量

3.3 MMDetection训练输出评价值

  • 训练过程中的输出值
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.561
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.757
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.681
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.475
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.629
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.614
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.614
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.614
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.508
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.683
  • 第1行:COCO数据集评价指标,即mAP
  • 第2行:PASVOC数据集评价指标,即IoU=0.5时的mAP
  • 第3行:IoU=0.75 相比0.50是比较严格的一个指标
  • 第4行:检测小目标的的指标
  • 第5行:检测中等目标的
  • 第6行:检测大目标的指标
  • 第7行:设置目标检测框只有100个
  • 第8行:设置目标检测框有300个
  • 第9行:设置目标检测框有1000个 (从上图看,100个、300个和1000个的指标值差不多)
### 如何使用 MMDetection 框架训练自定义 COCO 数据集 #### 准备工作 为了在 MMDetection训练自定义的 COCO 数据集,需完成以下几个方面的准备工作: 1. **转换数据到 COCO 格式** 自定义数据集需要遵循 COCO 的标注格式[^4]。如果原始数据不是 COCO 格式,则可以通过脚本将其转换为目标格式。例如,对于 YOLO 格式的标注文件,可使用工具或编写 Python 脚本来实现转换。 2. **设置数据目录结构** 推荐通过软链接方式将数据挂载至 `mmdetection/data/coco` 文件夹下[^3]。具体操作如下: ```bash cd mmdetection mkdir data ln -s /path/to/your/dataset data/coco ``` #### 配置文件调整 MMDetection 提供了灵活的配置机制来适配不同的模型数据集需求。以下是具体的配置修改步骤: 1. **选择基础配置文件** 在 `configs` 目录中找到适合的基础配置文件并继承它。例如,可以选择 Faster R-CNN 或 RetinaNet 等预定义模型作为起点[^1]。 2. **更改类别数量 (`num_classes`)** 更新检测头部分 (head) 中的 `num_classes` 参数以匹配自定义数据集中实际的类别数目: ```python model = dict( roi_head=dict( bbox_head=dict(num_classes=80), # 替换为你的类别数 ) ) ``` 3. **更新数据路径及相关参数** 修改 `_base_` 下的数据加载器配置项,指定本地存储的图像与标注 JSON 文件位置: ```python data_root = &#39;data/coco/&#39; train_dataloader = dict( dataset=dict( ann_file=&#39;annotations/train.json&#39;, # 自定义训练集标注文件名 data_prefix=dict(img=&#39;train_images/&#39;) # 图片所在子目录名称 ) ) val_dataloader = dict( dataset=dict( ann_file=&#39;annotations/val.json&#39;, data_prefix=dict(img=&#39;val_images/&#39;) ) ) ``` 4. **下载预训练权重** 如果希望从预训练模型继续微调,应提供对应的权重 URL 地址,并确保网络能够访问该资源: ```python load_from = &#39;https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth&#39; ``` #### 开始多 GPU 训练过程 当一切就绪之后,执行以下命令启动分布式训练模式: ```bash ./tools/dist_train.sh configs/my_custom_config.py 2 --work-dir work_dirs/custom_experiment/ ``` 其中 `my_custom_config.py` 是经过上述定制化处理后的最终版本;数字 `2` 表示使用的 GPU 数量。 #### 单张图片推理测试 训练完成后,可以利用保存下来的 checkpoint 对新样本做预测分析: ```python from mmdet.apis import init_detector, inference_detector import mmcv config_file = &#39;configs/my_custom_config.py&#39; # 测试所用配置文件 checkpoint_file = &#39;work_dirs/custom_experiment/latest.pth&#39; model = init_detector(config_file, checkpoint_file, device=&#39;cuda:0&#39;) img = &#39;/path/to/test_image.jpg&#39; result = inference_detector(model, img) # 可视化结果 mmcv.imshow_det_bboxes( img, result, class_names=[&#39;cat&#39;, &#39;dog&#39;], # 类别列表 score_thr=0.3 # 显示阈值 ) ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值