理论部分的研究看这个链接
https://zhuanlan.zhihu.com/p/48992451
http://blog.sina.com.cn/s/blog_9db078090102whzw.html
PR曲线
自己用python实现了Precision和Recall的计算,并画PR曲线的代码附上:
import matplotlib.pyplot as plt
score = [0.91, 0.76, 0.65, 0.46, 0.45, 0.38, 0.24, 0.23, 0.23, 0.13, 0.12, 0.12, 0.11, 0.1, 0.09, 0.08, 0.07, 0.03, 0.03, 0.01]
gt = [1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0]
precision, recall =[], [] #不同threshold下的precision和recall值构成的列表
for i in range(1,21):
TP = gt[:i].count(1)
FP = gt[:i].count(0)
FN = gt[i:].count(1)
TN = gt[i:].count(0)
precision.append(TP/(TP + FP))
recall.append(TP/(TP + FN))
plt.figure(1)
plt.xlabel('recall')
plt.ylabel('precision')
plt.plot(recall,precision) #recall是横坐标,precision是纵坐标
plt.show()
得到的PR曲线如下:
AP值的计算
VOC07和VOC10有两种不同的评判方式,
VOC07标准
(下图绿色框)选择每个recall区间内对应的最高precision,最后求平均得到AP。
求AP(VOC07版本)的代码:
count = [] #count记录recall区间的个数
AP = 0
for i in range(len(recall)):
if i>=0 and recall[i]==recall[i-1]:
continue
count.append(i)
AP += precision[i]
print(AP/len(count))
VOC10标准
(上图白色框),假设N个样本有M个正例,那么会得到M个recall值,对于每个recall值r,我们可以计算出对应(r’ > r)的最大precision,然后对这M个precision值取平均即可得到最后的AP值。
VOC07和VOC10的区别
- 主要在recall = 3 / 6下的precision,可以发现VOC07找的top-precision是在该recall区间段内的,但VOC10相当于是向后查找的,需确保该recall阈值以后的区间内,对应的是top-precision,可知4 / 7 > 3 / 6,因此使用4 / 7替换了3 / 6,其他recall阈值下的操作方式类似;
- VOC07是11点插值的AP方式,等于是卡了11个离散的点,划分10个区间来计算AP,但VOC10是是根据recall值变化的区间来计算的,在这个栗子里,recall只变化了6次,但如果recall变化很多次,如100次、1000次、9999次等,就可以认为是一种 “伪” 连续的方式计算了;
经过“去重”后的recall就没有重复了,这样得到的PR曲线如下,是单调递减的。
ROC和AUC
ROC和AUC是评价分类器的指标, ROC关注两个指标:
True Positive Rate ( TPR ) = TP / [ TP + FN] ,TPR代表能将正例分对的概率
False Positive Rate( FPR ) = FP / [ FP + TN] ,FPR代表将负例错分为正例的概率
还是用上面的数据,画出ROC曲线如下所示:
AUC是ROC曲线下的面积。
检测领域AP/mAP的计算
https://www.zhihu.com/question/53405779/answer/382974995
在实际问题中,Precision/Recall/漏检率/误检率的计算往往是用二分类的评价指标来做的,就是要先求TP/FP/TN/FN这四个参数,然后根据前面说的步骤求解。但是在检测领域,计算方式如下:
- Precision
对于某个类别C,在某张图片上,Precision =在一张图片上类别C识别正确的个数(也就是IoU>0.5)/一张图片上类别C的总个数
2. AP
AP=每张图片上的Precision求和/含有类别C的图片数目
3. mAP
mAP=上一步计算的所有类别的AP和/总的类别数目。相当于所有类别的AP的平均值。
更新:
分类任务的mAP计算,是