Может ли Keras обрабатывать входные изображения разного размера?
Может ли Keras обрабатывать входные изображения разного размера? Например, в полностью сверточной нейронной сети входные изображения могут иметь любой размер. Однако нам нужно указать форму ввода при создании сети Keras. Поэтому, как мы можем использовать Keras для работы с разными размерами ввода без изменения размера входных изображений до того же размера? Спасибо за любую помощь.
Ответы
Ответ 1
Да.
Просто измените форму ввода на фигуру = (n_channels, Нет, Нет).
Где n_channels - количество каналов на вашем входном изображении.
Я использую бэкэнд Theano, хотя, если вы используете shadoworflow, вам, возможно, придется изменить его на (None, None, n_channels)
Вы должны использовать:
input_shape = (1, None, None)
Нет в форме обозначает переменную размерность. Обратите внимание, что не все слои будет работать с такими переменными размерами, поскольку для некоторых слоев требуется (например, Flatten). https://github.com/fchollet/keras/issues/1920
Например, используя функциональный API keras, ваш уровень ввода будет следующим:
Для набора данных RGB
inp = Input(shape=(3,None,None))
Для серого набора данных
inp = Input(shape=(1,None,None))
Ответ 2
Реализация входных массивов произвольного размера с одинаковыми вычислительными ядрами может создавать множество проблем - например, на графическом процессоре вам нужно знать, как большие буферы резервировать, и более слабо, чтобы развернуть ваши циклы и т.д. Это основная причина, по которой Keras требует постоянных форм ввода, входы с переменным размером слишком тяжелы, чтобы справиться с ними.
Это чаще встречается при обработке последовательностей переменной длины, таких как предложения в NLP. Общий подход состоит в том, чтобы установить верхнюю границу размера (и обрезать более длинные последовательности), а затем наложить последовательности с нулями до этого размера.
(Вы также можете включить маскировку на нулевые значения, чтобы пропустить вычисления в заполненных областях, за исключением того, что сверточные слои в Keras могут все еще не поддерживать маскированные входы...)
Я не уверен, что для трехмерных структур данных накладные расходы не являются запретительными - если вы начинаете получать ошибки памяти, самым простым способом является уменьшение размера партии. Сообщите нам о своем опыте применения этого трюка на изображениях!