前言

在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall,IoU等等。为了怕以后忘了,现在把自己对这几种度量方式的理解记录一下。 
这一文章首先假设一个测试集,然后围绕这一测试集来介绍这几种度量方式的计算方法。

大雁与飞机

假设现在有这样一个测试集,测试集中的图片只由大雁和飞机两种图片组成,如下图所示: 
 
假设你的分类系统最终的目的是:能取出测试集中所有飞机的图片,而不是大雁的图片,那么在这个任务中,飞机就是正例,大雁就是反例。

现在做如下的定义: 
True positives : 飞机的图片被正确的识别成了飞机。 
True negatives: 大雁的图片没有被识别出来,系统正确地认为它们是大雁。 
False positives: 大雁的图片被错误地识别成了飞机。 
False negatives: 飞机的图片没有被识别出来,系统错误地认为它们是大雁。

假设你的分类系统使用了上述假设识别出了四个结果,如下图所示: 
上面的几幅图片被识别为大雁,下面的几幅图片识别为飞机: 

Precision 与 Recall

Precision其实就是在识别出来的图片中,True positives所占的比率:

precision=tptp+fp=tpnprecision=tptp+fp=tpn

其中的n代表的是(True positives + False positives),也就是系统一共识别出来多少照片 。 
在这一例子中,True positives为3,False positives为1,所以Precision值是 3/(3+1)=0.75。 
意味着在识别出的结果中,飞机的图片占75%。

Recall 是被正确识别出来的飞机个数与测试集中所有飞机的个数的比值:

recall=tptp+fnrecall=tptp+fn

Recall的分母是(True positives + False negatives),这两个值的和,可以理解为一共有多少张飞机的照片。 
在这一例子中,True positives为3,False negatives为2,那么Recall值是 3/(3+2)=0.6。 
意味着在所有的飞机图片中,60%的飞机被正确的识别成飞机。

调整阈值

你也可以通过调整阈值,来选择让系统识别出多少图片,进而改变Precision 或 Recall 的值。 
在某种阈值的前提下(蓝色虚线),系统识别出了四张图片,如下图中所示: 
 
分类系统认为大于阈值(蓝色虚线之上)的四个图片更像飞机。

我们可以通过改变阈值(也可以看作上下移动蓝色的虚线),来选择让系统识别能出多少个图片,当然阈值的变化会导致Precision与Recall值发生变化。比如,把蓝色虚线放到第一张图片下面,也就是说让系统只识别出最上面的那张飞机图片,那么Precision的值就是100%,而Recall的值则是20%。如果把蓝色虚线放到第二张图片下面,也就是说让系统只识别出最上面的前两张图片,那么Precision的值还是100%,而Recall的值则增长到是40%。

下图为不同阈值条件下,Precision与Recall的变化情况: 

Precision-recall 曲线

如果你想评估一个分类器的性能,一个比较好的方法就是:观察当阈值变化时,Precision与Recall值的变化情况。如果一个分类器的性能比较好,那么它应该有如下的表现:被识别出的图片中飞机所占的比重比较大,并且在识别出大雁之前,尽可能多地正确识别出飞机,也就是让Recall值增长的同时保持Precision的值在一个很高的水平。而性能比较差的分类器可能会损失很多Precision值才能换来Recall值的提高。通常情况下,文章中都会使用Precision-recall曲线,来显示出分类器在Precision与Recall之间的权衡。 
 
上图就是分类器的Precision-recall 曲线,在不损失精度的条件下它能达到40%Recall。而当Recall达到100%时,Precision 降低到50%。

Approximated Average precision

相比较与曲线图,在某些时候还是一个具体的数值能更直观地表现出分类器的性能。通常情况下都是用 Average Precision来作为这一度量标准,它的公式为:

∫10p(r)d(r)∫01p(r)d(r)

在这一积分中,其中p代表Precision ,r代表Recall,p是一个以r为参数的函数,That is equal to taking the area under the curve.

实际上这一积分极其接近于这一数值:对每一种阈值分别求(Precision值)乘以(Recall值的变化情况),再把所有阈值下求得的乘积值进行累加。公式如下:

∑k=1NP(k)△r(k)∑k=1NP(k)△r(k)

在这一公式中,N代表测试集中所有图片的个数,P(k)表示在能识别出k个图片的时候Precision的值,而 Delta r(k) 则表示识别图片个数从k-1变化到k时(通过调整阈值)Recall值的变化情况。

在这一例子中,Approximated Average Precision的值 
=(1 * (0.2-0)) + (1 * (0.4-0.2)) + (0.66 * (0.4-0.4)) + (0.75 * (0.6-0.4)) + (0.6 * (0.6-0.6)) + (0.66 * (0.8-0.6)) + (0.57 * (0.8-0.8)) + (0.5 * (0.8-0.8)) + (0.44 * (0.8-0.8)) + (0.5 * (1-0.8)) = 0.782.

=(1 * 0.2) + (1 * 0.2) + (0.66 * 0) + (0.75 * 0.2) + (0.6 * 0) + (0.66 * 0.2) + (0.57 0) + (0.5 0) + (0.44 * 0) + (0.5 * 0.2) = 0.782.

通过计算可以看到,那些Recall值没有变化的地方(红色数值),对增加Average Precision值没有贡献。

Interpolated average precision

不同于Approximated Average Precision,一些作者选择另一种度量性能的标准:Interpolated Average Precision。这一新的算法不再使用P(k),也就是说,不再使用当系统识别出k个图片的时候Precision的值与Recall变化值相乘。而是使用:

maxk~≥kP(k~)maxk~≥kP(k~)

也就是每次使用在所有阈值的Precision中,最大值的那个Precision值与Recall的变化值相乘。公式如下:

