如何批处理对象检测数据集?
How to batch an object detection dataset?
我正在致力于在更广泛的人脸数据集上实施人脸检测模型。我了解到它内置于 Tensorflow datasets 中,我正在使用它。
但是,我在批处理数据时遇到了问题。由于一个图像可以有多个面,因此每个图像输出的边界框数量不同。例如,一张有 2 个面孔的图像将有 2 个边界框,而有 4 个面孔的图像将有 4 个,依此类推。
但问题是,这些不等数量的边界框导致每个数据集对象张量具有不同的形状。在 TensorFlow afaik 中,我们无法批量处理形状不等的张量(来源 - Tensorflow Datasets: Make batches with different shaped data)。所以我无法批处理数据集。
所以在加载以下代码并进行批处理后 -
ds,info = tfds.load('wider_face', split='train', shuffle_files=True, with_info= True)
ds1 = ds.batch(12)
for step, (x,y,z) in enumerate(ds1) :
print(step)
break
我在 运行 Link to Error Image
上遇到这种错误
一般来说,任何关于如何批处理 Tensorflow 对象检测数据集的帮助都会非常有帮助。
可能有点晚了,但我想我还是应该 post。 padded_batch 功能应该可以解决这个问题。它通过填充零匹配维度来解决这个问题
ds,info = tfds.load('wider_face', split='train', shuffle_files=True, with_info= True)
ds1 = ds.padded_batch(12)
for step, (x,y,z) in enumerate(ds1) :
print(step)
break
另一种解决方案是不使用批处理,而是使用带有 for 循环的自定义缓冲区进行处理,但这有悖于目的。只是为了 post诚实,我将在此处添加示例代码作为简单解决方法的示例。
ds,info = tfds.load('wider_face', split='train', shuffle_files=True, with_info= True)
batch_size = 12
image_annotations_pair = [x['image'], x['faces']['bbox'] for n, x in enumerate(ds) if n < batch_size]
然后使用为此修改的train_step。
我正在致力于在更广泛的人脸数据集上实施人脸检测模型。我了解到它内置于 Tensorflow datasets 中,我正在使用它。 但是,我在批处理数据时遇到了问题。由于一个图像可以有多个面,因此每个图像输出的边界框数量不同。例如,一张有 2 个面孔的图像将有 2 个边界框,而有 4 个面孔的图像将有 4 个,依此类推。
但问题是,这些不等数量的边界框导致每个数据集对象张量具有不同的形状。在 TensorFlow afaik 中,我们无法批量处理形状不等的张量(来源 - Tensorflow Datasets: Make batches with different shaped data)。所以我无法批处理数据集。
所以在加载以下代码并进行批处理后 -
ds,info = tfds.load('wider_face', split='train', shuffle_files=True, with_info= True)
ds1 = ds.batch(12)
for step, (x,y,z) in enumerate(ds1) :
print(step)
break
我在 运行 Link to Error Image
上遇到这种错误一般来说,任何关于如何批处理 Tensorflow 对象检测数据集的帮助都会非常有帮助。
可能有点晚了,但我想我还是应该 post。 padded_batch 功能应该可以解决这个问题。它通过填充零匹配维度来解决这个问题
ds,info = tfds.load('wider_face', split='train', shuffle_files=True, with_info= True)
ds1 = ds.padded_batch(12)
for step, (x,y,z) in enumerate(ds1) :
print(step)
break
另一种解决方案是不使用批处理,而是使用带有 for 循环的自定义缓冲区进行处理,但这有悖于目的。只是为了 post诚实,我将在此处添加示例代码作为简单解决方法的示例。
ds,info = tfds.load('wider_face', split='train', shuffle_files=True, with_info= True)
batch_size = 12
image_annotations_pair = [x['image'], x['faces']['bbox'] for n, x in enumerate(ds) if n < batch_size]
然后使用为此修改的train_step。