#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
, основываясь на наших требованиях.