def _calculate_miou(self,logits,label_batch):
with tf.variable_scope('MIOU_CAL'):
confusion_matrix = tf.confusion_matrix(labels=tf.reshape(label_batch,[-1]),predictions=tf.reshape(logits,[-1]),num_classes=N_CLASSES,dtype=tf.float32)
def cal_miou(matrix):
sum_col = np.zeros(shape = [N_CLASSES],dtype=np.float32)
sum_row = np.zeros(shape = [N_CLASSES],dtype=np.float32)
miou = np.zeros(shape = [],dtype=np.float32)
for i in range(N_CLASSES):
for j in range(N_CLASSES):
sum_row[i] += matrix[i][j]
sum_col[j] += matrix[i][j]
for i in range(N_CLASSES):
miou += matrix[i][i]/(sum_col[i]+sum_row[i]-matrix[i][i])
miou = (miou/N_CLASSES).astype(np.float32)
return miou
miou = tf.py_func(cal_miou, [confusion_matrix], tf.float32)
# def miou_fun(eval,label):
#
# miou1 = 0.0
# for i in range(BATCH_SIZE):
# img = eval[i]
# gt = label[i]
# miou1 += py_img_seg_eval.mean_IU(img, gt)
# miou1 = float(miou1/BATCH_SIZE)
# print miou1
# return miou1
#
#
# miou1 = tf.py_func(miou_fun,[logits,label_batch],tf.double)
return miou #,miou1
评论列表
文章目录