Размер обучающего изображения полностью сверточной сети

Я пытаюсь воспроизвести результаты полностью сверточной сети (FCN) для семантической сегментации с помощью TensorFlow.

Я застрял на подаче обучающих изображений в граф вычислений. Полностью сверточная сеть использовала для обучения набор данных VOC PASCAL. Однако обучающие образы в наборе данных имеют разные размеры.

Я просто хочу спросить, обрабатывали ли они обучающие изображения, чтобы они имели одинаковый размер, и как они обрабатывали изображения. Если нет, они просто загружали в FCN пакеты изображений разных размеров? Можно ли загружать изображения разных размеров одним пакетом в граф вычислений в TensorFlow? Можно ли это сделать, используя ввод очереди, а не заполнитель?


person Ruizhi Deng    schedule 20.08.2016    source источник
comment
В чем проблема при загрузке изображений разных размеров?   -  person codetiger    schedule 20.08.2016
comment
Как я могу поместить изображения разных размеров в один пакет в тензорном потоке? Вы имеете в виду, что FCN использовала изображения разных размеров для обучения? Использовали ли они пакетное обучение?   -  person Ruizhi Deng    schedule 20.08.2016


Ответы (2)


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

Когда вы тренируете полностью сверточную сеть, вы должны тренировать ее как сеть с полностью связанными слоями в конце. Таким образом, каждое входное изображение во входном пакете должно иметь одинаковую ширину, высоту и глубину. Измените их размер.

Единственное отличие состоит в том, что в то время как полностью связанные слои выводят один выходной вектор для каждой выборки входного пакета (форма [None, num_classes]), полностью сверточный выводит карту вероятностей классов.

Во время обучения, когда размеры входных изображений равны входным размерам сети, на выходе будет карта вероятности с формой [None, 1, 1, num_classes].

Вы можете удалить размеры размера 1 из выходного тензора с помощью tf.squeeze < / a>, а затем вычислить потери и точность, как в случае полностью подключенной сети.

Во время тестирования, когда вы загружаете сетевые изображения с размерами, превышающими входные, на выходе будет карта вероятности с размером [None, n, n, num_classes].

person nessuno    schedule 20.08.2016
comment
Хотели бы вы подробнее рассказать об использовании tf.squeeze, который может снять ограничения на фиксированный размер изображения? - person user288609; 17.06.2017
comment
FCNN выводит карту с формой (игнорируя размер пакета и считая вход квадратным) [n, n, num_classes]. Если входное изображение имеет такую ​​же пространственную протяженность (ширину и высоту), что и ожидаемая сетью (ширина и высота его воспринимающего поля), на выходе получается вектор вероятностей с формой [1,1, num_classes]. tf.squeeze удаляет 1 измерения из тензора, поэтому вы можете перейти от тензора с формой [1,1,num_classes] к тензору с формой [num_classes]. Это возможно только в том случае, если на выходе 1 размер, иначе вы не сможете их удалить. - person nessuno; 17.06.2017

  1. Вы можете использовать размер партии = 1
  2. Вы можете изменить размер изображений до фиксированного размера, например 256 256
  3. Вы можете изменить размер каждого пакета до среднего размера изображения его содержимого.
person mrgloom    schedule 05.04.2018