如何在Tensorflow数据集中增强数据?

3
对于一组图像,我对数据增广这个术语的含义感到困惑,是指转换当前数据集(例如裁剪/翻转/旋转/...)还是添加裁剪/翻转/旋转后的图像以增加初始数据集的数量。据我所知,从这个问题和这个问题中,它同时意味着这两者。如果我有误,请纠正我。
因此,我想使用Tensorflow Dataset实现第二种情况:增加数据量。
我正在使用来自TFDS的ImageNet数据(训练集不可用):
import tensorflow_datasets as tfds
ds = tfds.load('imagenet_a', split='test', as_supervised=True)

我想把图像翻转:

def transform(image, label):
    image = tf.image.flip_left_right(image)
    return image, label

如果我直接将转换应用到数据集上,它可以很好地工作。但是它不会增加数据的数量:

ds = ds.map(transform)

因此,我尝试创建第二个数据集并将其连接起来:

ds0 = ds.map(transform)
ds = ds.concatenate(ds0)

但我遇到了以下错误:

TypeError: Two datasets to concatenate have different types (tf.uint8, tf.int64) and (tf.float32, tf.int64)

将两个数据集连接起来以增加训练集是可行的吗?如何正确地操作?(或如何修复我的错误)

我知道ImageDataGenerator,但它不包含我想要的转换。


我不确定,但也许这篇文章会有所帮助。 - Jose Manuel Cuevas Muñoz
1个回答

1
正如错误清楚地表明的那样,两个数据集应该具有相同的数据类型,您可以使用tf.cast来实现这一点,但对于大型数据集来说这是一个有点繁琐的过程。您也可以使用tf.data.experimental.sample_from_datasets合并数据集。以下是带有说明的代码。
import tensorflow_datasets as tfds
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing.image import img_to_array, array_to_img
ds , info = tfds.load('imagenet_a', split='test', as_supervised=True,with_info=True)

原始示例图像:

vis = tfds.visualization.show_examples(ds, info)

enter image description here

我正在取10张图片进行测试,并使用map()函数随机翻转这10张图片,以创建一个新的数据集。
ds1 = ds.take(10)
ds2 = ds1.map(lambda image, label: (tf.image.random_flip_left_right(image), label))
#Merging both the datasets

new_ds = tf.data.experimental.sample_from_datasets([ds1,ds2])
print(len(list(new_ds))) # Which returns 20, 10 original plus 10 randomly filpped images. 

f, axarr = plt.subplots(5,4,figsize=(15, 15))

ix = 0
i = 0
count = 0
k = 0

for images, labels in new_ds:
  crop_img = array_to_img(images)
  axarr[i,ix].imshow(crop_img)
  ix=ix+1
  count = count + 1
  if count == 4:
     i = i + 1
     count = 0
     ix = 0

合并数据集:

您可以查看包含原始图像和随机翻转图像的合并数据。enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接