当我们训练完自己的模型以后,怎样知道不同的权重到底哪个好呢。一张张看?显然不合理,所以需要有一个衡量的标准。
1.分类网络:
首先要知道TP,FP,TN,FN的概念
如下图:
多种类的时候可以使用混淆矩阵来看一下分类的结果:
|
预测 实际 |
0 |
1 |
2 |
3 |
|
0 |
5 |
3 |
1 |
1 |
|
1 |
1 |
5 |
2 |
1 |
|
2 |
1 |
1 |
5 |
1 |
|
3 |
2 |
1 |
1 |
5 |
图2
其中对角线为TP,横轴其余的是FN,纵轴其余的是FP
Accuracy:准确率,对整个模型,,预测对的个数比上总样本个数。Accuracy=TP+TN/(TP+TN+FP+FN)
使用混淆矩阵计算多类:对角线和比上总数和。如图2: 20/36
Precision:精确率,对某一目标来说预测对的,比上预测出来该种类的总数。TP/(TP+FP)
使用混淆矩阵计算多类:该类别对角线值比上该类整列的和。如图2:0的precision为5/9
Recall:召回率,对某一种类来说,总的该种类有多少预测出来了。TP/(TP+FN)
使用混淆矩阵计算多类:该类别对角线值比上该类整行的和。如图2:0的recall为5/10
F1-score:精确率和召回率总是对立的,F1-score是一个指标,可以平衡这两个选一个最优值。2x(precision x recall)/(precision + recall)
根据不同的任务,给定不同的权重可以获得精确率和召回率不同重视程度的模型。
2.检测网络:
Iou:预测框与样本框交集比上并集IOU=A∩B/A∪B
Ap:average precision 某一类的准确度
Map:平均准确度(第二种计算方法常用)
一共预测筛选出了
confidence大于0.5的5个框,根据与GT红框比较得到(蓝色)
|
图 |
预测框 |
TP | FP |
confidence |
|
图1 |
1 |
TP |
80% |
|
图1 |
2 |
FP |
60% |
|
图1 |
3 |
TP |
90% |
|
图2 |
4 |
TP |
95% |
|
图2 |
5 |
TP |
98% |
为了得到precision-recall曲线,首先要对模型预测结果根据confidence对上图进行排序,由大到小(绿色)得到(蓝色)
|
图 |
预测框 |
confidence |
TP | FP |
TP all |
FP all |
Precision |
Recall |
|
图2 |
5 |
98% |
TP |
1 |
0 |
1 |
1/5 |
|
图2 |
4 |
95% |
TP |
2 |
0 |
1 |
2/5 |
|
图1 |
3 |
90% |
TP |
3 |
0 |
1 |
3/5 |
|
图1 |
1 |
80% |
TP |
4 |
0 |
1 |
4/5 |
|
图1 |
2 |
60% |
FP |
4 |
1 |
0.8 |
4/5 |
得到上表以后,计算AP有两种方法:
07年的十一点插值法:
Recall取值为[0,0.1,0.2,,,,0.9,1.0]十一个点,在每一个点Precision取值为大于等于该点的最大Precision。如当recall为0.2时,大于等于0.2的Precision可取1,当recall为0.8时,Precision为0.8,当recall为0.9与1.0时,Precision为0
AP=1/11(1+1+1+1+1+1+1+1+0.8+0+0)=0.8
2010以后现在常用的方法:
Recall 可取值为:0.2,0.4,0.6,0.8,0.8
对应的Precision为: 1, 1, 1, 1, 0.8
首先对Recall补全,前[0]后[1]:[0. 0.2 0.4 0.6 0.8 0.8 1. ]
对precision 补全,前[0]后[0]:[0. 1. 1. 1. 1. 0.8 0. ]
使得precision中的一点处大于等于右侧的最大值为:[1. 1. 1. 1. 1. 0.8 0. ]。
recall变化的位置为0,1,2,3,5
然后计算recall前后变化的值乘以对应的precision的值,即每一小块的面积
1*0.2+1*0.2*+0.2*1+0.2*1+0.2*0 = 0.8
计算结果也是0.8这个例子巧合没变化。。
3.分割模型:
PA:pixel Accuracy 像素精度,即预测对的像素比上图像总的像素。这个指标在目标小,黑色背景大的时候,用来对比效果不是很明显,即使全黑的图PA也会90多。
CPA:对每一个class求PA
MPA:CPA求均值
MIOU:交并比,预测与GT的交集比上并集(最常用)
*当某一张图像中,样本与预测均少一类,那么那一类的交集并集都为0在计算iou的时候为nan,计算miou的时候忽略nan