Сегментация сети в Керасе сходится к одному классу во время обучения - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь реализовать RefineNet в Keras с бэкэндом Tensorflow.Я использую интерфейсные и предварительно обученные веса ResNet-101 от https://gist.github.com/flyyufelix/65018873f8cb2bbe95f429c474aa1294.. Модель компилируется успешно, но не сходится во время обучения: она всегда сходится к одному классу после всего лишь от 1 до 5 этапов обучения.

Список вещей, которые я пробовал / хотя:

  • Входные данные имеют горячее кодирование
  • Входные изображения имеют правильные соответствующие маски
  • Функция потери - категорическая кроссентропия
  • Предварительно обученные веса правильные, интерфейс правильно классифицирует входные изображения (например, кошки)
  • Замораживание / размораживание слоев интерфейса не кажетсячтобы изменить ситуацию
  • Разные оптимизаторы (Адам, SGD), разные скорости обучения (0,01 - 0,000001)
  • Сеть даже не сходится / не подходит на одном тренировочном образце
  • Дисбаланс классов: я пытался использовать взвешенную потерю, но не помог.Кроме того, сеть не всегда сходится к самому большому классу.
  • Проверил сетевые графы и сравнил их с архитектурой из бумаги RefineNet.
  • Может быть какая-то проблема инициализации, но Keras'Инициализация по умолчанию - glorot_uniform для ядер и нули для смещений, не может придумать ничего лучше, чем это.
  • Реле могли бы все умереть, но это не должно произойти после нескольких тренировочных шагов, верно?Я попробовал LeakyRelU, не помогло.
  • Пробовал разные размеры ввода, размеры партии, случайное обрезание, пропорции (в этот момент получалось несколько отчаянно).
  • Пробовал ввод случайного шума, тожеповедение.

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

Пример вывода во время обучения:

Training:
Step 0, loss 15.566238403320312, acc 0.012790679931640625
Step 1, loss 9.91278076171875, acc 0.36734771728515625
Step 2, loss 10.994621276855469, acc 0.27989959716796875
Step 3, loss 10.00101375579834, acc 0.3611602783203125
Step 4, loss 11.439224243164062, acc 0.2010345458984375
Step 5, loss 11.397968292236328, acc 0.229278564453125
Step 6, loss 9.844161987304688, acc 0.3711433410644531
Step 7, loss 9.981706619262695, acc 0.36286163330078125
Step 8, loss 11.335559844970703, acc 0.21475982666015625
Step 9, loss 9.997631072998047, acc 0.3608970642089844
...

Полный код можно найти в следующей записной книжке Google Colab: https://colab.research.google.com/drive/1OlujuKZYhRaTm9h7rHAPEi9gkiYmQLR_

Я попытался максимально упростить воспроизведение проблемы.

Любая помощь / идеи будут высоко ценится!

...