Чому моя модель Кераса вчиться розпізнавати тло?


9

Я намагаюся навчити цю керасову реалізацію Deeplabv3 + на Pascal VOC2012, використовуючи попередньо перевірену модель (яка також проходила навчання на цьому наборі даних).

Я отримав дивні результати з точністю швидко зближення до 1,0:

5/5 [==============================] - 182s 36s/step - loss: 26864.4418 - acc: 0.7669 - val_loss: 19385.8555 - val_acc: 0.4818
Epoch 2/3
5/5 [==============================] - 77s 15s/step - loss: 42117.3555 - acc: 0.9815 - val_loss: 69088.5469 - val_acc: 0.9948
Epoch 3/3
5/5 [==============================] - 78s 16s/step - loss: 45300.6992 - acc: 1.0000 - val_loss: 44569.9414 - val_acc: 1.0000

Тестування моделі також дає 100% точність.

Я вирішив скласти передбачення на одному і тому ж наборі випадкових зображень до і після тренування, і виявив, що модель рекомендується говорити, що все просто фон (це 1-й клас у Pascal VOC2012).

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

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

Я зовсім новачок у глибокому навчанні та мені потрібна допомога, щоб зрозуміти, звідки це може бути.

Я подумав, що, можливо, це може бути моя втрата, яку я визначив як:

def image_categorical_cross_entropy(y_true, y_pred):
    """
    :param y_true: tensor of shape (batch_size, height, width) representing the ground truth.
    :param y_pred: tensor of shape (batch_size, height, width) representing the prediction.
    :return: The mean cross-entropy on softmaxed tensors.
    """
    return tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_pred, labels=y_true))

Я трохи не впевнений, чи мають мої тензори правильну форму. Я використовую API набору даних TF для завантаження .tfrecordфайлів, і мій тензор анотацій має форму (batch_size, height, width). Було (batch_size, height, width, 21)б те, що потрібно? Інші помилки зсередини моделі виникають, коли я намагаюся розділити анотаційне зображення на тензор, що містить 21 зображення (по одному для кожного класу):

tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [12,512,512,21] vs. [12,512,512]
         [[Node: metrics/acc/Equal = Equal[T=DT_INT64, _device="/job:localhost/replica:0/task:0/device:GPU:0"](metrics/acc/ArgMax, metrics/acc/ArgMax_1)]]
         [[Node: training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1/_13277 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:1", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_62151_training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:1"]()]]

Дякую за твою допомогу!


5
Тут досить розглянути кілька питань, я майже не знаю, з чого почати (1) ти використовуєш зразок розміром 5 для тренувань ??? (2) Що, якщо таке є, ви попередньо обробляєте свої зображення? У мене є відчуття, що відповідь лежить в цьому і (3) вам доведеться надати набагато більше інформації про вашу модель. Скільки мічених зразків у вас є? Скільки можливих категорій? Чи є у вас збалансований навчальний набір? (4) ваша точність 1,0 в основному нічого не означає, оскільки ваші втрати надмірно високі та зростають. Ваші втрати повинні зменшуватися в міру підвищення точності.
I_Play_With_Data

(1) Я використовую партії розміром 12, але це, на мою думку, не має значення. Я показав тут лише 3 маленькі епохи лише з 5 кроків, тому що саме так швидко він зближується. (2) Моя попередня обробка складається з деякого збільшення та масштабування (можливо, обрізання) до 512x512 для кожного зображення та пов’язаного з ним анотації. (3) у Pascal VOC 2012. є близько 11 500 зображень із маркованими зображеннями. Більшість паперів досягають 85% + mIOU на цьому наборі даних, я вважаю, що він збалансований. У цьому наборі даних 20 різних категорій, плюс одна для фону або «неоднозначного», всього 21
Метт

Я цікаво. Чи знайшли ви причину результатів вашої моделі?
Марк.F

3
Якщо ви поділилися кодом, помилку можна було б знайти.
Дмитро Прилипко

1
Той факт, що заздалегідь підготовлена ​​модель знаходить спосіб отримати 100% точність протягом 3 епох, використовуючи ті самі дані, що були використані, змушує мене думати, що помилка полягає в тому, що ваші навчальні мітки неправильні, можливо, все встановлено на етикетці, яка відповідає на задній план. У будь-якому випадку, погляньте на цю проблематику , де люди обговорюють свої проблеми та рішення для тонкої настройки моделі. Модель не обов'язково зламана, і помилка batchnorm в Tensorflow може бути усунена.
n1k31t4

Відповіді:


1

Ваша модель вишукана. Кожна епоха має лише 5 зображень. Модель "запам'ятовує" відповідь на кожне зображення.

Щоб мінімізувати ймовірність перевиконання, збільште кількість зображень. Для кожної категорії об'єкта повинно бути кілька тисяч прикладних зображень.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.