ImageDataGenerator用于语义分割

10

我正在尝试使用Keras进行语义分割,但在尝试使用flow_from_directory方法加载图像时出现了以下错误。

Found 0 images belonging to 0 classes.
Found 0 images belonging to 0 classes.

这是我的代码。

from tensorflow.keras.applications.resnet50 import preprocess_input
from tensorflow.keras.preprocessing.image import ImageDataGenerator

data_generator = ImageDataGenerator()
train_generator = data_generator.flow_from_directory(
                                        directory="../input/Training_dataset/Images",
                                        target_size=(IMG_SIZE, IMG_SIZE),
                                        batch_size=16,
                                        class_mode=None,
                                        classes=None
                                        )

mask_generator = data_generator.flow_from_directory(
    directory="../input/Training_dataset/Masks/all",
    class_mode=None,
    classes=None,
    batch_size = 1,
    )

我已阅读此问题,但解决方案无效Keras语义分割,flow_from_directory()错误

1个回答

23

你需要将图片放在一个子文件夹中,例如在图像和掩码目录下创建一个名为“img”的文件夹。

-- image
   -- img
      -- 1.jpg
      -- 2.jpg
-- mask
   -- img
      -- 1.png
      -- 2.png

数据生成器应该像这样:

seed = 909 # (IMPORTANT) to transform image and corresponding mask with same augmentation parameter.
image_datagen = ImageDataGenerator(width_shift_range=0.1,
                 height_shift_range=0.1,
                 preprocessing_function = image_preprocessing) # custom fuction for each image you can use resnet one too.
mask_datagen = ImageDataGenerator(width_shift_range=0.1,
                 height_shift_range=0.1,
                 preprocessing_function = mask_preprocessing)  # to make mask as feedable formate (256,256,1)

image_generator =image_datagen.flow_from_directory("dataset/image/",
                                                    class_mode=None, seed=seed)

mask_generator = mask_datagen.flow_from_directory("dataset/mask/",
                                                   class_mode=None, seed=seed)

train_generator = zip(image_generator, mask_generator)

如果您想为语义分割模型创建自定义的数据生成器以更好地控制数据集,您可以查看我的 Kaggle 内核,我在其中使用了 CamVid 数据集来训练 UNET 模型。

https://www.kaggle.com/mukulkr/camvid-segmentation-using-unet

如果您需要更好的增强函数,可以查看这个很棒的 GitHub 仓库 - https://github.com/mdbloice/Augmentor


那个针对图像的操作是有效的,但尝试去拟合模型时出现了错误“AttributeError: 'zip' object has no attribute 'shape'”。无论如何感谢你提供的内核。 - Jaime Cuellar
我有相同的目录结构。但是我的图像名称是“img(1)。png”,而掩模名称是“img(1)_mask.png”……这样可以吗? - user836026
不,它应该与原始图像名称相同。 - Mukul
运行代码行“train_generator = zip(image_generator, mask_generator)”后,即使只使用4张图片,内存也会完全填满。这一行的问题出在哪里? - hirschme
另外,shuffle不应该设置为False吗?(默认值为True)因为当我们压缩这两个生成器时,它不会在图像和掩码之间创建不匹配的情况吗?编辑-> 不是。根据文档-->种子是“用于洗牌和转换的可选随机种子。”所以这应该可以解决这个问题。 - varungupta
显示剩余3条评论

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