如何比较基础知识和深度学习的预测图像

时间:2019-12-01 07:40:12

标签: python machine-learning scikit-learn deep-learning computer-vision

我有两个列表,其中包含基本事实和预测图像。两个列表都包含二进制图像。我需要获取这两个列表之间的准确性,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))

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是读取图像,然后将其重塑为单个行向量。 如果您不必显示它们,则可以执行 image.reshape(-1):使用此行,将cv2加载为具有多列的numpy数组的图像转换为具有以下内容的numpy数组:单一维度。

以图形方式:

[[1, 2, 3],
[4, 5, 6],   ==> [1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 8, 9]]