Могу ли я использовать активацию Sigmoid для моего выходного слоя, даже если моя модель CNN выполняет регрессию? - PullRequest
0 голосов
/ 21 октября 2018

Конечная цель: расчет средней точки объекта.

У меня есть небольшой набор данных (около 120 изображений), в котором есть объект (одинаковый во всех случаях), а метки являются нормализованными координатами x, y средней точки объекта на изображении (всегдаот 0 до 1)

например, x = image_005;y = (0,1, 0,15) для изображения с объектом, расположенным рядом с левым нижним углом

Я пытаюсь использовать архитектуру ResNet, но с учетом размера моего изображения (все изображения идентичны).Поскольку выходные значения всегда находятся в диапазоне от 0 до 1, для обеих координат мне было интересно, возможно ли использовать активацию Sigmoid в моем последнем слое:

 X = Dense(2, activation='sigmoid', name='fc', kernel_initializer = glorot_uniform(seed=0))(X)

вместо линейной активации (как часто рекомендуетсякогда вы пытаетесь добиться результата регрессии)

Для функции потерь я использую MSE с оптимизатором 'rmsprop', а в дополнение к точности и MSE я написал собственную метрику, чтобы сообщать мне, если прогнозбаллы отклоняются от меток более чем на 5%

model.compile(optimizer='rmsprop', loss='mean_squared_error', metrics=['mse','acc',perc_midpoint_err])

Я не получаю хороших результатов после обучения модели примерно на 150 эпохах (я тоже экспериментировал с разными размерами партий)

Должен ли я изменить слой активации на линейный?Или я могу изменить свою модель?Или ResNet совершенно не подходит для этой задачи?

1 Ответ

0 голосов
/ 22 октября 2018

Ваша задача связана с обнаружением объекта.Разница в том, что у вас, кажется, есть только один объект на каждом из ваших изображений, тогда как при обнаружении может быть несколько объектов или их нет.Для обнаружения объектов существуют сети, такие как YOLOv3 (https://pjreddie.com/media/files/papers/YOLOv3.pdf) или Single Shot Multibox Detector - SSD (https://arxiv.org/pdf/1512.02325.pdf)), но также можно использовать ResNet в качестве сети обнаружения объектов (как в этом документе: https://arxiv.org/pdf/1506.01497.pdf)

Я кратко опишу, как YOLO решает проблему регрессии для ограничивающей рамки координат x, y:

  • YOLO использует функцию активации сигмоида для x, y
  • Он делит изображение на ячейки сетки и прогнозирует смещения для потенциального объекта в каждой ячейке сетки. Это может быть полезно в случае, если у вас есть большие изображения или объекты в нескольких местах.
  • В оригинальной статье MSE рассматривается как убытокфункции, но в моем любимом керал-переопределении они используют потерю кроссентропии с оптимизатором Адама.

В принципе, ваша настройка выглядит хорошо для меня. Но есть много вещей, которые могут привести к снижению производительности, так как выне говорите о домене вашего набора данных: вы используете предварительно обученную сеть или тренируетесь с нуля?категория, которую вы изучаете, или категория объектов, которую сеть видела раньше?и т. д.

Вот некоторые идеи, которые вы можете попробовать:

  • изменить оптимизатор (на SGD или Адама)
  • изменить скорость обучения (лучше меньше, чем слишком)большой)
  • увеличить размер вашего набора данных.Для переобучения сети для новой категории объектов мое эмпирическое правило должно использовать около 500-1000 изображений.Для переподготовки с нуля вам нужно на несколько порядков больше.
  • вы можете проверить YOLO или SSD и изменить эти сети для вашего случая

Надеюсь, вы найдете вдохновение для своегорешение.

...