IOU (Intersection Over Union, 交并比)
IOU指真实框和预测框之间交集和并集的比,假设这里有真实框Bgt和预测框Bp,那么 IOU计算公式如下:
IOU=area(Bp∪Bgt)area(Bp∩Bgt)
有了IOU的计算公式,我们就可以来计算 TP、FP、FN、TN
这里会用到threshold交并比的阈值,通常取50%、75%、95%
- True Positive(TP): 一个目标框被正确检测出来,IOU≥threshold
- False Positive(FP): 预测框预测错误,IOU<threshold
- False Negative(FN): 一个目标框没有被预测出来
- True Negative(TN): 在这里不适用。
Precision精确率
precision指正确检测出来的目标框数量占所有预测目标框数量的比例。
Precision=TP+FPTP=all_detectionsTP
Recall召回率
recall指正确检测出来的目标框数量占所有真实目标框数量的比例。
Recall=TP+FNTP=all_ground_truthsTP
Precision x Recall curve, PR曲线
以精确率为y轴,以召回率为x轴,我们就得到了PR曲线。仍然从精确率和召回率的定义可以理解,精确率越高,召回率越高,我们的模型和算法就越高效。也就是画出来的PR曲线越靠近右上越好。
Average Precision,AP
PR曲线下面的面积。假设一共有N中recall的取值,计算公式如下:
AP=n=1∑N(rn+1−rn)ρinterp(rn+1)ρinterp(rn+1)=maxr^=rn+1ρ(r^)
其中rn代表第n个recall的取值,ρ(r)代表在recall为r下对应precision的取值。具体解释如下,当我们取到第n种recall的取值,然后又出现了第n+1种recall的取值,我们在这个recall区间里找到对应最大值的precision,并用这个最大的precision乘上这段recall的取值范围为这个recall区间的AP,我们遍历所有区间并把所有区间的AP加起来就得到了最终的AP
为了更清楚的对这些概念进行说明,举例如下:

这里有7张图片15个目标框24个预测框,这里目标框和预测框都为同一类别。其中目标框用绿色表示,预测框用红色表示。这里设置threshold为30%,TP和FP的取值是按照IOU计算得到,跟Confidences无关。表格如下:
| Image |
Detections |
Confidences |
TP or FP |
| Image1 |
A |
88% |
FP |
| Image1 |
B |
70% |
TP |
| Image1 |
C |
80% |
FP |
| Image2 |
D |
71% |
FP |
| Image2 |
E |
54% |
TP |
| Image2 |
F |
74% |
FP |
| Image3 |
G |
18% |
TP |
| Image3 |
H |
67% |
FP |
| Image3 |
I |
38% |
FP |
| Image3 |
J |
91% |
TP |
| Image3 |
K |
44% |
FP |
| Image4 |
L |
35% |
FP |
| Image4 |
M |
78% |
FP |
| Image4 |
N |
45% |
FP |
| Image4 |
O |
14% |
FP |
| Image5 |
P |
62% |
TP |
| Image5 |
Q |
44% |
FP |
| Image5 |
R |
95% |
TP |
| Image5 |
S |
23% |
FP |
| Image6 |
T |
45% |
FP |
| Image6 |
U |
84% |
FP |
| Image6 |
V |
43% |
FP |
| Image7 |
X |
48% |
TP |
| Image7 |
Y |
95% |
FP |
有了这些值,我们就开始按照Confidences大小排序来计算Precision和Recall值:
| Image |
Detections |
Confidences |
TP or FP |
Precision |
Recall |
| Image5 |
R |
95% |
TP |
11=1 |
151=0.0666 |
| Image7 |
Y |
95% |
FP |
21=0.5 |
151=0.0666 |
| Image3 |
J |
91% |
TP |
32=0.6666 |
152=0.1333 |
| Image1 |
A |
88% |
FP |
42=0.5 |
152=0.1333 |
| Image6 |
U |
84% |
FP |
52=0.4 |
152=0.1333 |
| Image1 |
C |
80% |
FP |
62=0.3333 |
152=0.1333 |
| Image4 |
M |
78% |
FP |
72=0.2857 |
152=0.1333 |
| Image2 |
F |
74% |
FP |
82=0.25 |
152=0.1333 |
| Image2 |
D |
71% |
FP |
92=0.2222 |
152=0.1333 |
| Image1 |
B |
70% |
TP |
103=0.3 |
153=0.2 |
| Image3 |
H |
67% |
FP |
113=0.2727 |
153=0.2 |
| Image5 |
P |
62% |
TP |
124=0.3333 |
154=0.2666 |
| Image2 |
E |
54% |
TP |
135=0.3846 |
155=0.3333 |
| Image7 |
X |
48% |
TP |
146=0.4285 |
156=0.4 |
| Image4 |
N |
45% |
FP |
156=0.45 |
156=0.4 |
| Image6 |
T |
45% |
FP |
166=0.375 |
156=0.4 |
| Image3 |
K |
44% |
FP |
176=0.3529 |
156=0.4 |
| Image5 |
Q |
44% |
FP |
186=0.3333 |
156=0.4 |
| Image6 |
V |
43% |
FP |
196=0.3157 |
156=0.4 |
| Image3 |
I |
38% |
FP |
206=0.3 |
156=0.4 |
| Image4 |
L |
35% |
FP |
216=0.2857 |
156=0.4 |
| Image5 |
S |
23% |
FP |
226=0.2727 |
156=0.4 |
| Image3 |
G |
18% |
TP |
237=0.3043 |
157=0.4666 |
| Image4 |
O |
14% |
FP |
247=0.2916 |
157=0.4666 |
然后我们把他们的取值按照recall是横坐标,precision是纵坐标画图如下:



其中AP=A1+A2+A3+A4,具体计算如下:
A1=(0.0666−0)×1=0.0666A2=(0.1333−0.0666)×0.6666=0.04446222A3=(0.4−0.1333)×0.4285=0.11428095A4=(0.4666−0.4)×0.3043=0.02026638AP=0.0666+0.04446222+0.11428095+0.02026638=0.2456095=24.56%
Mean Average Precision,mAP
mAP就是对每一个类别都计算出AP然后再计算AP平均值就好了。
参考链接