Каковы критерии веса Deeplab моего пользовательского набора данных? - PullRequest
0 голосов
/ 20 февраля 2019

Я тренируюсь Deeplab v3 , создавая пользовательский набор данных в трех классах, включая фон

Затем Мой класс - это фон, панда, бутылка и 1949 изображений.

и я использую moblienetv2 модель

и segmentation_dataset.py была изменена следующим образом.

_MYDATA_INFORMATION = DatasetDescriptor(
        splits_to_sizes={
            'train': 975,  # num of samples in images/training
            'trainval': 1949,
            'val': 974,  # num of samples in images/validation
        },


        num_classes=3,
        ignore_label=0,
)

train.py был изменен следующим образом.

flags.DEFINE_boolean('initialize_last_layer', False,
                 'Initialize the last layer.')

flags.DEFINE_boolean('last_layers_contain_logits_only', True,
                 'Only consider logits as last layers or not.')

train_utils.py не был изменен.

not_ignore_mask = tf.to_float(tf.not_equal(scaled_labels, ignore_label)) * loss_weight

Я получаю некоторые результаты, но не идеальные.

Например, цвета маски панды и бутылок одинаковы или не различаются

Результат, который я хочу получить,красная панда и зеленая бутылка

Итак, я решил, что была проблема с весом.

На основании вопросов других людей, train_utils.py был настроенследующим образом

irgore_weight = 0
label0_weight =1
label1_weight = 10
label2_weight = 15
not_ignore_mask = 
    tf.to_float(tf.equal(scaled_labels, 0)) * label0_weight +
    tf.to_float(tf.equal(scaled_labels, 1)) * label1_weight +
    tf.to_float(tf.equal(scaled_labels, 2)) * label2_weight +
    tf.to_float(tf.equal(scaled_labels, ignore_label)) * irgore_weight 

tf.losses.softmax_cross_entropy(
    one_hot_labels,
    tf.reshape(logits, shape=[-1, num_classes]),
    weights=not_ignore_mask,
    scope=loss_scope)

У меня есть вопрос здесь.

Каковы критерии для веса?

Мой набор данных состоит из следующих.

введите описание изображения здесь

Оно генерируется автоматически, поэтому я не знаю точно, какой из них больше, но это аналогичная сумма.

И еще, я использую цветную карту Паскаля.

Это первый черный фон, а второй красный третий зеленый.

Я хочу обозначить панд красными, а бутылки - зелеными.Что мне делать?

1 Ответ

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

Я думаю, вы могли перепутать определение вашего ярлыка.Может быть, я могу помочь вам с этим.Пожалуйста, проверьте еще раз ваш segmentation_dataset.py .Здесь вы определяете «0» как игнорируемую метку.Это означает, что все пиксели, которые помечены как «0», исключаются из процесса обучения (более конкретно, исключаются при вычислении функции потерь и, таким образом, не влияют на обновление весов).В свете этой ситуации крайне важно не «игнорировать» фоновый класс, так как это также класс, который вы хотите правильно предсказать.В train_utils.py вы назначаете весовой коэффициент игнорируемому классу, который не будет иметь никакого эффекта -> Убедитесь, что вы не смешиваете три своих учебных класса [фон, панада, бутылка] стег "игнорируется".

В вашем случае num_classes = 3 должно быть правильным, так как оно определяет количество прогнозируемых меток (модель автоматически предполагает, что эти метки равны 0, 1 и 2. Если вы хотите игнорировать определенныеметки, вы должны аннотировать их четвертым классом меток (для этого просто выберите число> 2.) и затем назначьте эту метку ignored_label.и это не повлияет на ваше обучение;)

...