テンソルフローをセマンティックセグメンテーションに使用しています。ピクセル単位の損失を計算する際にテンソルフローに特定のラベルを無視するように指示するにはどうすればよいですか?Tensorflow:セマンティックセグメンテーションで特定のラベルを無視する方法は?
画像の分類には-1
というラベルを設定でき、無視されるin this postと読みました。ラベルテンソルが与えられている場合は、ラベルを変更して特定の値を-1
に変更するにはどうすればよいですか? MATLABで
それはのようになります。
ignore_label = 255
myLabelTensor(myLabelTensor == ignore_label) = -1
しかし、私はTFでこれを行う方法がわかりませんか?
いくつかの背景情報:これは、ラベルがロードされている方法です
:
label_contents = tf.read_file(input_queue[1])
label = tf.image.decode_png(label_contents, channels=1)
これは、損失が現在の計算方法です。
raw_output = net.layers['fc1_voc12']
prediction = tf.reshape(raw_output, [-1, n_classes])
label_proc = prepare_label(label_batch, tf.pack(raw_output.get_shape()[1:3]),n_classes)
gt = tf.reshape(label_proc, [-1, n_classes])
# Pixel-wise softmax loss.
loss = tf.nn.softmax_cross_entropy_with_logits(prediction, gt)
reduced_loss = tf.reduce_mean(loss)
I
def prepare_label(input_batch, new_size, n_classes):
"""Resize masks and perform one-hot encoding.
Args:
input_batch: input tensor of shape [batch_size H W 1].
new_size: a tensor with new height and width.
Returns:
Outputs a tensor of shape [batch_size h w 21]
with last dimension comprised of 0's and 1's only.
"""
with tf.name_scope('label_encode'):
input_batch = tf.image.resize_nearest_neighbor(input_batch, new_size) # as labels are integer numbers, need to use NN interp.
input_batch = tf.squeeze(input_batch, squeeze_dims=[3]) # reducing the channel dimension.
input_batch = tf.one_hot(input_batch, depth=n_classes)
return input_batch
でResnetを転送する
tensorflow-deeplab-resnet modelを使用しています
caffe-tensorflowを使用してCaffeでテンソルフローに実装されたモデル。
の可能性のある重複した[TensorFlow:?画像分割でのボイドラベルされたデータを処理する方法](https://stackoverflow.com/questions/46097968/tensorflow-how-to-handle-void-labeled-data-画像内セグメンテーション) – Shai