Tensorflow:尺寸不一致的张量?

时间:2016-09-12 18:29:42

标签: computer-vision tensorflow object-detection

我一直在实施用于对象检测的卷积神经网络,我遇到了以下问题:

对于对象检测任务,通常,一个输入图像与未确定数量的对象边界框相关联。每个边界框可以用4个坐标表示。因此,要将边界框表示为张量,形状将为:

[batch_size, variable_num_bbox(?), 4] 

请注意,此处不仅 variable_num_bbox 不能在图形构造之前指定,而且即使在一个批量输入中,不同的图像也可能具有不同的数字边界框。

作为一个说明性示例,我想将以下数组转换为张量:

[[[1, 2, 3, 4], [2, 3, 4, 5]], [[3, 4, 5, 6]]]

此处,第一张图片的 variable_num_bbox = 2,但第二张图片的值为1。

我尝试过多种方法将上面的嵌套列表转换为张量,这让我想到了tensorflow是否支持尺寸不一致的张量的问题?如果不是,有没有计划支持它给开发人员这样的灵活性?如果它不受支持,有没有办法绕过这个问题进行对象检测任务?一种解决方案是设置 batch_size = 1 ,边界框可以表示为形状 [variable_num_bbox(?),4] 的张量,所以是的,尺寸不一致性已经消失,但这会显着损害效率。

1 个答案:

答案 0 :(得分:0)

我在处理这个问题时所做的是在需要时生成一个边界框列表。例如,如果您有4D张量中的所有边界框(即每个图像的边界框数量相同)并且想要执行非最大限制(通常会导致每个图像的框数可变),您可以使用某些东西像这样:

bbox_list = []
for i, bboxes in enumerate(tf.unpack(bboxes_batch, axis=0)):
    idx = tf.image.non_max_suppression(bboxes, confidences[i], 20)
    bbox_list.append(tf.gather(bboxes, idx))

这有帮助吗?