как форматировать данные изображения для обучения / прогнозирования, когда изображения различаются по размеру?

88

Я пытаюсь обучить свою модель, которая классифицирует изображения. У меня проблема в том, что у них разные размеры. как мне отформатировать мои изображения / или архитектуру модели?

Асиф Мохаммед
источник
2
Пожалуйста, покажите, что вы пробовали до сих пор, и что, похоже, у вас не работает.
Кейт Джон Хатчисон,
16
И бац идет код Inception v4. Я не согласен с этим стандартным комментарием. Было бы неплохо добавить немного больше информации - например, о какой сети мы говорим - но отрицательные голоса совершенно не оправданы. То есть реальная проблема.
sunside
4
Вопрос в том, как ImageNet форматирует свои данные изображений, чтобы их можно было использовать для обучения?
mskw

Ответы:

148

Вы не сказали, о какой архитектуре говорите. Поскольку вы сказали, что хотите классифицировать изображения, я предполагаю, что это частично сверточная, частично полностью связанная сеть, такая как AlexNet, GoogLeNet и т. Д. В общем, ответ на ваш вопрос зависит от типа сети, с которой вы работаете.

Если, например, ваша сеть содержит только сверточные блоки, т. Е. Не содержит полностью связанных слоев, она может быть инвариантной по отношению к размеру входного изображения. Такая сеть могла бы обрабатывать входные изображения и, в свою очередь, возвращать другое изображение («полностью сверточное»); вам нужно будет убедиться, что результат соответствует тому, что вы ожидаете, поскольку, конечно, вы должны каким-то образом определить потери.

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

Если это ваша проблема, вы можете сделать следующее:

  • Не волнуйтесь о раздавливании изображений. Сеть в любом случае может научиться разбираться в содержании; В любом случае масштаб и перспектива что-нибудь значат для контента?
  • Обрежьте изображения по центру до определенного размера. Если вы опасаетесь потери данных, сделайте несколько обрезков и используйте их для увеличения входных данных, чтобы исходное изображение было разделено на Nразные изображения правильного размера.
  • Заполните изображения сплошным цветом до квадрата размера, затем измените размер.
  • Сделайте комбинацию из этого.

Параметр заполнения может внести дополнительный источник ошибок в предсказание сети, поскольку сеть может (читай: вероятно, будет) смещаться к изображениям, которые содержат такую ​​заполненную границу. Если вам нужны идеи, загляните в раздел изображений в документации TensorFlow, там есть такие вещи, resize_image_with_crop_or_padкоторые снимают большую работу.

Что касается того, чтобы просто не заботиться о раздавливании, вот часть конвейера предварительной обработки известной сети Inception:

# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.

# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
    distorted_image,
    lambda x, method: tf.image.resize_images(x, [height, width], method=method),
    num_cases=num_resize_cases)

Они полностью осознают это и все равно это делают.

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

солнечная сторона
источник
11
Этот раздел кажется гораздо более сложным, когда вы имеете дело с обнаружением объектов и сегментацией экземпляров, потому что размеры якорных ящиков, которые также являются гиперпараметрами, необходимо корректировать, если у вас есть набор данных с большим разбросом размеров изображений.
CMCDragonkai
Соотношения сторон играют довольно важную роль для сети, которая должна различать круги и эллипсы.
HelloGoodbye
1
Другое общее наблюдение состоит в том, что партии не обязательно должны иметь одинаковые размеры; первая партия может обрабатывать изображения 4: 3, вторая - 16: 9 и т. д., если позаботятся о плотных слоях.
sunside
1
@Tobitor, всегда делайте входные данные сети как можно ближе к фактическим (тестовым или временным) данным. Если все ваши изображения намного шире, чем высокие, вам также следует смоделировать свою сеть для обработки ваших изображений таким образом. Тем не менее, если вы не можете точно сказать, как будут выглядеть ваши данные об «использовании», вам придется пойти на некоторые жертвы во время обучения. И в этом случае изменение размера изображения с 1000x200 до 256x256, как правило, нормально (представьте, что вы смотрите на номерной знак под углом 60 градусов - сейчас он примерно квадратный).
солнце
2
@Tobitor Не требуется, чтобы изображения были квадратными, просто это будет наименее плохой компромисс, если вы не знаете фактические размеры изображения во время вывода. : ^) Что касается размера, то чем меньше, тем лучше, но изображения должны быть достаточно большими, чтобы захватывать мельчайшие требуемые детали - вообще говоря, просто имейте в виду, что если вы, как человек-эксперт, не можете определить, что находится в image, сеть тоже не сможет.
солнце
11

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

Пранай Мукерджи
источник
Не могли бы вы подробнее рассказать о том, что такое «пул пространственной пирамиды» по сравнению с обычным пулом?
Matthieu
пожалуйста, прочтите Объединение пространственных пирамид в глубоких сверточных сетях для визуального распознавания в blog.acolyer.org/2017/03/21/convolution-neural-nets-part-2 @Matthieu
Asif Mohammed