recall中 TP+FN中的FN怎么判定
fn不做判定,直接算ground truth=(TP +FN),比如1个图里有两个识别目标,ground truth就等于2
在目标识别中:
TP (True Positive):iou>0.5的检测框数量。在上图中,绿色的框表示GT,其中cat 0.9的红色框就是TP。
FP (False Positive):iou<=0.5的检测框。cat 0.3的红色框与GT的IOU小于0.5所以是FP。
FN (False Negative):没有检测到的GT(ground truth)数量。上图中右下角的绿色框出现漏检了所以FN+1。
————————————————
首先Map的数值含义是衡量precision和recall的,其值越大,说明precsion和recall的值越大
$$ precsion= \frac{TP}{TP+FP} $$
$$ recall= \frac{TP}{TP+FN} $$
那在实际操作中,TP和FP怎么确定?
首先要明白这个TP和FP是给预测框的,具体判断流程为通过预测框与ground truth框进行IoU,如果结果>0.5(这个不是规定,只是约定俗成),则判定为TP,否则则为FP。
其中预测框总数=(TP+FP)
这样,要求一个类的precsion就可以确定了,那么recall呢?
首先有一个前提条件:每个ground truth最多只有1个预测框,不会有预测框叠预测框的情况
其实网络输出的预测框都会经过例如非极大值抑制这样的处理,所以不会出现预测框叠预测框的情况
那么ground truth总数=(TP +FN)
所以,这样就可以计算出一个类中总的precsion和recall了。
ap以及map的计算
然而ap的计算不是计算总的,它是要一个梯度的值。具体就是每遍历一个预测框,就给出一个precsion和recall然后记录下(这里其实就是为了求个近似值:在不同的recall下,precsion的值会是多少)
再细节一点就是通过置信度判断的阈值,从高到低,不断的更新TP和FP的数目,然后列出下列表格,每次更新时就更新一次precious和recall表
最后算出p-r图中阴影的面积就是map值
可以看看这个例子:
https://blog.csdn.net/qq_35916487/article/details/89076570
然后voc2007中的ap是这样的:
首先把recall的1.0分成11份[0,0.1,0.2....1],然后在每个区间取一个最大的precsion作为代表记录下来,这样依次取了11个值(但是区间不是只有10个嘛怎么来的11个值),最后加起来求平均就是一个类的ap了,Map则是所有类的平均值。
然后新的ap(VOC2010往后)判定是这样的:
原理与原来的差不多,主要是大家发现,相同的precsion下其实很多recall都是相同的。
具体方法是,在precision变化的Recall区间,取一个这个区间的Precision的最大值,然后乘以这个Recall区间的大小,最后得到一个矩形的面积(如上图),最后的ap就是这个蓝色区域的面积。