【发布时间】:2020-03-26 03:47:42
【问题描述】:
我有两个列表,其中包含基本事实和预测图像。两个列表都包含二进制图像。我需要获得这两个列表之间的准确率、f1 分数、召回率和准确率报告。
sklearn.metrics.classification_report 可用于获取预测值和真值之间的分类报告,但它只接受一维数组。
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html
如何修改它以获得包含二值图像的两个图像列表之间的分类报告?还是有更好的方法来执行此操作?我的代码:
import os
import cv2
import numpy as np
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
path_pred = "absolute_path/pred"
pred_list = next(os.walk(path_pred))[2]
true_list_new=[]
pred_list_new=[]
for img in pred_list:
pred_img=cv2.imread("absolute_path/pred/%s" % img)
true_img=cv2.imread("absolute_path/true/%s" % img)
true_list_new.append(true_img)
pred_list_new.append(pred_img)
print("Confusion Matrix: ",
confusion_matrix(true_list_new, pred_list_new))
print ("Accuracy : ",
accuracy_score(true_list_new,pred_list_new)*100)
print("Report : ",
classification_report(true_list_new, pred_list_new))
p.s 解决方案
import os
import cv2
import numpy as np
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
path_pred = "absolute_path/pred"
pred_list = next(os.walk(path_pred))[2]
true_list_new=[]
pred_list_new=[]
for img in pred_list:
pred_img=cv2.imread("absolute_path/pred/%s" % img)
true_img=cv2.imread("absolute_path/true/%s" % img)
true_list_new.append(true_img)
pred_list_new.append(pred_img)
true_list_new=np.array(true_list_new)
pred_list_new=np.array(pred_list_new)
true_list_new=true_list_new.flattern()
pred_list_new=pred_list_new.flattern()
print("Confusion Matrix: ",
confusion_matrix(true_list_new, pred_list_new))
print ("Accuracy : ",
accuracy_score(true_list_new,pred_list_new)*100)
print("Report : ",
classification_report(true_list_new, pred_list_new))
【问题讨论】:
-
在比较图像时,准确率、f1 分数和准确率/召回率是什么意思?这些指标通常在比较标量输出时使用。
-
您是在预测图像的类别还是图像?如果您正在预测图像,这是否意味着在正确预测的情况下您将在 pred 和 true 中拥有相同的图像?
-
@Zaccharie Ramzi, @SajanGohil 我的图像被二进制分类为水(255)和非水(0)。我目前正在做的是将地面实况图像和预测图像转换为 numpy 数组。接下来使用 array.flattern() 函数制作一维数组并将其作为上述函数的输入。我需要知道我的方法是否准确?
标签: python machine-learning scikit-learn deep-learning computer-vision