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

Posted Arrow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用MMDetection3.x训练自定义数据集和类别相关的知识,希望对你有一定的参考价值。

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

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个的指标值差不多)

以上是关于使用MMDetection3.x训练自定义数据集和类别的主要内容,如果未能解决你的问题,请参考以下文章

面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码)

行人检测(人体检测)2:YOLOv5实现人体检测(含人体检测数据集和训练代码)

PyTorch学习笔记 3.数据集和数据加载器

PyTorch学习笔记 3.数据集和数据加载器

测试数据集 和验证数据集 之间的区别

如何将数据集划分为训练集和测试集?