Как добавить определенные помеченные пиксели в семантической сегментации - PullRequest
0 голосов
/ 26 февраля 2019

Я новичок в семантической сегментации.Я использовал FCN для обучения моего набора данных.В наборе данных есть несколько пикселей для неизвестного класса.Я хотел бы исключить этот класс из моей потери.Поэтому я определил вес на основе распределения классов по всему набору данных и установил вес для неизвестного класса равным нулю следующим образом.Но я все еще получаю прогноз для этого класса.Есть ли у вас идеи, как правильно исключить один конкретный класс?

loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits
                      (logits=logits, labels=tf.squeeze(annotation,
                                                        squeeze_dims=[3]),name="entropy"))
weighted_losses = (loss * weights)
train_op = optimizer.minimize(weighted_losses,
                                  var_list=tf.trainable_variables(),
                                  global_step=tf.train.get_global_step())

Я не знаю pytorch, но я слышал, что для этой функции есть функция ignore_index, и вы можете игнорировать определенный класс.Если это правильный подход к моей проблеме, знаете ли вы, есть ли что-то эквивалентное в тензорном потоке?

1 Ответ

0 голосов
/ 26 февраля 2019

Для семантической сегментации у вас есть 2 «специальные» метки: одна «background» (обычно 0), а другая «ignore» (обычно 255 или -1).

  • «Фон», как и все другие семантические метки, означает «Я знаю , этот пиксель не принадлежит ни к одной из семантических категорий, с которыми я работаю».Для вашей модели важно правильно выводить «фон», когда это применимо.
  • Метка «Игнорировать» - это не метка, которую может предсказать ваша модель - она ​​«вне» своего диапазона.Эта метка существует только в обучающей аннотации, означающей «мы не были уверены, как должен быть помечен этот пиксель, поэтому просто игнорируйте его».

Когда в целевых метках есть «игнорировать» пиксели, ваша модель не может(и не должны) выводить метки «игнорировать».Тем не менее, ваша модель должна выдавать что-то .Тот факт, что этот пиксель помечен как «игнорировать», означает, что все выходные данные вашей модели для этого пикселя будут игнорироваться функцией потерь (в предположении, что вы сказали потере игнорировать «игнорировать» пиксели).Более того, если ваши наборы тестов / проверок имеют метки «игнорировать», это означает, что независимо от того, что ваша модель выводит для этих пикселей, она будет просто игнорироваться механизмом оценки и не будет считаться ни правильным, ни неправильным прогнозом.

Подводя итог: даже когда основополагающая истина имеет метки "игнорировать", модель не может и не должна выводить "игнорировать".Он просто выводит любую действительную метку, на которую он похож, и это совершенно нормально.

для тензорного потока вы можете оформить эту ветку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...