M A P ( 平 均 准 确 率 ) MAP(平均准确率) MAP(平均准确率)
首先推荐一下## https://github.com/rafaelpadilla/Object-Detection-Metrics
这个,这里面说的其实已经很明白了。
要真的理解mAP的计算,你要明白这几个概念
一是置信度、IOU阈值的概念
通过置信度和、IOU阈值,你才可以确定TP和FP
二 明白FN的概念
在检测,就是要明白GroundTruth总数的概念
三 Precision和Recall
知道了FN、TP、FP就能知道Precision和Recall
precisoin = TP / (TP+FP)
recall = TP / (TP+FN)
四 明白什么叫11点插值显示法
其实有个问题值得思考,为什么recall可以作为横坐标,recall只升不降吗?
抱歉,我,recall,真的只升不降,就是为所欲为
因为会根据置信度对检测框进行降序排序,所以recall只升不降,可以作为横坐标
你明白了并计算出每个预测框的Precision和Recall,就能画出准确度x召回率曲线
而11点插值显示法,就是将【0,1】这个区域平均分成10分,
从上图,我们可以看出所有检测框到最后画出的曲线在recall范围在【0-0.5】之间
接下来使用11点插值显示法,首先确定了11个点的横坐标分布是【0,0.1,0.2,0.3,…,1.0】
然后根据每个横轴标,和上图画出的准确度x召回率曲线
,确定下图红点的纵坐标,然后做出下图
AP
一 树立Precision和Recall的概念
Precision
Precision就是在你所有预测为真的样本中,真正正确的占你所有预测为真的比例
(就是说,假设你预测100个样本为真,但是这里面可能只有80个是真的为真,还有20个是假的,但是这20个你预测为真了,所以你的Precision就是 80 /(80+20)=0.8)
注意:是你预测了100个样本,这100个样本可以是从原来总样本2000个里面选的
Recall
Recall就是说在你预测为真的样本中,真正正确的样本数,占,你真正正确的样本数和你错误预测为假之和的比例。
什么是预测真正正确的样本数和你错误预测为假之和?
假设你预测了200个样本,这200个样本中,你预测100个为真,100个为假,这100个你预测为真的样本中,真正为真的有80个,预测为真其实为假的有20个。而100个预测为假的里面,其实里面30个是真的,但是你预测为了假,这就是错误预测为假的个数。
ok!重点来了!!!
一个预测了200个样本,以预测为真,为假,各分了100个样本!
在预测为真的100个里面,真正真的有80个,
在预测为假的100个里面,真正真的,就是,错误预测为假的个数,就是30个
所以什么是预测真正正确的样本数和你错误预测为假之和?
就是80+30,就是在这200个里面所有真正为真的样本数!
为什么说Precision和Recall是冲突的
因为所有预测为假的,拿上面举例,就是100个,100 = FP+FN,所有预测为假的总数不变的情况下,FP多了,FN就少;FN多了,FP就少
检测指标:AP值的计算
二 树立置信度、IOU的概念
- 置信度:所框区域是我们所需物体的概率
- IOU:懂得都懂
- True Positive (TP):IOU>=阈值的检测框
- False Positive (FP):IOU<阈值的检测框
- False Negative (FN):未被检测到的GT
- True Negative(TN):忽略不计
检测指标的计算需要基于置信度,这里IOU阈值默认使用0.5,至于猫咪图片里面的IOU值,这里假设分别是0.76,0,0.91
如上图小喵喵所示:置信度分布是【0.7,0.8,0.9】
当置信度为0.85时
当置信度为0.85时,只有cat3是被检测到的,所以检测框就剩下了cat3里面的一个iou=0.91
- True Positive (TP):IOU>=阈值的检测框
- False Positive (FP):IOU<阈值的检测框
- False Negative (FN):未被检测到的GT
这里iou阈值=0.5
TP = 1
FP = 0
漏检:
FN = 2(cat1、cat2里面绿框)
Precision = TP/(TP+FP) =1/1
Recall =TP/(TP+FN) =1/3
当置信度为0.75时
当置信度为0.75时,cat3,cat2算是是被检测到的,所以检测框剩下了cat3、cat2里面的iou=0.91,iou=0
- True Positive (TP):IOU>=阈值的检测框
- False Positive (FP):IOU<阈值的检测框
- False Negative (FN):未被检测到的GT
这里iou阈值=0.5
TP = 1
FP = 1
漏检:
FN = 2(cat1、cat2里面绿框)
Precision = TP/(TP+FP) =1/2
Recall =TP/(TP+FN) =1/3
当置信度是0.5时
当置信度为0.5时,所有猫图都算是被检测到的,cat3、cat2、cat1里面的iou=0.91,iou=0,iou=0.76
- True Positive (TP):IOU>=阈值的检测框
- False Positive (FP):IOU<阈值的检测框
- False Negative (FN):未被检测到的GT
这里iou阈值=0.5
TP = 2
FP = 1
漏检:
FN = 1(cat2里面绿框)
Precision = TP/(TP+FP) =2/3
Recall =TP/(TP+FN) =2/3
其实从上面就可以看出每一次置信度或者IOU的阈值改变都会造成TP和FP的重新计算,即recall和precision的重新计算
通过recall和precision计算AP
计算不同recall值下,precision值的变化
注意,注意,什么叫每一次的recall和precision呢?
就是下面每个点的recall值是怎么确定的呢?
我也不知道,哈哈哈哈!
https://github.com/rafaelpadilla/Object-Detection-Metrics
为了计算precision和recall,需要
True Positives(真正例):预测为真,其实为真
False Negatives(假负例):预测为假,其实为真,漏检了
False Positives(假正例):预测为真,其实为假
True Negatives(真负例):预测为假,其实为假。
TP + FN = 所有真的
TP/(TP+FN) = 在所有真的里面,预测为真的的比例
TP+FP = 所有预测为真的
TP/(TP+FP)
在所有预测为真的里面,真的比例
如果IoU> 0.5,则认为它是True Positive,否则认为是False Positive
对于每一个图片,ground truth数据会给出该图片中各个类别的实际物体数量,计算每个Positive预测框与ground truth的IoU值,并取最大的IoU值,认为该预测框检测到了那个IoU最大的ground truth。然后根据IoU阈值,我们可以计算出一张图片中各个类别的正确检测值(True Positives, TP)数量以及错误检测值数量(False Positives, FP)。
注意
类别
的概念
据此,可以计算出各个类别
的precision
正确的预测值数量(True Positives),和很容易计算出漏检的物体数(False Negatives, FN)
此可以计算出Recall(分母可以用ground truth总数)
在目标检测中,mAP的定义首先出现在PASCAL Visual Objects Classes(VOC)竞赛中
感觉下面说了一堆垃圾话,看也看不懂
绿 色 的 真 实 框 , 红 色 的 是 预 测 框 绿色的真实框,红色的是预测框 绿色的真实框,红色的是预测框
有7个图像,其中15个ground truth objects由绿色边界框表示,24个检测到的对象由红色边界框表示。每个检测到的对象由字母(A,B,…, Y)标识,且具有confidence
然后按置信度对BBOX排序
再对每一个BBOX都计算对应的precision和recall值
实例:
- 对BBOXR,precision = 1/1 =1,recall = 1/15=0.0666
- 对BBOXY,precision = 1/2=0.5,recall = 1/15=0.0666
- 对BBOXJ,precision = 2/3 =-0.666s,recall =2/15=0.1333
2012年以后,用面积来逼近AP值
目标检测中TP、FP、FN、TN的定义
- True Positive (TP):IOU>=阈值的检测框
- False Positive (FP):IOU<阈值的检测框
- False Negative (FN):未被检测到的GT
- True Negative(TN):忽略不计