机器学习的性能度量及目标检测评价

机器学习的性能度量及目标检测评价

基础

Precison:positive的检准率 ; Recall:positive的检出率

机器学习中的ROC和PR曲线

两者的定义不同

使用区别:如果是不平衡类,正样本的数目非常的稀有,而且很重要,PR表现的效果会更好

AP采用的是PR曲线

平均性能与特定条件下性能

当我们在测试集上使用test模型测试的时候,网络或模型除了一些必要的后处理,几乎是不对预测结果做限制性的后处理的(在SSD中的DetectionOutputLayer的score_threshold,top_k都是非常宽松的),也就是尽可能地保留预测结果,然后在评价时,用一些限制性方法(如topN)获得一系列的评价结果(如precision, recall)再对其进行综合(如AP),从而得出模型的整体性能(在不同的限制性后处理参数下的总体或平均性能)

而当我们在使用deploy模型时,往往会设定一些限制性后处理参数,并把处理后的检测结果作为最终采用的输出。所以如果我们在测试集上使用deploy模型进行测试,我们认为所有检测结果都是positives,与gt比较直接得出precision and recall,从而直观评价当前参数下deploy模型的性能。

平均性能(如mAP)有利于不同模型的整体性能的比较,而特定条件下的性能(precision and recall)才能够提供直观的性能评价。

AP

参看wiki-Evaluation measures (information retrieval) AP部分

AP是在各个recall下precision的均值,

The AP summarises the shape of the precision/recall curve,

其具体实例参看多标签图像分类任务的评价方法-mAP

AP是综合precision和recall计算出的,所以对于偏斜类应该也是可以的,同时也解释了AP不会很高的,因为precision和recall无法同时很高

多标签图像分类任务的评价方法-mAP

测试/推理阶段:输入图片和groud truth label

二分类问题:对于一个输入, 计算score, 推理时根score和阈值判断P和N,评价性能时再根据ground truth的类别判断T, F; 对于N个输入, 设置不同的阈值, 可以得到一系列不同结果

多分类问题:对于一个输入, 计算各个类别的score, 推理时根据根据最大score和阈值判断P和N, 如果为P, 则预测类别为最大scorel类别,评价性能时再根据ground truth的类别判断T, F; 对于N个输入, 设置不同的阈值, 可以得到一系列不同结果, 但实际上按照以Top-n(n=1,2,…N)为P, 得到一些列不同结果

当以TopN为P,则Recall=1; 当TOP1=P,很有可能是TP,则Precision=1

物体检测评价

基础

参考资料:http://tarangshah.com/blog/2018-01-27/what-is-map-understanding-the-statistic-of-choice-for-comparing-object-detection-models/

IoU:Intersection over Union

IoU=intersection/Union

NMS: 非极大值抑制

关于object detection的nms(非极大值抑制):

在测试/推理阶段,

对于预测Class为 C的所有Bounding Box的列表B及其对应的置信度S,采用下面的计算方式:选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的IoU大于阈值Nt的框从B中移除.重复这个过程,直到B为空.

对所有Class的Bounding Box重复上述过程

由于NMS是类别间独立的,可能造成最终检测结果同一个物体有两个非常接近甚至重合(由于share location)的但类别不同的检测框,特别是这两个类别的物体比较相似时(prior所处特征点可能对相似类别的预测conf都比较高,且预测的loc也比较接近),可以考虑做一个相似类别的检测结果的NMS来避免

当box很多, (比如ssd由于default box很多), 可以先用置信度阈值过滤掉一部分box,再采用上述步骤, 并且每个类别最多保留n1个(如200,加入D中的前200个)数目的检测结果,

对于一张输入图片, 通常在对所有类别NMS之后得到的结果, 还会根据score排序保留靠前的n-pic个box(最多n-pic)

物体检测各阶段梳理

训练阶段:

输入图片和对应标签

核心操作:给定Bounding box, 与ground truth 匹配, 给定各类别的置信度, 定义训练目标(定位损失和分类损失), 正负例类别均衡问题解决

参见RCNN/SSD

推理阶段:

对于一个输入, 计算一系列的BBox及对应的各个类别的置信度, 进行非极大值抑制(类别独立), 输出一系列bbox及对应类别

