tensorflow表示用于二进制语义分割的前景类的iou
tensorflow表示用于二进制语义分割的前景类的iou,tensorflow,keras,image-segmentation,Tensorflow,Keras,Image Segmentation,tensorflow.metrics.mean_iou()当前平均每个类的iou。我想得到的iou的唯一前景在我的二进制语义分割问题 我尝试使用weights作为tf.常量([0.0,1.0])但是tf.常量([0.01,0.99])但是平均iou看起来仍然溢出,如下所示: (500102410241) 119/5000[……]-预计到达时间:4536s-损失:0.3897-平均借据:-789716217654962048.0000-附件:0.9335 我将其用作kerasfit\u生成器的m
tensorflow.metrics.mean_iou()
当前平均每个类的iou
。我想得到的iou
的唯一前景在我的二进制语义分割问题
我尝试使用weights
作为tf.常量([0.0,1.0])
但是tf.常量([0.01,0.99])
但是平均iou
看起来仍然溢出,如下所示:
(500102410241)
119/5000[……]-预计到达时间:4536s-损失:0.3897-平均借据:-789716217654962048.0000-附件:0.9335
我将其用作kerasfit\u生成器的metrics
,如下所示:
def mean_iou(y_true,y_pred):
y_pred=tf.to_int32(y_pred>0.5)
分数,up_opt=tf.metrics.mean_iou(y_true,y_pred,2,权重=tf.constant([0.01,0.99]))
keras.get\u session().run(tf.local\u variables\u initializer())
使用tf.control_依赖项([up_opt]):
分数=tf.身份(分数)
回击得分
我将非常感谢您的帮助,因为我已经尝试了很多东西,甚至自己只使用keras.backend
函数计算损失,但没有任何东西看起来是正确的。如果您使用keras
将keras.backend作为K导入
def switch_mean_iou(labels, predictions):
"""
labels,prediction with shape of [batch,height,width,class_number=2]
"""
mean_iou = K.variable(0.0)
seen_classes = K.variable(0.0)
for c in range(2):
labels_c = K.cast(K.equal(labels, c), K.floatx())
pred_c = K.cast(K.equal(predictions, c), K.floatx())
labels_c_sum = K.sum(labels_c)
pred_c_sum = K.sum(pred_c)
intersect = K.sum(labels_c*pred_c)
union = labels_c_sum + pred_c_sum - intersect
iou = intersect / union
condition = K.equal(union, 0)
mean_iou = K.switch(condition,
mean_iou,
mean_iou+iou)
seen_classes = K.switch(condition,
seen_classes,
seen_classes+1)
mean_iou = K.switch(K.equal(seen_classes, 0),
mean_iou,
mean_iou/seen_classes)
return mean_iou
seen_类也可以固定为class_number=2。