理解COCO的评价指标:AP,AP50,AP70,mAP,AP[.50:.05:.95]

您所在的位置:网站首页 aps表示什么意思 理解COCO的评价指标:AP,AP50,AP70,mAP,AP[.50:.05:.95]

理解COCO的评价指标:AP,AP50,AP70,mAP,AP[.50:.05:.95]

2024-07-03 08:19| 来源: 网络整理| 查看: 265

中文博客: https://blog.csdn.net/zdh2010xyz/article/details/54293298 https://blog.csdn.net/hysteric314/article/details/54093734?tdsourcetag=s_pctim_aiomsg 英文博客(可能要墙): https://towardsdatascience.com/evaluating-performance-of-an-object-detection-model-137a349c517b https://medium.com/@jonathan_hui/map-mean-average-precision-for-object-detection-45c121a31173 https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3

看完上面,其实IOU,AP基本也就理解了(可能不全,各位多搜搜,多理解),但将两者结合后,带入目标检测任务中,小白就表示无法理解了-_-||。 然后去看了别人计算的源码,算是有点理解: https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734 这个源码挺好的,自带数据(json格式),写的也不会太难理解,适合我这种想要提升的小白。

以下观点不一定正确,但是我觉得合理,有错欢迎指正。

首先强调一些概念,这里假设目标检测任务是单类别: 【1】分类任务中,一个图片对应一个标签和一个预测。而目标检测任务,一个图片对应有m个标签(bbox)和n个预测(score+bbox)。一个图片可能就没有目标m=0,也可能模型啥都没有预测出来n=0。 【2】标签就一个bbox,因为是单类别。 bbox是一个四个数值(x1,y1,x2,y2)。 【3】预测的每个bbox还对应这一个score,表示这个框是否为目标的一个概率 【4】如下图,TP,FN,FP可计算,但TN不可计算。原因是标签的bbox和预测的bbox都只表示图像中哪个位置是目标物体,除此之外的都是非目标物体。这样的话TN就有无穷多个。 在这里插入图片描述 【5】TP,FN,FP如何计算?

若某个标签bbox与某个预测bbox的IOU大于IOU_T(一个阈值,比如70%),则TP+=1。如果没有任何预测的bbox与某个标签bbox的IOU大于IOU_T,说明这个正例bbox未被预测出,则FN+=1如果没有任何标签的bbox与某个预测bbox的IOU大于IOU_T,说明这个预测的正例是假的,则FP+=1

【6】再在上述基础上套上score,算P_R曲线,再算AP。这里就直接上例子吧。

对于某张图片 标签,就2个bbox:

idbbox0[480, 457, 515, 529]1[637, 435, 676, 536]

预测,有6个bbox和6个score(已经按照score排序):

idscorebbox00.972[641, 439, 670, 532]10.9113[484, 455, 514, 519]20.8505[649, 479, 670, 531]30.2452[357, 458, 382, 485]40.1618[468, 435, 520, 521]50.1342[336, 463, 362, 496]

IOU>70%的bbox只有标签的id=0的[480, 457, 515, 529]和预测的id=1的 [484, 455, 514, 519] 那么我么按照ap的计算流程,先是把score的分界线画在第一个:

TPFPFNprecisonrecall01200

把score的分界线画在第二个:

TPFPFNprecisonrecall1110.50.5

把score的分界线画在第三个:

TPFPFNprecisonrecall1210.330.5

把score的分界线画在第四个:

TPFPFNprecisonrecall1310.250.5

把score的分界线画在第五个:

TPFPFNprecisonrecall1410.20.5

把score的分界线画在第六个:

TPFPFNprecisonrecall1510.160.5

然后我们求11点AP70 recall 取11个点 = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1] 对应的precision的11个点 =[0.5,0.5,0.5,0.5,0.5,0.5,0,0,0,0,0] (这里为什么都是0.5,各位可以查一查11点AP的算法) AP70 = 0.5+0.5+0.5+0.5+0.5+0.5+0+0+0+0+0+0/11 = 0.27

这个例子有点极端,P-R曲线也很难看,P的取值也居然都是0.5。 不过就是我理解的AP70的求法,也就是IOU_T设置到70%

-----分割线------------------------------------- 按上面套路可以在求一求AP50 那么首先符合IOU>50%的bbox为: 标签的id=0的[480, 457, 515, 529]和预测的id=1的 [484, 455, 514, 519] 标签的id=1的 [637, 435, 676, 536]和预测的id=0的 [641, 439, 670, 532] 按AP流程计算,这里我就不列举表格了,是程序输出:

'true_pos': 1, 'false_pos': 0, 'false_neg': 1 'true_pos': 2, 'false_pos': 0, 'false_neg': 0 'true_pos': 2, 'false_pos': 1, 'false_neg': 0 'true_pos': 2, 'false_pos': 2, 'false_neg': 0 'true_pos': 2, 'false_pos': 3, 'false_neg': 0 'true_pos': 2, 'false_pos': 4, 'false_neg': 0 precision = [1,1,0.66,0.5,0.4,0.3] recall = [0.5,1,1,1,1,1]

最后计算11点AP50 AP50 = 1+1+1+1+1+1+1+1+1+1+1 /11 = 1 好吧,又是一个极端的例子。

-----分割线------------------------------------- 那么COCO中说的AP是AP[.50:.05:.95],也就是IOU_T设置为0.5,0.55,0.60,0.65……0.95,算十个APx,然后再求平均,得到的就是AP。 因为COCO还是多类别,所以再对类别求平均就是mAP,但是COCO统一为了AP

下面是官网介绍: http://cocodataset.org/#detection-eval 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3