metrics 评价方法

针对谁进行评价?

  • 对于物体分类到某个类别的 预测结果 和 真实结果 的差距进行评价(二分类)

  • 在多分类问题中,评价方法是逐个类计算的,不是所有类一起算!是只针对一个类算,每个类别有自己的指标值!

    • 也就是对每个类别,预测结果Positive\Negative 和真实结果的差距

在detection任务中,要在什么阶段用?

  • 一般是将网络的输出,在各个类别下统计topk,再对这些topk使用NMS,最后得出的结果才用来评价。实际上这也是detection的结果。

TP , FP , TN , FN

概念

TP = True Positive

  • 预测为positive 且ground-truth和预测一致 => ground-truth是positive

FP= False Positive

  • 预测为positive 且ground-truth和预测不一致 => ground-truth是negative

TN=True Negative

  • 预测为negative 且ground-truth和预测一致 => ground-truth是negative

FN=False Negative

  • 预测为negative 且ground-truth和预测不一致 => ground-truth是positive

 

计算流程

不同数据集可能用的是不同的定义方法,以VOC07为例

在所有预测为猫咪类的框中, 具有怎么样的特征的框才是 TP 和 FP 呢?

计算流程

  1. 猫咪类别的 Prediction 下,对于某一确定 confidence threshold
  • 将 Prediction 按照 confidence 排序
  • confidence 大于 confidence threshold 的 Prediction 定义为 Positive
  1. 猫咪类别的 Positive Prediction下,对于某一确定 IOU threshold
  • 猫咪类别的 GT的 IOU 大于 threshold 的 Prediction, 并且 该GT是未被其它Prediction 匹配的,标记为 True Positive(TP),同时对应的GT标记为已匹配
  • 猫咪类别的 GT的 IOU 小于 threshold 的 Prediction, 或是该GT已经被匹配,则标记为 False Positive(FP)

Accuracy , Precision ,Recall

设样本 \(i\) 的真实标签 \(x_i\),网络输出的置信度为 $ y_i $

准确率Accuracy

\[
\frac{CorrectNum}{TotalNum}=\frac{TP+TN}{TotalNum}
\]

精确率Precision 判断对了多少个【都被模型判断为positive,其中判对了多少个】

\[
p(t)=P(x_i \in C\ |\ y_i \ge t ) = \frac{TP}{TP+FP}=\frac{TP}{all\ detections}
\]

召回率Recall positive找到了多少个 【在真实标签为positive的所有样本中,找到了多少个】

\[
r(t)=P(y_i \ge t \ | \ x_i \in C) = \frac{TP}{TP+FN}=\frac{TP}{all\ groundtruth}
\]

https://blog.csdn.net/asasasaababab/article/details/79994920 这里有解释为什么不能直接用准确率accuracy:

  • 主要是因为类别不平衡问题,如果大部分是negative的 而且大部分模型都很容易判别出来,那准确率都很高, 没有区分度,也没有实际意义(因为negative不是我们感兴趣的)

Precision vs Accuracy

Precision 查准率,针对某一类别,没有说明具体类别的precision是没有意义的,在二分类问题中默认是正样本的precision (比如在目标检测里面针对的是positive类别)

Accuracy 准确率,计算的是分类正确个数占全体样本的比例,针对的是所有类别

Average Precision

平均精确率Average Precision

\[
AP = \frac{1}{11}\sum_{r\in \{0, 0.1, 0.2, ..., 1\}} p_{interp}(r) \\
p_{interp}(r) = max_{\hat r:\hat r \ge r} p(\hat r)
\]

  • 解释第二个式子:r的取值从 0到1 以0.1为间距,共11个取值。从某个r开始 从所有比r大的值中选择某个作为阈值t 计算精度,返回精度的最大值

  • \(AP_{2D}\): 在图像平面上计算的AP 记为\(AP_{2D}\)

