Python 将ImageDataGenerator与.npy格式的4D以上图像一起用于图像分割
我在Keras和TF是新手,但我有一个独特的问题。我正在训练一个分段网络,它从不同的目录中读取我的训练数据和掩码。我现在正在训练RGBA图像,但作为下一步,我需要堆叠其中的几个图像,这将导致枕头无法处理10多个通道。此外,我的数据太大,无法放入内存中,因此我需要“从目录流动”功能 我使用了下面的RGBA训练样本和RGB蒙版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_
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.上的一些答案指出了这一点
任何指导都将不胜感激。谢谢