首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Keras-SegNet使用ImageDataGenerator和fit或fit_generator

Keras-SegNet使用ImageDataGenerator和fit或fit_generator
EN

Stack Overflow用户
提问于 2017-12-21 03:56:18
回答 1查看 1.3K关注 0票数 4

有关导入数据集的问题将使我发疯。

这是我的segnet代码的一部分。

我将重点讨论有关图像和掩码数据导入的问题。

代码语言:javascript
运行
复制
print("CNN Model created.")

###training data
data_gen_args = dict()
image_datagen = ImageDataGenerator(**data_gen_args)
mask_datagen = ImageDataGenerator(**data_gen_args)
seed1 = 1
image_datagen.fit(images, augment=True, seed=seed1)
mask_datagen.fit(masks, augment=True, seed=seed1)

train_image_generator = image_datagen.flow_from_directory(TRAIN_im,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None)
train_mask_generator = mask_datagen.flow_from_directory(TRAIN_mask,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None)

train_generator = zip(train_image_generator,train_mask_generator)

###validation data
valid_gen_args = dict()
val_image_datagen = ImageDataGenerator(**valid_gen_args)
val_mask_datagen = ImageDataGenerator(**valid_gen_args)
seed2 = 5
val_image_datagen.fit(val_images, augment=True, seed=seed2)
val_mask_datagen.fit(val_masks, augment=True, seed=seed2)

val_image_generator = val_image_datagen.flow_from_directory(VAL_im,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None)
val_mask_generator = val_mask_datagen.flow_from_directory(VAL_mask,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None)

val_generator = zip(val_image_generator,val_mask_generator)

###
model.fit_generator(
train_generator,steps_per_epoch=nb_train_samples//BATCH_SIZE,epochs=EPOCHS,validation_data=val_generator,validation_steps=nb_validation_samples//BATCH_SIZE)

我的问题是:

  1. 我将输入大小更改为500*500,因此调整了池和上样例层的大小。这能实现吗?此外,我是否可以制作经典的网络(比如AlexNet,VGG,Segnet.)接受任意输入图像大小,通过调整它们的池和上采样层的大小和过滤器的数目?
  2. 我想知道变量“图像”和“掩码”的数据类型是什么: Image_datagen.fit(图像,augment=True,seed=seed1) mask_datagen.fit(面具,augment=True,seed=seed1) 这部分来自Keras官方教程。(Ans:现在我知道它们都是numpy数组。)
  3. 根据上面的问题。我怎样才能得到它们? 我应该在下面编写一个类似于mnist.load_data()的函数吗? 我需要一些例子。 (x_train_image,y_train_label),(x_test_image,y_test_label) = mnist.load_data()
  4. 我使用这个函数 flow_from_directory 这是否意味着不需要自己定义像"mnist.load_data()“这样的函数,并且我可以使用它直接从目录结构中获取(批处理、洗牌)数据?

这是我的目录结构:

代码语言:javascript
运行
复制
Dataset -training----------images----"many images"
           |         |
           |         |-----mask-----"ground truth images(mask)" 
           |
           |
       validation----------val_images----"many images"
           |        |
           |        |------val_mask------"ground truth images(mask)" 
           |
           |
        testing---------------test images (no ground truth)

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-21 14:04:33

我们开始吧。

  1. SegNet是一个FCN (完全卷积网络->它不使用密集层),它与您指定的任何输入/输出大小一起工作。让我推荐在这些编解码结构中使用16的乘法器。为什么?因为在你的例子中,我们将从500到250到125到62,在另一边从62到124到248到496。突然你的决心就不一样了。AlexNet和VGG使用密集层。这意味着您可以更改初始输入大小,以满足您的需要,但您将无法使用来自不同分辨率的预先训练的权重。参数的数量根本不匹配。附带注意: VGG和AlexNet是分类体系结构,而SegNet是分段结构。
  2. imagesmasks是具有(num_imgs, width, height, num_channels)形状的四维numpy阵列.这些变量从何而来?您必须在前面的步骤中从它们各自的图像文件中读取它们。
  3. 您希望遍历这两个文件夹中的每一个,读取每个图像,将它们添加到列表中,一旦完成,就将此列表转换为numpy数组。确保图像和面具按照相同的方式排序,这样它们才能匹配对方。
  4. flow_from_directory是一个函数,可以与IDG一起使用,以便为您读取图像。非常方便。但是,如果您不需要featurewise_centerfeaturewise_std_normalizationzca_whitening,那么我们只需要绕过它,因为在本例中,您需要已经可用的numpy数组来执行IDG fit()函数。顺便说一句,这个fit函数与启动模型培训的fit()函数无关。它只是使用相同的命名约定。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47917729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档