3D detection中还会涉及到以下指标:

  • \(AP_{BV}\):将3D检测投影到BEV视角,然后计算\(AP_{BV}\) ,能够避免不同物体投影到2D可能会重叠的情况

  • \(AP_{3D}\):直接计算3D bbox和ground-truth bbox的IoU,但是仍然无法精确衡量bbox方向的精确率

PR曲线

Precision-Recall Curve

  • Recall是横轴, Precision是纵轴,随着Recall的增大,Precision会下降,因为为了使模型找得更全(high recall),可能需要检测更多物体,从而可能有很多false positive(使得precision下降)

  • 以rank为例,计算 每新增一个样本之后,当前序列的precision和recall https://blog.csdn.net/asasasaababab/article/details/79994920 这里有给出图片例子

  • 怎么画的?插值

  • 【局限】只比较不同模型的曲线有时候很难分辨,因为不同的曲线可能经常会交叉,考虑用AP(其实就是曲线和坐标轴围成的面积,是一个数值,可以更直观比较)

AP计算 Average Precision

两种方式:11点插值,或是计算面积(AUC Area Under Precision-Recall Curve)

  • 11点插值:把recall从 0~1 每隔 0.1 取端点 共11个,每个端点对应 \(p_{interp}(r)\) 计算公式如上

    • 对于一批样本个数为 n 的数据,可以计算出 n 个 precision 和 recall:

      • 当处理第一张图,统计第一张图里的 \(TP_1\) 和 \(FP_1\)

      • 到下一张图时,统计前两张图总共的 \(TP_2\) 和 \(FP_2\)

      • 同理,到第 k 张图时,统计前 k 张图总共的 $TP_k $ 和 \(FP_k\)

      • 用这n个 \(TP\) 和 \(FP\) 可以计算出 n 个precision 和 recall (其实就是 前1张图的precision\recall,前2张图的precision\recall, ....)

      • 最后用这n个precision和recall去做11点插值,得到 recall 在 11 个取值下对应的 precision,用这个 recall 和 precision就可以画出PR曲线

  • 计算面积:将曲线平滑成直角折线,从而计算曲线与坐标轴的面积近似于对每小块矩形面积求和

https://github.com/rafaelpadilla/Object-Detection-Metrics

mAP

目标检测中衡量识别精度的指标是mAP(mean average precision)

多个类别物体检测中每一个类别都可以根据recall和precision绘制一条曲线,AP就是该曲线下的面积,mAP是多个类别AP的平均值


参考资料

https://blog.csdn.net/asasasaababab/article/details/79994920

https://github.com/rafaelpadilla/Object-Detection-Metrics

