【问题标题】:How to compare ground truth and predicted images of deep learning如何比较深度学习的真实图像和预测图像
【发布时间】: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


【解决方案1】:

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

图形化:

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

【讨论】:

  • 这和把图片转成numpy数组并使用.flattern函数一样吗?
  • 没错。使用“imread”读取的图像以 numpy 数组的形式返回,因此您只需将它们展平即可。
  • 如果答案是正确的,请您标记为正确吗?我需要获得一点声誉 =) 谢谢
猜你喜欢
  • 2020-07-21
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 2019-12-30
  • 2018-09-16
  • 1970-01-01
相关资源
最近更新 更多