∑k=1Nmaxk~≥kP(k~)△r(k)∑k=1Nmaxk~≥kP(k~)△r(k)

下图的图片是Approximated Average Precision 与 Interpolated Average Precision相比较。 
需要注意的是,为了让特征更明显,图片中使用的参数与上面所说的例子无关。 
 
很明显 Approximated Average Precision与精度曲线挨的很近,而使用Interpolated Average Precision算出的Average Precision值明显要比Approximated Average Precision的方法算出的要高。

一些很重要的文章都是用Interpolated Average Precision 作为度量方法,并且直接称算出的值为Average Precision 。PASCAL Visual Objects Challenge从2007年开始就是用这一度量制度,他们认为这一方法能有效地减少Precision-recall 曲线中的抖动。所以在比较文章中Average Precision 值的时候,最好先弄清楚它们使用的是那种度量方式。

IoU

IoU这一值,可以理解为系统预测出来的框与原来图片中标记的框的重合程度。 
计算方法即检测结果Detection Result与 Ground Truth 的交集比上它们的并集,即为检测的准确率:

如下图所示: 
蓝色的框是:GroundTruth 
黄色的框是:DetectionResult 
绿色的框是:DetectionResult ⋂ GroundTruth 
红色的框是:DetectionResult ⋃ GroundTruth 

参考文章

  1. 原文地址:【YOLO学习】召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))
  2. 其他相关博客:检测率,召回率,mAP,ROC

目标检测中召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))相关推荐

  1. 目标检测中准确率accuracy的计算(precision是精度、查准率)(Recall是召回率、查全率)

    准确率定义为: 查准率P和查全率R分别定义为: 查准率关心的是"预测出正例的正确率"即从正反例子中挑选出正例的问题. 查全率关心的是"预测出正例的保证性"即从正 ...

  2. 刷网课会被检测出来吗_目标检测中的Precision和Recall

    目标检测中常用的性能评价指标有Precision,Recall和F1 score. 当面对不同的任务时,该如何提高recall和precision? 思考:对于Precision值,其代表的是你所预测 ...

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

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

  4. 通俗解释机器学习中的召回率、精确率、准确率

    赶时间的同学们看这里:提升精确率是为了不错报.提升召回率是为了不漏报 网络上很多地方分不清准确率和精确率,在这里先正确区分一下精确率和准确率,以及他们的别称 切入正题 很多人分不清召回率和精确率的区别 ...

  5. 机器学习算法中的准确率、精确率、召回率和F值

    机器学习算法中的准确率.精确率.召回率和F值:https://www.jianshu.com/p/d400a821ef3d

  6. 一文讲清楚目标检测中mAP、AP、precison、recall、accuracy、TP、FP、FN、TN

    TP.FP.FN.TN 分类中TP.FP.FN.TN含义 目标检测中TP.FP.FN.TN的含义 precision .recall .accuracy precision recall accura ...

  7. 召回率与精确率的理解

    写在前面 识别精度主要由召回率(recall)和精确率(precision)两个指标决定,在训练结束时可以通过re-pre曲线来表示模型的准确度,也可以根据二者之间的关系来调节实际情况中的需要,二者曲 ...

  8. [机器学习-总结] 什么是准确率, 精确率,召回率和(精确率和召回率的调和平均)

    准确率, 精确率,召回率和精确率和召回率的调和平均 1. 背景介绍 2. 准确率(accuracy) 3. 精确率(precision) 4. 召回率(recall,也称为查全率) 5. 精确率和召回 ...

  9. 综合评价模型的缺点_【必备】目标检测中的评价指标有哪些?

    在人工智能领域,机器学习的效果需要用各种指标来评价.当一个目标检测模型建立好了之后,即模型训练已经完成,我们就可以利用这个模型进行分类识别.那么该如何去评价这个模型的性能呢? 上期我们一起学习了全卷积 ...

最新文章

  1. php 实现一致性hash 算法 memcache
  2. 廖雪峰python教程pdf-爬虫:把廖雪峰的教程转换成 PDF 电子书
  3. Vue.js(5)- 全局组件
  4. Clr编写Insert Triggr
  5. [leetcode]5179. 将二叉搜索树变平衡
  6. java multipy_python multi-thread multi-process
  7. ESP8266无线模块相互通信
  8. esxi 虚拟机的控制台上键盘无法输入
  9. 动态注册 Module
  10. AutoCAD .Net 创建直线Line
  11. unity2d游戏开发系列教程:三、场景布置,增加怪物和机关
  12. 古人对梦的解释_中国古代对梦的解释-精选文档
  13. 超简单的Python教程系列——异步
  14. POJ 2393 Yogurt factory(贪心)
  15. Dockerfile最佳实践【原创、很多实践经验】
  16. MYSQL数据库写马讲解
  17. 使用JavaScript创建音乐播放器的案例详解
  18. 树莓派文字转语音 python_基于树莓派的OTON眼镜:将文本转换为语音
  19. 理解Project2007中的视图
  20. RPG Maker XP游戏制作方法(二)

热门文章

  1. boost::proto::make_expr相关的测试程序
  2. boost::polygon模块实现自定义polygon相关的测试程序
  3. boost::math::nonfinite_num_facets用法的测试程序
  4. boost::hana::make_optional用法的测试程序
  5. boost::log模块测量日志记录发射的性能
  6. GDCM:ReadCanRead的测试程序
  7. Boost:自定义vector的测试程序
  8. VTK:Qt之SideBySideRenderWindowsQt
  9. VTK:PolyData之NullPoint
  10. C++Bitonic Sort双调排序/比并排序的实现算法(附完整源码)