合并具有不同形状的两层,复制SiamRPN

时间:2019-03-13 11:00:37

标签: tensorflow keras

我正在尝试使用Keras复制本文SiameseRPN。 该体系结构如下所示。 enter image description here

它在我的代码中给出了这一点。

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 个答案:

答案 0 :(得分:1)

是的,Keras.layers.concatenate要求传递给它的两个卷积层都具有相同的形状。

在这种情况下,您可以使用UpSampling Layer

例如,假设cls_x的形状为(None, 80, 128, 8),而cls_z的形状为(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