Объединить два слоя с разной формой, воспроизводящей SiamRPN

#tensorflow #keras

#tensorflow #keras

Вопрос:

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

это указано в моем коде.

 Template_input_shape = (127, 127, 3)
Detection_input_shape = (255, 255, 3)


// make the input
input_Template = tf.keras.Input(shape=Template_input_shape)
input_Detection = tf.keras.Input(shape=Detection_input_shape)

// make with alexNet model
processed_Template = alexNet(input_Template) // (6, 6, 256) output
processed_Detection = alexNet(input_Detection) // (22, 22, 256) output

// alexNet represente my model.

// after (if i've well understood) outputs are dispatched over a classification model and regression model


def classification_Branch(input_a, input_b, anchors=5, out=256):
    cls_x = keras.layers.Conv2D(256, kernel_size=3)(input_a.output)
    cls_z = keras.layers.Conv2D(out, kernel_size=3)(input_b.output)

cls = classification_Branch(processed_Template, processed_Detection)
rgr = regression_Branch(processed_Template, processed_Detection)  

Я пытаюсь понять, как я могу объединить оба cnn (cls_x с cls_z и т.д.), Чтобы получить желаемый результат.

 Keras.layers.concatenate([cls_x, cls_z])
  

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

Спасибо

Ответ №1:

Да, Keras.layers.concatenate требуется, чтобы оба переданных ему сверточных слоя имели одинаковую форму.

В этом случае вы можете использовать UpSampling Layer .

Например, предположим, что Форма cls_x является (None, 80, 128, 8) и Форма cls_z is (None, 40, 64, 8) , вы можете использовать

 p1 = keras.layers.UpSampling2D(size = (2, 2))(c2)
  

перед этапом,

Keras.layers.concatenate([cls_x, cls_z]) .

Это умножит форму cls_z на 2, и в результате форма cls_x и cls_z станут равными.

Примечание: Мы также можем передавать десятичные размеры, такие как (1.5, 1.5), в UpSampling2D , основываясь на наших требованиях.