CNN Использование изображений со значительными размерами - PullRequest
0 голосов
/ 11 декабря 2018

Я разрабатываю сверточную нейронную сеть (CNN) для классификации изображений.

Доступный мне набор данных относительно мал (~ 35 тыс. Изображений как для поезда, так и для тестовых наборов).Каждое изображение в наборе данных различается по размеру.Самое маленькое изображение - 30 x 77, а самое большое - 1575 x 5959.

Я видел этот пост о том, как обращаться с изображениями, которые различаются по размеру.В посте указаны следующие методы работы с изображениями разных размеров.

  • "Сквош" изображения, означающие, что они будут изменены в соответствии с определенными размерами без сохранения соотношения сторон

  • Центрирование изображений по конкретномуразмер.

  • Подберите изображения сплошным цветом к квадратному размеру, затем измените размер.
  • Сочетание выше

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

У кого-нибудь еще есть мысли?

1 Ответ

0 голосов
/ 11 декабря 2018

Первое, что важно: ухудшит ли изменение размера изображения?

Все ли желаемые элементы в изображении разумно в одном и том же масштабе, несмотря на размер изображения?

  • Если да, вы не должны изменять размер, используйте модели с переменным входным размером (хотя есть минимум).
  • Если нет, приведет ли изменение размера к желаемым элементам в таком же масштабе?
    • Если да, измените размер!
    • Если нет: лучше подумайте о других решениях

Конечно, у вас могут быть модели, которые могут идентифицировать ваши элементы разных размеров, но чем больше, тем больше.различия, чем мощнее модель (я считаю, что это утверждение довольно разумно)

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

Для этого вам просто нужно указать input_shape=(None,None,input_channels).
Обратите внимание, что вам нужно будет позаботиться о совместимости, если вы собираетесь создавать и объединять ветви.

Сизменяя формы, вы не сможете использовать Flatten слоев.Вам понадобится GlobalMaxPooling2D или GlobalAveragePooling2D.Некоторые другие слои также ограничены фиксированными размерами, но сверточные, объединяющие и повышающие дискретизацию слои в порядке.

Сложность в том, что вы не можете разместить разные размеры в одном массиве.Затем вы можете:

  • изменить размер на группы одинакового размера без огромных изменений, чтобы упростить обучение.
  • просто не изменяйте размер и обучайте изображения одно за другим
  • сохраняйте пропорции и накладывайте стороны

Но лучший ответ зависит от ваших тестов.

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