【问题标题】:Tensorflow: Tensor with inconsistent dimension size?Tensorflow:尺寸大小不一致的张量?
【发布时间】:2017-01-20 06:13:53
【问题描述】:

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

对于对象检测任务,通常,一张输入图像与不确定数量的对象边界框相关联。每个边界框可以用 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] 的张量,所以是的,维度不一致性消失了,但这会严重影响效率。

【问题讨论】:

    标签: computer-vision tensorflow object-detection


    【解决方案1】:

    我为解决这个问题所做的就是在需要时生成一个边界框列表。例如,如果您在 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))
    

    这有帮助吗?

    【讨论】:

    • 感谢您鼓舞人心的回复。但在我的情况下,我需要加载地面实况边界框进行训练,将所有 gt bbox 加载到一个张量中并为每张图像从中采样可能不切实际。但毫无疑问,将边界框表示为 张量列表 是有意义的,这样更灵活。
    • 是的,我建议您使用张量列表(边界框)。从 4D 张量转换只是在某些形式的对象检测(如 YOLO、SSD 等)中发生的情况的一个示例。
    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2021-09-21
    • 2017-04-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多