目标检测模型在验证集上会得到COCO的评价列表,具体参数的含义是什么呢?
在COCO数据集出来之前,目标检测基本上用的是PASCAL VOC数据集,现在COCO非常流行。
这两个数据集均有自己的评判标准。
COCO数据集是一个可用于图像检测(Image Detection),语义分割(Semantic Segmentation)和图像标题生成(Image Captioning)的大规模数据集。它有超过330K张图像(其中220K张是有标注的图像),包含
MS COCO官网:https://cocodataset.org/#home
目标检测(object detection)
使用 bounding box 或者 object segmentation (也称为instance segmentation)将不同的目标进行标定。
Densepose(密集姿势估计)
DensePose任务涉及同时检测人、分割他们的身体并将属于人体的所有图像像素映射到身体的3D表面。用于不可控条件下的密集人体姿态
估计。
Key-points detection(关键点检测)
在任意姿态下对人物的关键点进行定位,该任务包含检测行人及定位到行人的关键点。
Panoptic Segmentation(全景分割)
其目的是生成丰富且完整的连贯场景分割,这是实现自主驾驶或增强现实等真实世界视觉系统的重要一步。
绿色为GT,红色为预测框
以上三点都是我们需要考虑的。
阈值根据任务进行调整,一般选择0.5
FP就是“假阳性”,就是模型误认为是TP
举个例子理解TP、FP、FN:
对于张图片来说,绿色为GT,红色为模型预测框,IoU阈值设置为0.5。
模型认为正确的目标中真的对了多少
那么仅仅通过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。
本应该检测对的,模型检测对了多少
那么我们只使用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。
AP就是P-R曲线下方的面积,而P-R分别为Precision和Recall。
假设模型已经训练完毕,验证集为下面3张图片:
首先判断该图片中有几个目标(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个,所以累积目标个数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 |
累积目标个数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 |
得到表以后,我们计算针对不同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的目标才算匹配正确),只有一个预测框符合条件(表中的第一行)。
在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
…
将Confidence阈值设置为0.66
…
全部计算完毕后,结果如下表所示。
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。
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为类别数。
以上的TP、FP、FN都是经过NMS处理后得到的预测框。
COCO官网说明:https://cocodataset.com/#detection-eval
虽然写的是AP,但实际上表示的是mAP
IoU = range(0.5, 1.00, 0.05)
共10个IoU的mAP的均值通过这三个指标可以看出该目标检测网络对于不同尺度目标的检测效果。如果我们的任务需要检测的目标都是较小的,我们应该更加关注与APsmall参数而不是APlarge
对于目标检测网络,在代码部分会限制每张图片最终预测框的数量,这里的max就是这个数量。如max=100,即每张图片最终预测100个预测框。而这里的ARmax=100就表示在每张图片预测框阈值为100的情况下,平均的查全率是多少。
从上图可以看到,ARmax=100=64%,ARmax=10=63.3%,ARmax=1=45.2%。这说明取max取100和取10相差不大,说明模型训练时使用的数据集每张图片中目标(GT)的数目并不是很多,基本上在10左右;而当预测框数量限制在1时,它的AR仅为45.2%,说明每张图片的目标个数一般是>1的。
与AP、AP across scales类似,AR across scales表示对应不同目标尺度的AR。
不同的任务需要使用不同的指标。
主要关注下面两个指标:
如果它俩AR(平均查全率)相差很小的话, 可以减少网络预测框的个数 -> 提高目标检测的效率