数据增强图像数据生成器Keras语义分割

TSW

我正在对某些图像数据拟合全卷积网络,以使用Keras进行语义分割。但是,我遇到了一些过拟合的问题。我没有那么多数据,我想进行数据扩充。但是,由于我想按像素进行分类,因此我需要进行诸如翻转,旋转和平移之类的增强,以同时应用于特征图像和标签图像。理想情况下,我想使用Keras ImageDataGenerator进行即时转换。但是,据我所知,您不能同时对要素数据和标签数据进行等效转换。

有谁知道是否是这种情况,如果没有,是否有人有任何想法?否则,我将使用其他工具来创建更大的数据集,然后一次全部输入。

谢谢!

或Sharir

有一些关于扩展ImageDataGenerator的工作,以针对这些类型的案例提供更大的灵活性(有关示例,请参阅本期在Github上的案例)。

Additionally, as mentioned by Mikael Rousson in the comments, you can easily create your own version of ImageDataGenerator yourself, while leveraging many of its built-in functions to make it easier. Here is an example code I've used for an image denoising problem, where I use random crops + additive noise to generate clean and noisy image pairs on the fly. You could easily modify this to add other types of augmentations. After which, you can use Model.fit_generator to train using these methods.

from keras.preprocessing.image import load_img, img_to_array, list_pictures

def random_crop(image, crop_size):
    height, width = image.shape[1:]
    dy, dx = crop_size
    if width < dx or height < dy:
        return None
    x = np.random.randint(0, width - dx + 1)
    y = np.random.randint(0, height - dy + 1)
    return image[:, y:(y+dy), x:(x+dx)]

def image_generator(list_of_files, crop_size, to_grayscale=True, scale=1, shift=0):
    while True:
        filename = np.random.choice(list_of_files)
        try:
            img = img_to_array(load_img(filename, to_grayscale))
        except:
            return
        cropped_img = random_crop(img, crop_size)
        if cropped_img is None:
            continue
        yield scale * cropped_img - shift
def corrupted_training_pair(images, sigma):
    for img in images:
        target = img
        if sigma > 0:
            source = img + np.random.normal(0, sigma, img.shape)/255.0
        else:
            source = img
        yield (source, target)
def group_by_batch(dataset, batch_size):
    while True:
        try:
            sources, targets = zip(*[next(dataset) for i in xrange(batch_size)])
            batch = (np.stack(sources), np.stack(targets))
            yield batch
        except:
            return
def load_dataset(directory, crop_size, sigma, batch_size):
    files = list_pictures(directory)
    generator = image_generator(files, crop_size, scale=1/255.0, shift=0.5)
    generator = corrupted_training_pair(generator, sigma)
    generator = group_by_batch(generator, batch_size)
    return generator

You can then use the above like so:

train_set = load_dataset('images/train', (patch_height, patch_width), noise_sigma, batch_size)
val_set = load_dataset('images/val', (patch_height, patch_width), noise_sigma, batch_size)
model.fit_generator(train_set, samples_per_epoch=batch_size * 1000, nb_epoch=nb_epoch, validation_data=val_set, nb_val_samples=1000)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数据增强图像数据生成器Keras语义分割

来自分类Dev

仅适用于特定文件夹的图像数据生成器增强参数 (Keras)

来自分类Dev

使用图像数据生成器评估keras模型

来自分类Dev

Keras数据生成器预测相同数量的值

来自分类Dev

生成器插件不呈现数据

来自分类Dev

如何提高数据生成器的效率?

来自分类Dev

将Keras生成器转换为Tensorflow数据集以训练Resnet50

来自分类Dev

随机图像生成器

来自分类Dev

图像悬停生成器

来自分类Dev

将验证数据传递给Keras Sequential中的.fit时无法识别生成器

来自分类Dev

使用自定义Keras数据生成器和损失函数时,地面真相标签的形状(无,无)

来自分类Dev

数据管理/ CRUD生成器AngularJS

来自分类Dev

联接以在查询生成器laravel中显示特殊数据

来自分类Dev

scalacheck案例类随机数据生成器

来自分类Dev

在Quickcheck中组合不同数据类型的生成器

来自分类Dev

使用生成器输入数据集,但得到IndexError

来自分类Dev

有数据支持的静态站点生成器?

来自分类Dev

Tensorflow输入生成器用完了数据

来自分类Dev

数据库中的IFNULL:查询生成器Laravel?

来自分类Dev

使用生成器理解来创建数据帧

来自分类Dev

随机样本数据集生成器

来自分类Dev

实现生成器以填充数据库

来自分类Dev

HTML / PHP中的数据URI自动生成器

来自分类Dev

报告生成器3.0与Oracle数据库的连接

来自分类Dev

cakephp3.0查询生成器检索数据

来自分类Dev

mybatis无法使用Oracle数据库生成器

来自分类Dev

数据库设计-表单生成器

来自分类Dev

MySQL使用Ruby与名称生成器更新数据

来自分类Dev

GNS3和数据包生成器