recall_precision_AP_CSDN

Recall, Precision & AP

https://sanchom.wordpress.com/2011/09/01/precision-recall/讲的比较清楚,习惯英文同学可直接阅读。

基本概念

关于TP、TN、FP、FN

True positives(TP): 真-正例
True negatives(TN):真-反例
False positives(FP):假-正例

False negatives(FN):假反例

image-20211122192534159image-20211213162754052

关于目标检测中的recall和precision计算示意。左图来自于:https://blog.csdn.net/weixin_44791964/article/details/102414522,有图来自于:https://en.wikipedia.org/wiki/Precision_and_recall

可结合上两图进行理解:根据真实标签是正样本、负样本有两种情况;根据检测到结果是正例、反例也有两种结果,因此组合是 2 × 2 = 4 2\times2=4 2×2=4种。每次检索结果为图中的圆圈,圆外为筛选掉样本。

Recall和Precision

理解:(relevant:相关的,可理解为GT;retrieved:检索到的)

  • recall表示的是正样本中有多少被检测出来;
  • precision表示检测到的样本中有多少是正样本。

image-20211213213603392

案例说明

假设是要正确的从含有飞机和天鹅图片集中检索到飞机:

image-20211213230609136image-20211213224258549

如上所示,左边是所有的样本。在一次检索中,共检索了4张图片(和阈值设置有关),其中3张是真-正样本(确实是飞机),1张假-正样本(是天鹅但是被检索认为是飞机)。

则:
p r e c i s i o n = t p t p + f p = 3 3 + 1 = 75 % r e c a l l = t p t p + f n = 3 3 + 2 = 60 % precision = \frac{tp}{tp+fp}=\frac{3}{3+1}=75\%\\ recall=\frac{tp}{tp+fn}=\frac{3}{3+2}=60\% precision=tp+fptp=3+13=75%recall=tp+fntp=3+23=60%
即precision是本次检索结果中检测到的正样本占检测所有样本的比例。分子、分母都是变化的。

而recall相对而言不仅和本次检测相关,还和全局信息相关。即分母是确定的,分子不同导致结果不同。

此时再理解一下上面的TP、TN、FP、FN:

True positives: Airplane images that your system correctly retrieved(3,检测到的图片中真-正样本数,将飞机确实是飞机)
True negatives: Geese images that your system correctly did not retrieve(4,没有被检测到样本中真-负样本数,剩下图片中的天鹅)
False positives: Geese images that your system incorrectly retrieved, believing them to be airplanes(1,检测到的样本中的假-正样本,即将天鹅误分为飞机)
False negatives: Airplane images that your system did incorrectly did not retrieve, believing them to be geese(2,没有被检测到的样本中的真-正样本)

Adjusting the threshold

调整阈值得到不同的检测结果。

image-20211214125757461

image-20211214125847592

根据这一段我们可以解释一些信息:

  • 其实每次仍会对所有目标进行检索(检测),但是最终根据设置的阈值只会得到部分结果。例如上图所示,在每一次中会对10张图片都进行检测,然后(根据置信度)进行排序,然后根据排序结果不同得到本次检测结果的不同。

以下得到不同的检测结果:

image-20211214130156279

**其实也就是说,两个数据——recall和precision并不会有必然的变化关系。**随着阈值的降低,precision可能是波动的,但是recall值持续增大的(分子逐渐变大)。

自己作图进行理解

image-20211214142437339

参考最开始的图进行理解。

  1. 浅绿色+浅蓝色是所有的数据,包括正样本和负样本;
  2. 然后假设每次检索/检测得到的结果由虚线红框表示。即每次都是对全部样本进行检测,但是因为设置的阈值不同,所示检索到的结果也是不一样的,即红框(大小)在动态变化;
  3. 随着设置不同的阈值,则这个框会在整个空间内移动,这样就会得到不同的recall和precision,也就是说即使数据本身没有变化,但是检测过程变了。

Precision-recall curves

根据上面的分析,其实假设这个模型训练的很好的话,则期望每次对结果进行排名,都会是正确类别在前,而错误类别在后,这样预期结果是:recall会增大(分母不变,分子逐渐变大),但是precision期望在一定程度内不变(没检测到负样本前均不变)。

整体上来看,recall随着阈值的降低会增大,而precision则会减小。

image-20211214131532941

也就能解释为什么是面积更能反映检测器效果的好坏了。即横坐标(recall)增大的同时,期望纵坐标(precision)下降的不多。

Average precision

定义的是平均精度,从计算式上表示为:
∫ 0 1 p ( r ) d r \int_0^1 p(r) dr 01p(r)dr
即图中 P − R P-R PR曲线与 x x x轴所被包围的面积。

离散形式为:
∑ k − 1 N P ( k ) Δ r ( k ) \sum_{k-1}^N P(k) \Delta r(k) k1NP(k)Δr(k)
对于上面的案例:
ap = ( 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 \text{ap}=(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 ap=(10.2)+(10.2)+(0.660)+(0.750.2)+(0.60)+(0.660.2)+(0.570)+(0.50)+(0.440)+(0.50.2)=0.782

Interpolated average precision

使用插值计算ap。

image-20211214140356275image-20211214140338360

左边的是近似的,右边的是插值的。插值计算:
∑ k = 1 N max k ~ ≥ k P ( k ~ ) Δ r ( k ) \sum_{k=1}^N \text{max}_{\tilde k \geq k} P(\tilde k) \Delta r(k) k=1Nmaxk~kP(k~)Δr(k)
即使用插值时,计算的是当前值的最大值。但是这样插值得到的结果会大于精确结果,也会大于上面的近似结果。

一开始大家使用的往往是PASCAL Visual Objects Challenge中的AP计算方法,即采用11点插值。但是可以看到,使用插值方法会带来一定的问题。那么如果要使用AP对方法进行评价,则采用的AP计算方法也应该一致,这样尽可能的对其它因素进行消融处理。

主要参考资料

https://github.com/MathGaron/mean_average_precision

https://sanchom.wordpress.com/2011/09/01/precision-recall/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值