1.混淆矩阵:
总共两个字母:第一个字母表示你预测的对不对,第二个字母表示你预测的是啥
第一个字母表示预测正确(True)还是错误(False),只要是预测正确就是以T开头(True),预测错误就是F开头(False)
第二个字母表示预测值是yes(Positive)还是no(Negative)
第二个字母表示预测值是Positive还是Negative
2.召回率Recall:正确的预测了正样本(TP)/正样本总数(FN+TP)=100/105
3.精确率Precision:正确的预测了正样本(TP)/预测为正样本的个数(FP+TP)=100/110
4.MIOU:
IOU:交并比,交集除以并集=TP/(TP+FP+FN)
MIOU就是多分类问题的平均IOU
MIOU=每一类的TP/(TP+FP+FN)之和求平均
下面是代码实现:
以一个三分类问题为例:(分成0,1,2三类)
(1)求混淆矩阵:
from sklearn.metrics import confusion_matrix
import cv2
label=cv2.imread("label.png")
#图片展平到一维上面
label=label.reshape(-1)
pred=cv2.imread("predict.png")
pred=pred.reshape(-1)
#告诉confusion_matrix函数label里面总共有三个像素0,91,255
out=confusion_matrix(label,pred,label())
print(out)
最后的得到一个3*3矩阵:
应该这么理解:
(2)算出MIOU
对于类别0,它的混淆矩阵:
算出类别0的IOU:TP/(TP+FP+FN)
同理可求出其他两类的IOU,平均一下就可以得到MIOU
#out是一个3*3矩阵
TP=out[0][0]
FN=out[0][1]+out[0][2]
FP=out[1][0]+out[2][0]
TN=out[1][1]+out[1][2]+out[2][1]+out[2][2]
iou_0=TP/(TP+FP+FN)
print(iou_0)
#输出比如说得到0.79014976