Python 利用预测图像和地面真实图像评价神经网络
预测图像和gt图像是黑白图像 地面真值图像中的白点表示地面真值。 预测图像中的白点表示预测点 两个图像都由图像上的多行组成(存在多行。它们都属于一个类) 我使用以下方法Python 利用预测图像和地面真实图像评价神经网络,python,opencv,machine-learning,neural-network,computer-vision,Python,Opencv,Machine Learning,Neural Network,Computer Vision,预测图像和gt图像是黑白图像 地面真值图像中的白点表示地面真值。 预测图像中的白点表示预测点 两个图像都由图像上的多行组成(存在多行。它们都属于一个类) 我使用以下方法 n_gt_pixels = cv2.countNonZero(im_gt) #count number of white pixels in gt image n_predicted_pixels = 0 for i in range(rows): for j in range(cols): if((im_pre
n_gt_pixels = cv2.countNonZero(im_gt) #count number of white pixels in gt image
n_predicted_pixels = 0
for i in range(rows):
for j in range(cols):
if((im_predicted[i,j] == im_gt[i,j]) and im_gt[i,j]!=0): #ignore black pixels
n_predicted_pixels = n_predicted_pixels + 1
accuracy = n_predicted_pixels /n_gt_pixels
然后我取平均数
你能告诉我这是评估模型的正确方法吗?
有没有更好的方法?(这种方法需要很多时间)您的任务似乎是一个二进制分割问题。您可以使用精度(正确分类的像素百分比)、MCR(即基本上为1精度的误分类率)或您可以读取的平均IOU等指标 除此之外,我建议如果您想计算精度,请使用
cv2.bitwise\u xor
来完成此任务
编辑
此函数可用于计算MIOU,其中pred_mask和sample_mask是2d数组。您的任务似乎是一个二进制分割问题。您可以使用精度(正确分类的像素百分比)、MCR(即基本上为1精度的误分类率)或您可以读取的平均IOU等指标 除此之外,我建议如果您想计算精度,请使用
cv2.bitwise\u xor
来完成此任务
编辑
此函数可用于计算MIOU,其中pred_mask和sample_mask是2d数组。对于分割,比准确度更好的度量,绝对体积差或一些距离度量,如对称表面距离或Hausdorff距离。对于分割,比准确度更好的度量,绝对体积差或一些距离度量,如对称表面距离或Hausdorff距离。如果您不知道如何使用
xor
请告诉我。您好@Vardan。非常感谢。你建议的链接,为了计算IOU,标签和预测将是2d图像转换成一维的,对吗?平均iou(标签,预测,数值类,权重=None,度量集合=None,更新集合=None,name=None)如果这个公式对你不起作用,你可以使用这个公式iou=true\u positive/(true\u positive+false\u positive+false\u negative)非常感谢你,如果你不知道如何使用xor,请告诉我。你好@Vardan。非常感谢。你建议的链接,为了计算IOU,标签和预测将是2d图像转换成一维的,对吗?平均iou(标签、预测、数值类、权重=None、度量集合=None、更新集合=None、名称=None)如果这个公式对你不起作用,你可以使用这个公式iou=true\u positive/(true\u positive+false\u positive+false\u negative)非常感谢你,谢谢你。
def cal_miou(pred_mask, sample_mask):
tp = np.sum(cv2.bitwise_and(pred_mask, sample_mask))
fp = np.sum(cv2.bitwise_and(pred_mask, cv2.bitwise_not(sample_mask)))
fn = np.sum(cv2.bitwise_and(cv2.bitwise_not(pred_mask), sample_mask))
return tp/(tp+fp+fn)