检测结果评价/测试阶段:
  1. 输入M张图片和对应标签

  2. 对每张图片推理(后处理的限制条件非常宽松)(每张图片最多保留n-pic个box)

  3. 对于每一类别, 计算AP (这个过程是对于所有输入图片一起进行)

    对NMS后结果, 取根据score排序后的top-n个检测结果为P, 其余为N, 对于其中某一Positive, 与所在图片中该类别任一GT的IoU大于阈值(或者与所在图片中该类别所有GT的IoU的最大值大于阈值), 且该GT未被匹配过,即为TP,标记该GT已经匹配 ,否则为FP

    参考voc论文 :

    For a given task and class, the precision/recall curve is
    computed from a method’s ranked output. Recall is defined
    as the proportion of all positive examples ranked above a
    given rank. Precision is the proportion of all examples above
    that rank which are from the positive class

    Detections were assigned to ground
    truth objects and judged to be true/false positives by measuring bounding box overlap.

    对于n=1,2,…N分别执行上一步骤, 分别计算precision, recall然后可以绘制precision-recall curve 或者计算Average Precison

    由RFCN的voc_eval.py 代码, 原理的确是这样, 但为了计算的方便和高效, 计算单类别的AP采用的是(略有不同,分解为两个函数,DetEvalTF是检测相关的,其结果可用于各种评价指标,ComputeAPWrapper对检测和分类都一样,caffe-ssd中的实现略有不同,通过遍历图像进行mark):

    Function: DetEvalTF   or  TPs, FPs = DetEvalTF(GT, DET)
    Input: GT and DET of certain class of all images
    Output: detection marker vector: TPs and FPs
    Steps:
        if no dets for this class:
            ...
            return
        if no gt for this class:
            ...
        	return
        sort detections by confidence
        # go down dets and mark TPs and FPs
        define detection marker vector: TPs and FPs
        for each det in sorted order:
            if the image of det doesn't contain object of this class:
              mark this det as FP in FPs
            calculate overlaps with all gt in corresponding image
            calculate max overlap over all gts in corresponding image
            # match and mark
            if max overlap > threshold:
                if this gt is not matched:
              	  mark this det as TP in TPs
               	  mard this gt as matched
                else:
                  mark this det as FP in FPs
            else:
                mark this det as FP in FPs
    
    Function: ComputeAPWrapper
    Input: TPs and FPs of certain class
    Output: AP of this class.
    Steps:
        # calculate cumulative sum of TPs and FPs(top1, ..., topnN)
        TPs_ = cumsum(TPs), FPs_ = cumsum(FPs)
        # compute precision and recall vector
        PRECs = TPs_ ./ (TPs_ + FPs_)
        RECs = TPs_ / num_gt
        # compute AP with certain method
        AP = computeAP(PRECs, RECs, method)
    
  4. 计算mAP

    mAP=各类别AP的均值 =(各类别AP求和)/类别数

    根据训练中类的分布情况,平均精度值可能会因为某些类别(具有良好的训练数据)非常高(对于具有较少或较差数据的类别)而言非常低。所以我们需要mAP可能是适中的,但是模型可能对于某些类非常好,对于某些类非常不好。因此建议在分析模型结果的同时查看个各类的平均精度,这些值也可以作为我们是不是需要添加更多训练样本的一个依据。

  5. 影响因素

    综上,推理模型,NMS的IoU阈值,后处理参数(一般很宽松,对mAP影响可忽略),判定Positive box是否为True的IoU阈值,都会影响mAP

FPPI和FPPW

目标检测中另外常用的评价标准则是FPPW和FPPI,详细应用可以参考这篇文章:

Pedestrian detection: A benchmark

两者都侧重考察FP(False Positive)出现的频率。
FPPW (False Positive per Window)

基本含义:给定一定数目N的负样本图像,分类器将负样本判定为“正”的次数FP,其比率FP/N即为FPPW。意义与ROC中的假阳率相同。FPPW中,一张图就是一个样本。

FPPI (False Positive per Image)

基本含义:给定一定数目N的样本集,内含N张图像,每张图像内包含或不包含检测目标。

每张图像均需要标定:

  1. 包含目标的个数;
  2. 目标的准确位置L。

而后在每张图像上运行分类器,检测目标并得到位置p。然后,检查每张图像内的检测结果是否“击中”标定的目标:

a. 若图像内无目标,而分类器给出了n个“目标”检测结果,那么False Positive 次数 +n;

b. 若图像内有目标,则判断p是否击中L,判断标准参看上述文章(主要看p与L的重叠率)。若判断未击中,则False Positive 次数 +1。

最后 FPPI = (False Positive 次数)/N。

FPPI 相比于FPPW来说,更接近于分类器的实际应用情况。

作者:Alanyannick
来源:CSDN
原文:https://blog.csdn.net/u011534057/article/details/51734089
版权声明:本文为博主原创文章,转载请附上博文链接!

FPPI是特定条件下的性能评价,反映的是平均每张图中误检物体的的数目。

TPs, FPs = DetEvalTF(GT, DET) 
# calculate cumulative sum of TPs and FPs 
TPs_ = cumsum(TPs), FPs_ = cumsum(FPs)
# compute precision and recall vector
PRECs = TPs_ ./ (TPs_ + FPs_)
RECs = TPs_ / num_gt
# compute FPPIs
FPPIs = FPs_ / num_img
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值