模型性能评价标准
对于一个检测器,我们需要制定一定的规则来评价其好坏,用来对比模型之间的差异,进而选择更有的检测器。对于物体监测任务而言,常常使用IOU(Interp of Union),也就是交并比来量化物体的预测框和真实框之间的差异。IOU的值经常设置在IOU = [0.5,0.75]之间。当预测框与真是框的交并比大于设置的值的时候,我们认为该检测出的目标是正确的。
对于上图中的,人体检测模型,由于图像中存在背景与物体人两种标签,预测框也分为正确与错误,因此在评测时会产生以下4种样本
- TP(True Positive):正确检测框,也称之为真(true)阳(positive);预测框正确地与标签框匹配了,两者间的IoU大于设置的值,也就是正确检测出了图片中的人
- FP(False Positive):误检框,也称之为假阳; 将背景预测成了物体,上图中的燃气阀节点,预测成了人。
- FN(False Negative):漏检框,假阴。本来需要模型检测出的物体人,模型没有检测出,如上图所示的,遮阳棚下的人。
- (True Negative): 正确背景,真阴,也就是将背景或者其他分类(如果有),预测成了人 本身是背景,模型也没有检测出来,这种情况在物体检测中通常不需要考虑
实际场景中,为了便于理解上述概念,常常使用混淆矩阵来记录各个指标的值
混淆矩阵
混淆矩阵就是分别统计模型检测出的预测框归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。
以一个具体的玩手机场景监测的来理解下:
假如要对某些场景是否存在玩手机的行为,我们准备玩手机的图片126张,标注了126个phone的框和59个other的框。我们需要将多目标监测场景,看成单目标检测,除了phone分类,其他分类都属于背景类
根据我们标注的phone物体的统计,groud_truth对应的数目为:
标注的真实的phone的数目=126=TP+FN
对所有的126张图片进行模型检测后,共检测除出了124个phone结果
检测出的phone的数目==TP+FP
检测之后的混淆矩阵是这样的,因为我们不知道背景有多少个。因此TN无法计算出来,当然,如果other为我们标注的其他分类检测物体的话,我们还是可以计算出TN的
A,P,R,S
混淆矩阵里面统计的是个数,有时候面对大量的数据,光凭计算个数,很难衡量模型的优劣,或者说很难有一个整体的优劣感受,所以一般会对数字进行归一化处理,转化成百分比或者[0,1]。
因此混淆矩阵在基本的统计结果上又扯出了以下4个指标,二级指标(通过最底层指标加减乘除得到的):
- 准确率(Accuracy)
- 精确率(Precision)
- 召回率(Recall)
- 特异度(Specificity)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CPn9cvSa-1605533615637)(https://i.loli.net/2020/11/16/29JZlLrix6gHzqa.png)]
准确率:针对的是整个样本,表示在对整个样本进行预测后,预测对的数目占整个样本的比例
精确率:在预测出的所有正样本(是某个分类),预测正确的所占的比例
召回率:又叫灵敏度,实际含义是在对所有的正样本进行预测,预测正确的所占的比率
特异度:又是一个装高大上的字面。实际含义,跟召回率一样,只不多针对的是负样本(非抽样场景样本)
pr曲线
召回率等单个指标,对不同分类,不同数据量的情况下,差异相差比较大,还是很难有一个相对对比的维度。因此可以通过对比不同模型各个score的Recall和Precision,选择一个比较合适的模型
precision不是一个绝对的东西,而是相对threshold而改变的东西, recall同理, 那么单个用precision来作为标准判断, 就不合适。
因为我们根据不同的threshold, 可以取到不同(也可能相同)的precision recall值。 这样想的话对于每个threshold,我们都有(precision, recall)的pair, 也就有了precision和recall之间的curve关系。因此,在计算每一个预测值的TP和FP之前,我们需要对检测出的预测框按照阈值从大到小进行排序,然后只要求出每一个预测框对应的TP和fp就可以求出对应的不同阈值对应的Recall和Precision。然后以Recall为横轴,Precision为纵轴,画出PR曲线。
如上图,沿着曲线向右的方向,阈值不断降低,recall不断升高,precision不断降低。recall和precision是一对逆向的指标,你需要选择合适的阈值,是的recall和precision都相对较大。
在公开的很多神经网络算法实现中,分的会更新一些,会将不同IOU,不同预测框面积的recall和precision都会计算出来
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.066
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.520
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.621
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.665
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.356
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.598
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.385
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.477
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.202
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.609
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.498
2020-09-29 00:50:28
20/09/29 00:50:27 INFO HboxContainer: Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.764
ROC曲线(受试者工作特征曲线)
一个混淆矩阵,是在一个固定阀值的情况下,得出的各个分类的预测情况。理想情况下,预测出的混淆矩阵中,对角线的数字越大越好;实际情况中,各个分类的测试样本不同,对整体的模型指标的影响很大。不同阀值,得出的各个指标变化曲线是不同的,因此,需要使用ROC来表示,何种阀值下,能够取得最优结果
召回率:TPR = TP/(TP+FN)
假阳率(1-特异度):FRP =FP/(FP+TN)
因为TN的值,不能获得,因此此曲线对应物体监测场景,不适用
上一篇: 关于属性标签的详细介绍
下一篇: Opencv 图像等比例缩放