目标检测基础(TP,recall,PR曲线,mAP,NMS)

目录

双阶段网络与单阶段网络

          单阶段网络准确度不如双阶段网络,训练不均衡

          双阶段网络如何解决训练中的不均衡

常用数据集介绍及数据交互

          Pascal Voc 2007,2012

          COCO2014,2014,2015,2017

评价指标及计算方法介绍

 1.基本数据指标

 2.PR曲线:结果P,R越高越好,但某些情况下互相矛盾。

 3.IoU指标(Intersection over Union)

 4.目标检测中的PR

 5.mAP的计算

 6.COCO中mAP的计算方法

数据增强及预处理方法

  1.图像归一化

  2.图像增强:翻转、裁剪、饱和度亮度变换、噪声

  3.图像的纵横比处理

非极大值抑制(Non-Maximum Suppression)


双阶段网络与单阶段网络

Two-stage:第一阶段网络用于候选区域提取;第二阶段对候选区域进行分类和精确坐标回归。

  • 单阶段网络准确度不如双阶段网络,训练不均衡

  1. 负例过多,正例过少。
  2. 大多数负例十分容易区分,网络无法学习到有用的信息。如果训练数据存在大量这样的样本,将导致难以收敛。
  • 双阶段网络如何解决训练中的不均衡

  1. RPN网络中,根据前景置信度的高度选择最有可能的候选区域,从而避免大量容易区分的负例。
  2. 训练过程中根据交并比进行采样,将正负样本比例设为1:3,防止过多负例出现。

常用数据集介绍及数据交互

  • Pascal Voc 2007,2012

常用于分类(20)和检测(bounding box);

  • COCO2014,2014,2015,2017

目标实例,目标观测点,看图说话;

bbox:[x,y,width,height]中x,y为bounding box左上角的点

评价指标及计算方法介绍

 1.基本数据指标

真实情况

预测情况

正例

反例

正例

TP(真正)

FN(假反-真正)

反例

FP(假正-真反)

TN(真反)

  • TP(True positives):实际为正例,且被分类器划分为正例的实例数;
  • FP(False positives):实际为负例,但被分类器划分为正例的实例数;
  • FN(False negatives):实际为正例,但被分类器划分为负例的实例数;
  • TN(True negatives):实际为负例,但被分类器划分为正例的实例数;
  • Precision = TP/(TP + FP) / 所有被模型检测为正样本的数据的数量
  • Recall = TP/(TP + FN) = TP / 所有真实类别为正样本的数据的数量

 2.PR曲线:结果P,R越高越好,但某些情况下互相矛盾。

 

  • PR曲线下方的面积AUC(Area under Curve)去判断模型的好坏,越大越好。

 3.IoU指标(Intersection over Union)

 

  • 将原始图片送入训练好的模型之后,经过置信度阈值筛选之后(只考虑置信度高于某个阈值的预测结果),目标检测算法给出带有边界框的预测结果。
  • IoU是预测框与ground truth的交集和并集的比值

 4.目标检测中的PR

  • TP :IoU > 0.5的检测框数量(同一Ground Truth只计算一次)
  • FP:IoU
  • FN:没有检测到的GT(Ground Truth)的数量
  • **Pascal Voc数据集中标注为difficult的数据不计入计算**

 5.mAP的计算

  • AP值(2010年前:PASCAL VOC竞赛定义):recall的值从0到1划分为11份(0,0.1,……,0.9,1.0),每个recall区间(0-0.1,0.1-0.2……,0.9-1.0)上计算准确率的最大值,然后再计算这些准确率最大值的综合并平均。
  • AP值(2010年后):11份recall换成了PR曲线中的所有recall数据点。对于某个recall值r,precision值取所有recall > = r中的最大值(这样保证了p - r曲线是单调递减的,避免了曲线出现摇摆)这种方法叫做all - points - interpolation。这个AP值也就是PR曲线下的面积值

  • 代码如下:
def voc_ap(rec, prec, use_07_metric=False):
  """ ap = voc_ap(rec, prec, [use_07_metric])
  Compute VOC AP given precision and recall.
  If use_07_metric is true, uses the
  VOC 07 11 point method (default:False).
  """
  if use_07_metric:
    # 11 point metric
    ap = 0.
    for t in np.arange(0., 1.1, 0.1):
      if np.sum(rec >= t) == 0:
        p = 0
      else:
        p = np.max(prec[rec >= t])
      ap = ap + p / 11.
  else:
    # correct AP calculation
    # first append sentinel values at the end
    mrec = np.concatenate(([0.], rec, [1.]))
    mpre = np.concatenate(([0.], prec, [0.]))
    print(mpre)
    # compute the precision envelope
    for i in range(mpre.size - 1, 0, -1):
      mpre[i - 1] = np.maximum(mpre[i - 1], mpre[i])
    # to calculate area under PR curve, look for points
    # where X axis (recall) changes value
    i = np.where(mrec[1:] != mrec[:-1])[0]
 
    ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1])
    print(mpre)
  return ap

 6.COCO中mAP的计算方法

  • 采用的是IoU(用于决定是否为TP)在【0.5:0.05:0.95】计算10次AP,然后求平均值的方法计算AP。

 

数据增强及预处理方法

  1.图像归一化

  • 一般为灰度归一化,即减去均值;保持纵横比,将图像的短边缩放至同一大小

  2.图像增强:翻转、裁剪、饱和度亮度变换、噪声

  • 图像裁剪:覆盖尽可能多的bbox,同时考虑区域差异化。

  3.图像的纵横比处理

  • 选定图像纵横比的上下限,分别为0.5和2,纵横比超过此范围的需要进行截取操作。

非极大值抑制(Non-Maximum Suppression)

 

一般是为了去除模型预测后的多余框,其一般设有一个nms_threshold = 0.5,具体实现思路如下:

  1. 选取这类box中的scores最大的哪一个,记为box_best,并保留它。
  2. 计算box_best与其余的box的IoU。
  3. 如果其IoU>0.5了,那么就舍弃这个box(由于可能两个box表示统一目标,所以保留分数高的那一个)。
  4. 从最后剩余的boxes中,再找到最大scores的哪一个,如此循环往复
  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湘粤Ian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值