0. 引言
0.1 COCO数据集评价指标
目标检测模型在验证集上会得到COCO的评价列表,具体参数的含义是什么呢?
0.2目标检测领域常用的公开数据集
- PASCAL VOC
- Microsoft COCO
在COCO数据集出来之前,目标检测基本上用的是PASCAL VOC数据集,现在COCO非常流行。
这两个数据集均有自己的评判标准。
0.3 COCO(Common Objects in Context,上下文中的常见对象)数据集简介
0.3.1 介绍
COCO数据集是一个可用于图像检测(Image Detection),语义分割(Semantic Segmentation)和图像标题生成(Image Captioning)的大规模数据集。它有超过330K张图像(其中220K张是有标注的图像),包含
- 150万个目标
- 80个目标类别(object categories:行人、汽车、大象等)
- 91种材料类别(stuff categoris:草、墙、天空等)
- 每张图像包含五句图像的语句描述
- 且有250,000个带关键点标注的行人
MS COCO官网:https://cocodataset.org/#home
0.3.2 COCO可用于的任务
-
目标检测(object detection)
使用 bounding box 或者 object segmentation (也称为instance segmentation)将不同的目标进行标定。 -
Densepose(密集姿势估计)
DensePose任务涉及同时检测人、分割他们的身体并将属于人体的所有图像像素映射到身体的3D表面。用于不可控条件下的密集人体姿态
估计。
-
Key-points detection(关键点检测)
在任意姿态下对人物的关键点进行定位,该任务包含检测行人及定位到行人的关键点。
-
Stuff Segmentation(材料细分)
语义分割中针对stuff class类的分割(草,墙壁,天空等)
-
Panoptic Segmentation(全景分割)
其目的是生成丰富且完整的连贯场景分割,这是实现自主驾驶或增强现实等真实世界视觉系统的重要一步。
-
image captioning(图像标题生成)
根据图像生成一段文字。
0.3.3 COCO的80个类别
1. 目标检测中常见的指标
对于这样一张图片,怎样才能算检测正确呢?
绿色为GT,红色为预测框
- IoU大于指定阈值?
- 类别是否正确?
- confidence大于指定阈值?
以上三点都是我们需要考虑的。
1.1 TP、FP、FN
1.1.1 定义
- TP(True Positive):预测正确的预测框数量 [IoU > 阈值](同一个GT只计算一次)
- FP(False Positive):检测到是同一个GT的多余预测框的数量 [IoU < 阈值](或者是检测到同一个GT的多余预测框的数量)
- FN(False Negative):没有检测到GT的预测框数量 [漏检的数量]
阈值根据任务进行调整,一般选择0.5
FP就是“假阳性”,就是模型误认为是TP
1.1.2 例子说明TP、FP、FN
举个例子理解TP、FP、FN:
对于张图片来说,绿色为GT,红色为模型预测框,IoU阈值设置为0.5。
- 对于中间这只猫来说,在绿色框(GT)中的预测框(红色)和绿色框的IoU肯定是>0.5的,所以它应该是一个TP(预测对目标且IoU > 阈值);而对于偏左的预测框来说,它和GT的IoU肯定是不足0.5的,加之因为有TP的存在,所以它是FP。
- 对于右下角的那只猫,GT是有的,但模型并没有给出对应的预测框,因此模型对于这只猫来说,漏检了,故FN的数量为1。
1.2 AP(Average Precision,平均精度)
1.2.1 Precision
- P r e c i s i o n = T P T P + F P \mathrm{Precision = \frac{TP}{TP + FP}} Precision=TP+FPTP:模型预测的所有目标中,预测正确的比例 -> 查准率
模型认为正确的目标中真的对了多少
那么仅仅通过Precision这个指标能不能全面衡量模型的检测能力呢?
举个例子进行说明:
上面这张图片有5个目标,但是网络只针对猫①给出了预测框,剩下的猫都没有检测出来。这里的TP=1,FP=0。所以此时的Precision为:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
1
1
+
0
=
1
=
100
%
\begin{aligned} \mathrm{Precision} & = \mathrm{\frac{TP}{TP+FP}} \\ & = \frac{1}{1 + 0} \\ & = 1\\ & = 100\% \end{aligned}
Precision=TP+FPTP=1+01=1=100%
很明显对于这张图片网络漏检了4个目标,所以仅仅通过Precision无法评判检测网络的性能。因此引入了另外一个指标——Recall。
1.2.2 Recall
- R e c a l l = T P T P + F N \mathrm{Recall = \frac{TP}{TP + FN}} Recall=TP+FNTP:所有真实目标中,模型预测正确的比例 -> 查全率
本应该检测对的,模型检测对了多少
那么我们只使用Recall这个指标来判定模型的好坏吗?
举个例子说明:
这张图片和上一张图片类似,而网络总共预测出了50个预测框(即50个目标)。这50个预测框中包括了所有要检测的目标,那么该网络针对这张图片的Recall为:
R e c a l l = T P T P + F N = 1 1 + 0 = 1 = 100 % \begin{aligned} \mathrm{Recall} & = \mathrm{\frac{TP}{TP+FN}} \\ & = \frac{1}{1 + 0} \\ & = 1\\ & = 100\% \end{aligned} Recall=TP+FNTP=1+01=1=100%
很明显,单单使用Recall无法评判模型的好坏。
所以我们需要同时使用Precision和Recall这两个指标来进行网络性能的评判,引入——AP。
1.2.3 AP —— P-R曲线下面积
AP就是P-R曲线下方的面积,而P-R分别为Precision和Recall。
假设模型已经训练完毕,验证集为下面3张图片:
1.2.3.1 第一张图片
首先判断该图片中有几个目标(GT),很明显绿色的框有两个,所以有两个GT,即num_ob = 0 + 2 = 2。
接下来同一个列表统计网络所检测到的目标信息:
GT id | Confidence | OB(IoU=0.5) |
---|---|---|
1 | 0.98 | True |
1 | 0.61 | False |
其中GT id为预测框匹配的GT的id,Confidence为预测框的置信度(为此类别的概率),OB为判断该预测框是否是TP。
该表从上到下的顺序是根据Confidence降序排列的
对于GT id=2,网络并没有给出预测框,所以表中没有
1.2.3.2 第二张图片
这张图片中目标的个数(绿色的框)有1个,所以累积目标个数num_ob = 2 + 1 = 3。
表也需更新:
GT id | Confidence | OB(IoU=0.5) |
---|---|---|
1 | 0.98 | True |
3 | 0.89 | True |
3 | 0.66 | False |
1 | 0.61 | False |
1.2.3.3 第三张图片
累积目标个数num_ob = 3 + 4 = 7。
更新表:
GT id | Confidence | OB(IoU=0.5) |
---|---|---|
1 | 0.98 | True |
3 | 0.89 | True |
6 | 0.88 | True |
7 | 0.78 | True |
3 | 0.66 | False |
1 | 0.61 | False |
4 | 0.52 | True |
1.2.3.4 计算AP
得到表以后,我们计算针对不同Confidence(即取不同Confidence阈值)得到的Precision和Recall的信息)。
GT id | Confidence | OB(IoU=0.5) |
---|---|---|
1 | 0.98 | True |
3 | 0.89 | True |
6 | 0.88 | True |
7 | 0.78 | True |
3 | 0.66 | False |
1 | 0.61 | False |
4 | 0.52 | True |
-
首先将Confidence的阈值设置为0.98(Confidence≥0.98的目标才算匹配正确),只有一个预测框符合条件(表中的第一行)。
- TP = 1; FP = 0; FN = 6
在Confidence≥0.98的条件下,TP=1没什么问题;FP=0是因为阈值的存在;FN=6是因为累积目标个数num_ob=7,所以 F N = n u m _ o b − T P = 7 − 1 = 6 \mathrm{FN=num\_ob - TP} = 7 - 1 = 6 FN=num_ob−TP=7−1=6。因此我们可以得到 P r e c i s i o n = T P T P + F P = 1 1 + 0 = 1 \mathrm{Precision = \frac{TP}{TP + FP} = \frac{1}{1+0}=1} Precision=TP+FPTP=1+01=1和 R e c a l l = T P T P + F N = 1 1 + 6 = 0.14 \mathrm{Recall = \frac{TP}{TP + FN} = \frac{1}{1+6}=0.14} Recall=TP+FNTP=1+61=0.14
Note:这个TP; FP; FN是看那个表,就不区分什么第几张图片了,看表就可以。 -
将Confidence阈值设置为0.89
- 此条件下,TP=2;FP=0;FN=num_ob-TP=7-2=5,我们可以得到Precision和Recall
-
…
-
将Confidence阈值设置为0.66
- 此条件下,TP=4;FP=1;FN=num_ob-TP=7-4=3,我们可以得到 P r e c i s i o n = T P T P + F P = 4 4 + 1 = 0.80 \mathrm{Precision = \frac{TP}{TP + FP} = \frac{4}{4+1}=0.80} Precision=TP+FPTP=4+14=0.80和 R e c a l l = T P T P + F N = 4 4 + 3 = 0.57 \mathrm{Recall = \frac{TP}{TP + FN} = \frac{4}{4+3}=0.57} Recall=TP+FNTP=4+34=0.57
-
…
全部计算完毕后,结果如下表所示。
Rank | Precision | Recall |
---|---|---|
1 | 1.0 | 0.14 |
2 | 1.0 | 0.28 |
3 | 1.0 | 0.42 |
4 | 1.0 | 0.57 |
5 | 0.80 | 0.57 |
6 | 0.66 | 0.57 |
7 | 0.71 | 0.71 |
我们可以根据求得的一系列的Precision和Recall绘制P-R曲线。以Recall为横坐标,Precision为纵坐标得到P-R曲线,如下图所示。
在绘制P-R曲线时需注意:
对于Recall(横坐标)需要滤除一些重复数据(图中用框住的即为参与计算的点,有两个点没有被框,它俩不参与AP的计算)。根据表中的数据可知,Recall=0.57有3个值,此时需保留Precision最大的值,即:
Rank | Precision | Recall |
---|---|---|
1 | 1.0 | 0.14 |
2 | 1.0 | 0.28 |
3 | 1.0 | 0.42 |
4 | 1.0 | 0.57 |
5 | 0.57 | |
6 | 0.57 | |
7 | 0.71 | 0.71 |
图中阴影部分的面积就是AP,计算如下(重复的Recall已经滤除):
Rank | Precision | Recall |
---|---|---|
1 | 1.0 | 0.14 |
2 | 1.0 | 0.28 |
3 | 1.0 | 0.42 |
4 | 1.0 | 0.57 |
6 | 0.71 | 0.71 |
R e c a l l = ∑ i = 1 R a n k ( R e c a l l i − R e c a l l i − 1 ) × max ( P r e c i s i o n i , . . . , R a n k ) R e c a l l = ∑ i = 本 行 R a n k ( R e c a l l 本 行 − R e c a l l 上 一 行 ) × 本 行 及 以 下 最 大 的 P r e c i s i o n \begin{aligned} \mathrm{Recall} & = \sum_{i=1}^{\mathrm{Rank}} (\mathrm{Recall}_i -\mathrm{Recall}_{i-1}) \times \max(\mathrm{Precision}_{ i, ..., \mathrm{Rank}}) \\ \mathrm{Recall} & = \sum_{i=本行}^{\mathrm{Rank}} (\mathrm{Recall}_{本行} -\mathrm{Recall}_{上一行}) \times 本行及以下最大的\mathrm{Precision} \end{aligned} RecallRecall=i=1∑Rank(Recalli−Recalli−1)×max(Precisioni,...,Rank)=i=本行∑Rank(Recall本行−Recall上一行)×本行及以下最大的Precision
根据公式可以求得阴影的面积,即AP为:
R
e
c
a
l
l
=
(
0.14
−
0
)
×
1.0
+
(
0.28
−
0.14
)
×
1.0
+
(
0.42
−
0.28
)
×
1.0
+
(
0.57
−
0.42
)
×
1.0
+
(
0.71
−
0.57
)
×
0.71
=
0.6694
\begin{aligned} \mathrm{Recall} & = (0.14 - 0) \times 1.0 + (0.28 - 0.14) \times 1.0 + (0.42 - 0.28) \times 1.0 + (0.57 - 0.42) \times 1.0 + (0.71 - 0.57) \times 0.71 \\ & = 0.6694 \end{aligned}
Recall=(0.14−0)×1.0+(0.28−0.14)×1.0+(0.42−0.28)×1.0+(0.57−0.42)×1.0+(0.71−0.57)×0.71=0.6694
了解完AP后我们就可以进一步得到一个新的指标——mAP。
1.3 mAP(mean Average Precision,即各类别AP的平均值)
mAP就是各类别AP的平均值,计算公式如下:
m A P = 1 n c ∑ i = 1 n c A P i \mathrm{ mAP = \frac{1}{nc}\sum^{nc}_{i=1}AP_i } mAP=nc1i=1∑ncAPi
其中nc为类别数。
1.4 注意事项
以上的TP、FP、FN都是经过NMS处理后得到的预测框。
2. MS COCO评价指标中每条数据的含义
COCO官网说明:https://cocodataset.com/#detection-eval
虽然写的是AP,但实际上表示的是mAP
2.1 Average Precision (AP)
- AP:COCO的主要评价指标,设置的IoU阈值为
IoU = range(0.5, 1.00, 0.05)
共10个IoU的mAP的均值
A P = 1 10 ( m A P I o U = 0.5 + m A P I o U = 0.55 + m A P I o U = 0.60 + m A P I o U = 0.65 + m A P I o U = 0.70 + m A P I o U = 0.75 + m A P I o U = 0.80 + m A P I o U = 0.85 + m A P I o U = 0.9 + m A P I o U = 0.95 ) \mathrm{AP = \frac{1}{10}(mAP^{IoU=0.5} + mAP^{IoU=0.55} + mAP^{IoU=0.60} + mAP^{IoU=0.65} + mAP^{IoU=0.70} + mAP^{IoU=0.75} + mAP^{IoU=0.80} + mAP^{IoU=0.85} + mAP^{IoU=0.9} + mAP^{IoU=0.95})} AP=101(mAPIoU=0.5+mAPIoU=0.55+mAPIoU=0.60+mAPIoU=0.65+mAPIoU=0.70+mAPIoU=0.75+mAPIoU=0.80+mAPIoU=0.85+mAPIoU=0.9+mAPIoU=0.95) - APIoU=0.50:将IoU阈值设置为0.5得到的mAP值(就是上面我们举的例子),这个取值也是PASCAL VOC的评价指标
- APIoU=0.75:更加严格的标准(因为IoU的阈值越大,说明网络预测框与GT重合度越来越高 -> 目标的定位越来越准,这对网络来说是很难的)
2.2 Across Scales
- APsmall:[mAP针对小目标] 需检测目标(GT)的像素面积小于322,则将其归为小目标 —— 衡量网络对于小目标的平均查准率
- APmedium:[mAP针对中目标] 需检测目标(GT)的像素面积在322和962,则将其归为中目标 —— 衡量网络对于中等目标的平均查准率
- APlarge:[mAP针对大目标] 需检测目标(GT)的像素面积大于962,则将其归为大目标 —— 衡量网络对于大目标的平均查准率
通过这三个指标可以看出该目标检测网络对于不同尺度目标的检测效果。如果我们的任务需要检测的目标都是较小的,我们应该更加关注与APsmall参数而不是APlarge
2.3 Average Recall (AR)
对于目标检测网络,在代码部分会限制每张图片最终预测框的数量,这里的max就是这个数量。如max=100,即每张图片最终预测100个预测框。而这里的ARmax=100就表示在每张图片预测框阈值为100的情况下,平均的查全率是多少。
- ARmax=1:在每张图片预测框阈值为1的情况下,平均的查全率是多少
- ARmax=10:在每张图片预测框阈值为10的情况下,平均的查全率是多少
- ARmax=100:在每张图片预测框阈值为100的情况下,平均的查全率是多少
从上图可以看到,ARmax=100=64%,ARmax=10=63.3%,ARmax=1=45.2%。这说明取max取100和取10相差不大,说明模型训练时使用的数据集每张图片中目标(GT)的数目并不是很多,基本上在10左右;而当预测框数量限制在1时,它的AR仅为45.2%,说明每张图片的目标个数一般是>1的。
2.4 AR Across Scales
与AP、AP across scales类似,AR across scales表示对应不同目标尺度的AR。
- ARsmall:[AR针对小目标] 需检测目标(GT)的像素面积小于322,则将其归为小目标 —— 衡量网络对于小目标的平均查全率
- ARmedium:[AR针对中目标] 需检测目标(GT)的像素面积在322和962,则将其归为中目标 —— 衡量网络对于中等目标的平均查全率
- ARlarge:[AR针对大目标] 需检测目标(GT)的像素面积大于962,则将其归为大目标 —— 衡量网络对于大目标的平均查全率
3. 各种指标的选择 —— 基于不同的任务
不同的任务需要使用不同的指标。
3.1 mAP
- 于PASCAL VOC的mAP来说,**APIoU=0.50**是要看的,因为它是PASCAL VOC的主要评价指标。
- 对于MS COCO数据集来说,AP(第一行,10个mAP的平均)是要看的,因为它是MS COCO的主要评价指标。
- 如果我们对目标框定位精度要求较高的话,我们可以关注APIoU=0.75
- 如果我们对小目标检测要求比较高的话,我们可以关注APsmall,通过这个值可以了解网络对于小目标检测的平均查准率(整体情况)
- 如果我们对中目标检测要求比较高的话,我们可以关注APmedium
- 如果我们对大目标检测要求比较高的话,我们可以关注APlarge
3.2 AR
主要关注下面两个指标:
- ARmax=10
- ARmax=100
如果它俩AR(平均查全率)相差很小的话, 可以减少网络预测框的个数 -> 提高目标检测的效率
参考
- https://www.bilibili.com/video/BV1ez4y1X7g2?spm_id_from=333.999.0.0
- https://blog.csdn.net/qq_44554428/article/details/122597358#t2