首页 > 解决方案 > 如何比较深度学习的真实图像和预测图像

问题描述

我有两个列表,其中包含基本事实和预测图像。两个列表都包含二进制图像。我需要获得这两个列表之间的准确性、f1-score、召回和精度报告。

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))

ps解决方案

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))

标签: pythonmachine-learningscikit-learndeep-learningcomputer-vision

解决方案


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

图形化:

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

推荐阅读