mAP以及AP计算方式
作者:互联网
1、前言
AP就是P—R曲线下的面积,我们需要做的就是根据不同的置信度阈值(p_threshold),计算出这模型得到的预测框的(R,P),然后作出P—R曲线,并求解面积,就能得到目标检测模型对该检测种类的AP。(在VOC2010之后,计算AP需要对做出来的P—R曲线做一个平滑,之后会提到)
和分类模型计算P(精确度)R(召回度)不一样的是(分类模型计算P,R可以参看我这篇博文AUC、精确率和召回率),在目标检测中我们是没法知道我们模型出来的预测框的真实值是什么的(甚至GT和预测框的个数都是不匹配的),但是该怎样计算P和R呢?其实计算P,R最重要的指标只有3个,分别是:
TP | 真实值为正——>预测值为正 |
FP | 真实值为负——>预测值为正 |
FN | 真实值为正——>预测值为负 |
因此在目标检测中我们只需要计算出以上三个指标就可以了。
2、例子
我们直接用例子来进行解释,假设我们有5个GT(Ground_Truth就是目标检测中人工标注的对象的矩形框,可以认为是真实物体的标签,下面用BB1—BB5来表示),我们模型对该种识别种类返回了10个预测框,接下来我们计算该种类的AP:
1、根据预测框计算和GT的IOU,如果IOU大于iou_threshold(IOU阈值,不要和前面的p_threshold弄混了)则标记为1,否则标记为0。比如我们预测出来10个框,根据iou_threshold可以得到这些框的IOU结果分别为(1,0,1,0,1,1,1,0,0,1),还有这些框的置信度分别为[0.9,0.85,0.7,0.6,0.45,0.25,0.2,0.15,0.13,0.12](需要对框从小到大排序),并且我们还知道这些预测框和哪一个GT在做IOU,[BB1,BB2,BB1,BB2,BB3,BB4,BB3,BB1,BB4,BB3],如果做一个表来表示结果应该如下图:
编号 | GT | 置信度 | IOU结果 |
1 | BB1 | 0.9 | 1 |
2 | BB2 | 0.85 | 0 |
3 | BB1 | 0.7 | 1 |
4 | BB2 | 0.6 | 0 |
5 | BB3 | 0.45 | 1 |
6 | BB4 | 0.25 | 1 |
7 | BB3 | 0.2 | 1 |
8 | BB1 | 0.15 | 0 |
9 | BB4 | 0.13 | 0 |
10 | BB5 | 0.12 | 1 |
2、要注意虽然预测出来有10个框,但是我们实际上只有5个GT(也就是只有5个物体),换句话说其实你预测的10个框里可能有对同一个GT的重复预测(可能有几个预测框都和同一个GT满足IOU>iou_threshold,比如1号框和3号框都是同时对BB1的预测)。
3、接下来我们就是需要根据不同的p_threshold(置信度阈值),计算出这10个预测框的(R,P)点,然后作出P——R曲线,并求解面积。问题就在于如何求对应p_threshold下的P和R,下面我以p_threshold=0.6为例,计算上面表格中10个框的(R,P)具体做法。
- 由于编号1,2,3,4的预测框的置信度都大于等于p_threshold,因此我同意他们的IOU结果(即认为编号1预测框的标签是BB1的准确框,编号2不是BB2的准确框,编号3也是BB1的准确框,编号4不是BB2的准确框),但是我标记前面四个框(编号1-4)都预测为正例。
- 其余的预测框我都不认同他们的IOU结果(即我不认为编号5的预测框是BB3的准确框,我也不认为编号8不是BB1的准确框),但是我仍然把剩下的6个框都预测为负例。
- 由上面两种看法,我们就可以得到当p_threshold=0.6时:这样我们就可以算出P=TP/(TP+FP),R=TP/(TP+FN)
- TP = 1(只有编号1是正确预测,编号3虽然也是正确预测但是属于重复预测了归纳到FP中,谁让它置信度小呢)
- FP = 3(因为编号2的IOU结果表示它为负类,但是我预测为正类,因此编号2是FP,同理编号4也是。编号3是认为重复预测了,因为编号1已经正确预测了BB1)
- FN = 4(这个指标可以直接由GT个数-TP个数得到,因为你可以理解为真实的有5个正例,但是你只预测对了1个(TP=1),所以剩下的框都预测错了,因此FN=GT-TP)
上面的例子说完其实可能有疑问说为什么不取分析编号5-10的框呢?置信度小于我设定的阈值p_threshold,我没有办法认同他们的IOU结果因此我不知道他们的IOU结果是对的还是错的,因此认为都是负例。
另一个疑问是,为什么你要把置信度大于p_threshold的框都预测为正例,其余的是负例,难道不是应该尊重IOU结果么?我的想法是模型既然输出的这些预测框,那么肯定是模型认为这些预测框都是目标框,但是置信度小于了我设定的p_threshold自然是应该认为模型识别为负例了。
其实,以上的看法都是我我自己根据网上博文得到的结果的理解,并且计算之后发现这一套逻辑是符合最后结果的,为了方便大家及以和自己去理解这个指标。
3、AP的计算
我们知道不同的p_threshold可以计算得出不同的(R,P),由这些点可以画出图像,我们可以知道P会随着R上升而下降,根据VOC2010的计算公式,我们需要对P—R曲线做一个平滑,具体的方式很简单。
4、mAP的计算
参考网址:
https://zhuanlan.zhihu.com/p/56961620
标签:mAP,GT,预测,IOU,AP,计算,编号,threshold,BB1 来源: https://www.cnblogs.com/CircleWang/p/15503889.html