Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将ImageDataGenerator与.npy格式的4D以上图像一起用于图像分割_Python_Image_Numpy_Tensorflow_Keras - Fatal编程技术网

Python 将ImageDataGenerator与.npy格式的4D以上图像一起用于图像分割

Python 将ImageDataGenerator与.npy格式的4D以上图像一起用于图像分割,python,image,numpy,tensorflow,keras,Python,Image,Numpy,Tensorflow,Keras,我在Keras和TF是新手,但我有一个独特的问题。我正在训练一个分段网络,它从不同的目录中读取我的训练数据和掩码。我现在正在训练RGBA图像,但作为下一步,我需要堆叠其中的几个图像,这将导致枕头无法处理10多个通道。此外,我的数据太大,无法放入内存中,因此我需要“从目录流动”功能 我使用了下面的RGBA训练样本和RGB蒙版 def trainGenerator(batch_size,train_path,image_folder,mask_folder,aug_dict,image_color_

我在Keras和TF是新手,但我有一个独特的问题。我正在训练一个分段网络,它从不同的目录中读取我的训练数据和掩码。我现在正在训练RGBA图像,但作为下一步,我需要堆叠其中的几个图像,这将导致枕头无法处理10多个通道。此外,我的数据太大,无法放入内存中,因此我需要“从目录流动”功能

我使用了下面的RGBA训练样本和RGB蒙版

def trainGenerator(batch_size,train_path,image_folder,mask_folder,aug_dict,image_color_mode = "rgba",
                    mask_color_mode = "grayscale",image_save_prefix  = "image",mask_save_prefix  = "mask",
                    flag_multi_class = False,num_class = 2,save_to_dir = None,target_size = (256,256),seed = 1):
    
    image_datagen = ImageDataGenerator(**aug_dict)
    mask_datagen = ImageDataGenerator(**aug_dict)
    image_generator = image_datagen.flow_from_directory(
        train_path,
        classes = [image_folder],
        class_mode = None,
        color_mode = image_color_mode,
        target_size = target_size,
        batch_size = batch_size,
        save_to_dir = save_to_dir,
        save_prefix  = image_save_prefix,
        seed = seed)
    mask_generator = mask_datagen.flow_from_directory(
        train_path,
        classes = [mask_folder],
        class_mode = None,
        color_mode = mask_color_mode,
        target_size = target_size,
        batch_size = batch_size,
        save_to_dir = save_to_dir,
        save_prefix  = mask_save_prefix,
        seed = seed)
    train_generator = zip(image_generator, mask_generator)
    for (img,mask) in train_generator:
        img,mask = adjustData(img,mask,flag_multi_class,num_class)
        yield (img,mask)
adjustData功能只对掩码进行一次热编码-因此这并不相关

但现在我正在尝试以下方法:

def npyTrainGenerator(image_path,mask_path,flag_multi_class = False,num_class = 2,image_prefix = "image",mask_prefix = "mask",image_as_gray = False,mask_as_gray = True):
    image_name_arr = glob.glob(os.path.join(image_path,"%s*.npy"%image_prefix))
    image_arr = []
    mask_arr = []
    for index,item in enumerate(image_name_arr):
        img = np.load(item)
        mask = io.imread(item.replace(image_path,mask_path).replace(image_prefix,mask_prefix),as_gray = mask_as_gray) 
        img,mask = adjustData(img,mask,flag_multi_class,num_class)
        image_arr.append(img)
        mask_arr.append(mask)
    image_arr = np.array(image_arr)
    mask_arr = np.array(mask_arr)
    return image_arr,mask_arr
问题有两个:我无法分配批次。对于模型来说,每批获取一个(数据、掩码)并不是最优的。此外,上面的函数将形成一个巨大的数组,并将所有的数据存储在内存中。我希望每批获得n*(256,256,10),其中n是批大小,256和256是我的训练数据的宽度和高度,10是通道数-类似于来自\u目录的flow\u的功能。此外,我需要一个类似“种子”的行为来根据面具将它们对齐

我的面具是普通的RGB,所以没问题

我应该指出,我的输入数据的维度是固定的,我不需要任何扩充

有没有一种方法可以在不编辑Keras的实际ImageDataGenerator和迭代器类的情况下实现这一点,因为S.O.上的一些答案指出了这一点

任何指导都将不胜感激。谢谢