При создании модели keras с нефиксированным размером входных данных, возможно ли применять разные слои в зависимости от размера, используя лямбда-слой? - PullRequest
0 голосов
/ 24 января 2019

Я имею дело с моделью сверточного изображения, которую я конвертирую и сохраняю в файле yaml, а затем использую в коде. Полный размер входного изображения составляет 256 * 256, но во время обучения я тренирую модель, используя патч размером 128 * 128, и в процессе проверки я получаю полноразмерное изображение. Поэтому для входного размера модели задано значение Нет. Я хотел бы создать модель, обрезав только среднюю часть изображения размером 64 * 64 из этого входного слоя. В это время модель должна обрезать изображение различной длины в соответствии с размером входного изображения, чтобы получить одинаковый выходной размер (64 * 64). Однако возможно ли применить оператор if-else в моем коде? Буду признателен, если вы поможете мне с кодом.

patch = (None,None, 6)
x_input = Input(shape=patch)

def get_crop(x):
    from keras.layers import Cropping2D
    if x.get_shape().as_list()[1:3] ==[256,256]:
        return Cropping2D(cropping=(96,96))(x)
    else:
        return Cropping2D(cropping=(32,32))(x)

x_crop = Lambda(get_crop)(x_input)

1 Ответ

0 голосов
/ 24 января 2019

Вам лучше спросить в другом StackExchange, таком как CrossValidation, но вот короткий ответ.

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

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

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