目标检测的评价标准mAP, Precision, Recall, Accuracy的更多相关文章

  1. 目标检测方法——SSD

    SSD论文阅读(Wei Liu--[ECCV2016]SSD Single Shot MultiBox Detector) 目录 作者及相关链接 文章的选择原因 方法概括 方法细节 相关背景补充 实验 ...

  2. 【计算机视觉】目标检测之ECCV2016 - SSD Single Shot MultiBox Detector

    本文转载自: http://www.cnblogs.com/lillylin/p/6207292.html SSD论文阅读(Wei Liu--[ECCV2016]SSD Single Shot Mul ...

  3. 目标检测的mAp

    众多目标检测的知识中,都提到了mAp一值,那么这个东西到底是什么呢: 我们在评价一个目标检测算法的"好坏"程度的时候,往往采用的是pascal voc 2012的评价标准mAP.目 ...

  4. 通过Precision/Recall判断分类结果偏差极大时算法的性能

    当我们对某些问题进行分类时,真实结果的分布会有明显偏差. 例如对是否患癌症进行分类,testing set 中可能只有0.5%的人患了癌症. 此时如果直接数误分类数的话,那么一个每次都预测人没有癌症的 ...

  5. 目标检测YOLOv1-v3——学习笔记

    Fast RCNN更准一些.其损失函数比YOLO简单. YOLO更快 YOLO(You Only Look Once) 简介: 测试过程: 训练过程: 坐标.含有.不含.类别预测 目标检测的效果准确率 ...

  6. 目标检测评价标准(mAP, 精准度(Precision), 召回率(Recall), 准确率(Accuracy),交除并(IoU))

    1. TP , FP , TN , FN定义 TP(True Positive)是正样本预测为正样本的数量,即与Ground truth区域的IoU>=threshold的预测框 FP(Fals ...

  7. 目标检测模型的性能评估--MAP(Mean Average Precision)

    目标检测模型中性能评估的几个重要参数有精确度,精确度和召回率.本文中我们将讨论一个常用的度量指标:均值平均精度,即MAP. 在二元分类中,精确度和召回率是一个简单直观的统计量,但是在目标检测中有所不同 ...

  8. 【计算机视觉】目标检测中的指标衡量Recall与Precision

    [计算机视觉]目标检测中的指标衡量Recall与Precision 标签(空格分隔): [图像处理] 说明:目标检测性能指标Recall与Precision的理解. Recall与Precision ...

  9. 评价目标检测(object detection)模型的参数:IOU,AP,mAP

    首先我们为什么要使用这些呢? 举个简单的例子,假设我们图像里面只有1个目标,但是定位出来10个框,1个正确的,9个错误的,那么你要按(识别出来的正确的目标/总的正确目标)来算,正确率100%,但是其实 ...

随机推荐

  1. coco数据集标注图转为二值图python(附代码)

    coco数据集大概有8w张以上的图片,而且每幅图都有精确的边缘mask标注. 后面后分享一个labelme标注的json或xml格式转二值图的源码(以备以后使用) 而我现在在研究显著性目标检测,需要的 ...

  2. LeetCode 674. Longest Continuous Increasing Subsequence最长连续递增序列 (C++/Java)

    题目: Given an unsorted array of integers, find the length of longest continuous increasing subsequenc ...

  3. 浅谈lowbit运算

    关于lowbit运算的相关知识 本篇随笔简单讲解一下计算机中位运算的一类重要运算方式--\(lowbit\)运算. lowbit的概念 我们知道,任何一个正整数都可以被表示成一个二进制数.如: \[ ...

  4. lincense更新失败

    用户的证书到期,页面无法访问, 1 #/dashboard/systemindex在这里面上传证书文件,一分钟后会恢复正常 2 在后台直接配置license字段,将license文件的内容直接拷贝过去 ...

  5. ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程

    前言 鉴于有些用户直接想使用现成的物联网平台实现 OTA 远程升级 我就写一写这系列的文章 注意:首先大家必须把我自建服务器是如何实现的看明白! 我看了下阿里云提供的,实际上流程和咱自建实现的差别不大 ...

  6. pytest--配置

    说到配置,大家可能想到的是不经常更改的内容,比如Django里的settings.py文件,或者我们做自动化的时候,把测试环境的域名和正式环境的域名放到一个配置文件里,所有的接口都从这个文件里读取.这 ...

  7. Gin框架 - 使用 Logrus 进行日志记录

    概述 上篇文章分享了 Gin 框架的路由配置,这篇文章分享日志记录. 查了很多资料,Go 的日志记录用的最多的还是 github.com/sirupsen/logrus. Logrus is a st ...

  8. Redis set集合

    Set操作.Set集合就是不允许重复的列表 (无序集合) sadd(name,values) # name对应的集合中添加元素 scard(name) # 获取name对应的集合中元素个数 sdiff ...

  9. 机器学习(六)--------神经网络(Neural Networks)

    无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时, 计算的负荷会非常大. 比如识别图像,是否是一辆汽车,可能就需要判断太多像素. 这时候就需要神经网络. 神经网络是模拟人类大脑的神经网络, ...

  10. Java基础扫盲系列(三)— Java内省技术

    前言 Java内省技术属于Java基础体系的的一部分,但是很多人都不甚了解.笔者也是在学习Spring源码的过程中遇到该技术模块的.为了完善技术体系,本文将全面的学习该技术.在提到Java内省技术,就 ...