我正在尝试编写一个模型,从 128 个提案中提取 10 个感兴趣的区域并将它们输入到 Dense 层:
# x is an input tensor of size [None, 128, 4].
# scores is the corresponding [None, 128] score vector.
indices = tf.image.non_max_suppression(x, scores, 10)
x = x[indices]
x = tf.keras.layers.Flatten()(x)
x = tf.keras.layers.Dense(20)(x)
当我将它包装在 keras 模型中并尝试编译它时,图形构建失败,因为tf.image.non_max_suppression
返回一个形状的索引张量(None,)
而不是(10,)
. 这使得扁平未知的(非批量)大小,x[indices]
因此 Dense 层在编译时出现错误:
ValueError: The last dimension of the inputs to a Dense layer should be defined. Found None. Full input shape received: (None, None)
我的理解是 NMS 返回 n <= 10 个项目而不是 10 个项目,这就是它没有为图形指定固定输出形状的原因。选择 RoI 的输入数较高,这样从 NMS 中得到小于 10 RoI 的机会基本为零。我如何告诉我的模型它应该始终期望 NMS 准确返回 10 个项目,以便密集层的输入大小固定为 10*4?