声明:原视频链接https://www.bilibili.com/video/BV13k4y1m7DY?spm_id_from=333.880.my_history.page.click
下面是我的笔记,截图均来自原视频。
举例说明:单类物体检测时,以人脸检测为例。如图
绿色实线和虚线框:人脸的真实标注
红色的实线框和虚线框:算法的检测结果
框左上角的红色数字:结果为人脸的概率
从图中我们可以得到以下信息:
算法检测出的人脸个数为:5个(红框)
人脸的真实标注个数为:5个(绿框)
算法检测正确的人脸个数:4个(红绿框重合)
算法虚检:1个(红虚框)
算法漏检:1个(绿虚框)
以上是评价指标的准备工作,下面正式开始。
1.召回率(recall rate)又名查全率
查全率 = 算法检测正确的个数真实标注的个数 = 4 5 = 80%
#真实值有5个,算法查了一遍找出来4个,故查全率为80%。
2.精度(precision) 又名查准率
查准率 = 算法检测正确的个数 算法检测出的个数(不论对错)= 45 = 80%
#算法查了一遍,给出5个结果,其中4个正确,故查准率80%。
3.平均精度均值(mAP)
在训练模型时,我们可以人为的设定阈值(如YOLO中的置信度)来调整输出的结果。
就是图中红框左上角数字。置信度就是算法给自己打分,分越高表示它越自信(:
比如现在我们设定的置信度为0.8,那么大于0.8的红框会输出:
然后我们提高置信度到0.85 ,那么大于0.85的红框就会输出:
提高置信度到0.9,0.925,0.95,那么大于阈值的红框就会输出:
这个过程中,精度和召回率随阈值提高不断变化。我们把它画到坐标轴上:
#为什么以召回率为横坐标?我以为召回率和置信度是等价的,从上面的过程也可以看出来,随着阈值(置信度)的收窄,红框不断减少,召回率不断下降。
得到精度—召回率曲线,曲线下面的面积就是精度均值(AP)
如果不是单目标检测,如我们检测人脸的同时还检测狗脸猫脸,那么就分别求出人脸的AP,狗脸的AP,猫脸的AP,三种AP相加再除以三。便得到算法的mAP。(平均精度均值)
#如何理解AP,或者说曲线下面的面积代表什么? 首先召回率从0到100的过程,其实是阈值(置信度)不断放松的过程。 我们想要了解一个算法它究竟检测能力如何,可以给它设定一个标准,在这个标准的前提下看它的表现,然后不断提高标准,再看它的表现。看了足够多次数后,我们将它的表现平均一下,就是AP了。
视频中还有漏检率,每张图平均虚检个数,平均对数漏检率等其他内容。
4. F1
F1是precision(P)和recall(R)的调和均值,将精度和召回率糅合在一起,方便对网络性能的评估。
调和平均是怎样糅合P和R呢?
这里只有P和R两个需要调和的量,
m1,m2的意义是参数的权重,也就是P和R的权重,在评价一个网络时我们默认P和R起着同样的作用,那么就是1:1的权重,让m1=m2便可,随便取个m1=m2=1。
这样就可以看出调和平均的意义了,在网络的实际应用中我们可能更看重P,那么就可以让m1大些,更看重R,就可以让m2大些,方便找出更符合我们要求的网络。
为什么要用F1呢,有P和R还不够吗?
不够。假设现在有5种模型
mode | P | R |
1 | 80% | 90% |
2 | 95% | 75% |
3 | 85% | 85% |
4 | 90% | 85% |
5 | 80% | 95% |
请问哪种模型效果更好呢。 通过一段时间的分析你可能会得到4更好的结论。但如果这是一个检测口罩佩戴的模型,更看重R,那么哪种模型效果更好呢。
所以F1的实际意义就在于“调和”,我们可以通过单一的指标,快速的确定一个模型是否更加优秀,或者更加符合我们的预期要求。