我正在尝试使用Keras复制本文SiameseRPN。 该体系结构如下所示。
它在我的代码中给出了这一点。
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。
谢谢
答案 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
。