0. 引言
0.1 COCO 数据集评价指标
目标检测模型通过 pycocotools 在验证集上会得到 COCO 的评价列表,具体参数的含义是什么呢?
0.2 目标检测领域常用的公开数据集
- PASCAL VOC
- Microsoft COCO(MS COCO)
在 MS COCO 数据集出来之前,目标检测基本上用的是 PASCAL VOC 数据集,现在 MS 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 MS 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 | person | 人 | 28 | boat | 船 | 55 | cup | 杯子 |
2 | bicycle | 自行车 | 29 | traffic light | 交通灯 | 56 | fork | 叉子 |
3 | car | 汽车 | 30 | fire hydrant | 消防栓 | 57 | knife | 刀 |
4 | motorcycle | 摩托车 | 31 | stop sign | 停车标志 | 58 | spoon | 勺子 |
5 | airplane | 飞机 | 32 | parking meter | 停车计时器 | 59 | bowl | 碗 |
6 | bus | 公共汽车 | 33 | bench | 长凳 | 60 | banana | 香蕉 |
7 | train | 火车 | 34 | bird | 鸟 | 61 | apple | 苹果 |
8 | truck | 卡车 | 35 | cat | 猫 | 62 | sandwich | 三明治 |
9 | boat | 船 | 36 | dog | 狗 | 63 | orange | 橙子 |
10 | traffic light | 交通灯 | 37 | horse | 马 | 64 | broccoli | 西兰花 |
11 | fire hydrant | 消防栓 | 38 | sheep | 羊 | 65 | carrot | 胡萝卜 |
12 | stop sign | 停车标志 | 39 | cow | 牛 | 66 | hot dog | 热狗 |
13 | parking meter | 停车计时器 | 40 | elephant | 大象 | 67 | pizza | 披萨 |
14 | bench | 长凳 | 41 | bear | 熊 | 68 | donut | 甜甜圈 |
15 | bird | 鸟 | 42 | zebra | 斑马 | 69 | cake | 蛋糕 |
16 | cat | 猫 | 43 | giraffe | 长颈鹿 | 70 | chair | 椅子 |
17 | dog | 狗 | 44 | backpack | 背包 | 71 | couch | 沙发 |
18 | horse | 马 | 45 | umbrella | 雨伞 | 72 | potted plant | 盆栽 |
19 | sheep | 羊 | 46 | handbag | 手提包 | 73 | bed | 床 |
20 | cow | 牛 | 47 | tie | 领带 | 74 | dining table | 餐桌 |
21 | elephant | 大象 | 48 | suitcase | 行李箱 | 75 | toilet | 厕所 |
22 | bear | 熊 | 49 | frisbee | 飞盘 | 76 | tv monitor | 电视监视器 |
23 | zebra | 斑马 | 50 | skis | 滑雪板 | 77 | laptop | 笔记本电脑 |
24 | giraffe | 长颈鹿 | 51 | snowboard | 单板滑雪 | 78 | mouse | 鼠标 |
25 | backpack | 背包 | 52 | sports ball | 运动球 | 79 | remote | 遥控器 |
26 | umbrella | 雨伞 | 53 | kite | 风筝 | 80 | keyboard | 键盘 |
27 | tie | 领带 | 54 | baseball bat | 棒球棍 |
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
解释:模型预测的所有目标(Object)中,预测正确的比例 -> 查准率
模型认为正确的目标 中 确实预测对了多少
那么仅仅通过 Precision 这个指标能不能全面衡量模型的检测能力呢?举个例子进行说明:
同样的,绿色的为 Ground Truth,红色的为 预测框。
上面这张图片有 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 又显示结果是非常好的。因此我们就可以知道了,仅仅通过 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,即
n u m o b j = 0 + 2 = 2 。 \mathrm{num_{obj}} = 0 + 2 = 2。 numobj=0+2=2。
接下来同一个列表统计网络所检测到的目标信息:
GT id | Confidence | OB (IoU=0.5) |
---|---|---|
1 | 0.98 | True |
1 | 0.61 | False |
Note:
- GT id 为 预测框匹配的 GT 的 id;Confidence 为预测框的置信度(是此类别的概率);OB 为判断该预测框是否是 TP。
- 该表从上到下的顺序是根据 Confidence 降序排列的
- 对于 GT id = 2,网络并没有给出预测框,所以表中没有相关信息
1.2.3.2 第二张图片
这张图片中目标的个数(绿色的框)有 1 个,所以累积目标个数:
n u m o b j = 2 + 1 = 3 。 \mathrm{num_{obj}} = 2 + 1 = 3。 numobj=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 第三张图片
累积目标个数:
n u m o b j = 3 + 4 = 7 。 \mathrm{num_{obj}} = 3 + 4 = 7。 numobj=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 |
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 评价指标中每条数据的含义
MS COCO 官网说明:https://cocodataset.org/#detection-eval
Note:图片中虽然写的是 AP,但实际上表示的是 mAP。
2.1 Average Precision (AP)
-
A
P
\mathrm{AP}
AP:MS 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) - A P I o U = 0.50 \mathrm{AP^{IoU}=0.50} APIoU=0.50:将 IoU 阈值设置为 0.5 得到的 mAP 值(就是上面我们举的例子),这个取值也是 PASCAL VOC 的评价指标。
- A P I o U = 0.75 \mathrm{AP^{IoU}=0.75} APIoU=0.75:是更加严格的标准(因为 IoU 的阈值越大,说明网络预测框与 GT 重合度越来越高 -> 目标的定位越来越准,这对网络来说是很难的)。
2.2 Across Scales
- APsmall:mAP 针对小目标 若检测目标(GT)的像素面积小于 3 2 2 32^2 322,则将其归为小目标 ——衡量网络对于小目标的平均查准率
- APmedium:mAP 针对中目标 若检测目标(GT)的像素面积在 [ 3 2 2 , 9 6 2 ] [32^2, 96^2] [322,962] 之间,则将其归为中目标 ——衡量网络对于中等目标的平均查准率
- APlarge:mAP 针对大目标 若检测目标(GT)的像素面积大于 9 6 2 96^2 962,则将其归为大目标 ——衡量网络对于大目标的平均查准率
通过这三个指标可以看出该目标检测网络对于不同尺度目标的检测效果。如果我们的任务需要检测的目标都是较小的,我们应该更加关注与 A P s m a l l \mathrm{AP^{small}} APsmall 参数而不是 A P l a r g e \mathrm{AP^{large}} APlarge。
2.3 Average Recall (AR)
对于目标检测网络,在代码部分会限制每张图片最终预测框的数量,这里的 max 就是这个数量。如 max=100,即每张图片最终预测 100 个预测框。而这里的 A R m a x = 100 \mathrm{AR^{max}=100} ARmax=100 就表示在每张图片预测框阈值为 100 的情况下,平均的查全率(Recall)是多少。
- A R m a x = 1 \mathrm{AR^{max}=1} ARmax=1:在每张图片预测框数量阈值为 1 的情况下,平均的查全率(Recall)是多少
- A R m a x = 10 \mathrm{AR^{max}=10} ARmax=10:在每张图片预测框数量阈值为 10 的情况下,平均的查全率(Recall)是多少
- A R m a x = 100 \mathrm{AR^{max}=100} ARmax=100:在每张图片预测框数量阈值为 100 的情况下,平均的查全率(Recall)是多少
从上图可以看到, A R m a x = 100 = 64 % \mathrm{AR^{max}=100}=64\% ARmax=100=64%, A R m a x = 10 = 63.3 % \mathrm{AR^{max}=10}=63.3\% ARmax=10=63.3%, A R m a x = 1 = 45.2 % \mathrm{AR^{max}=1}=45.2\% 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。
- A R s m a l l \mathrm{AR^{small}} ARsmall:AR 针对小目标 若检测目标(GT)的像素面积小于 3 2 2 32^2 322,则将其归为小目标 ——衡量网络对于小目标的平均查全率(Recall)
- A R m e d i u m \mathrm{AR^{medium}} ARmedium:AR 针对中目标 若检测目标(GT)的像素面积在 [ 3 2 2 , 9 6 2 ] [32^2, 96^2] [322,962] 之间,则将其归为中目标 ——衡量网络对于中等目标的平均查全率(Recall)
- A R l a r g e \mathrm{AR^{large}} ARlarge:AR 针对大目标 若检测目标(GT)的像素面积大于 9 6 2 96^2 962,则将其归为大目标 ——衡量网络对于大目标的平均查全率(Recall)
3. 各种指标的选择 —— 基于不同的任务
不同的任务需要使用不同的指标。
3.1 mAP
- 于 PASCAL VOC 的 mAP 来说, A P I o U = 0.50 \mathrm{AP^{IoU}=0.50} APIoU=0.50 是要看的,因为它是 PASCAL VOC 的主要评价指标。
- 对于 MS COCO 数据集来说, A P \mathrm{AP} AP(第一行,10 个 mAP 的平均)是要看的,因为它是 MS COCO 的主要评价指标。
- 如果我们对 目标框定位精度要求较高 的话,我们可以关注 A P I o U = 0.75 \mathrm{AP^{IoU}=0.75} APIoU=0.75
- 如果我们对 小目标检测要求比较高 的话,我们可以关注 A P s m a l l \mathrm{AP^{small}} APsmall,通过这个值可以了解网络对于小目标检测的平均查准率(整体情况)
- 如果我们对 中目标检测要求比较高 的话,我们可以关注 A P m e d i u m \mathrm{AP^{medium}} APmedium
- 如果我们对 大目标检测要求比较高 的话,我们可以关注 A P l a r g e \mathrm{AP^{large}} APlarge
3.2 AR
主要关注下面两个指标:
- A R m a x = 10 \mathrm{AR^{max}=10} ARmax=10
- A R m a x = 100 \mathrm{AR^{max}=100} ARmax=100
如果它俩 AR(平均查全率)相差很小的话, 可以减少网络预测框的个数,从而提高目标检测的效率。
参考
- 目标检测mAP计算以及coco评价标准
- COCO数据集介绍