Create DataGenerator from images

I have a dataset that consists of images saved as npy files and masks also saved as npy files.
I would like to train a UNet model on this dataset and to do so I created the following data generator using keras.utils.Sequence.

class CloudDataGen(tf.keras.utils.Sequence):

    def __init__(
            self,
            list_ids,
            batch_size,
            input_size=(512, 512),
            num_channels=3,
            shuffle=True,
            mode=None):

        self.list_ids = list_ids
        self.batch_size = batch_size
        self.input_size = input_size
        self.num_channels = num_channels
        self.shuffle = shuffle
        self.mode = mode
        self.on_epoch_end()

    def on_epoch_end(self):
        self.indexes = np.arange(len(self.list_ids))
        if self.shuffle:
            np.random.shuffle(self.indexes)

    def __len__(self):
        return int(np.floor(len(self.list_ids) / self.batch_size))

    def __data_generation(self, ids):
        x = np.empty((self.batch_size, *self.input_size, self.num_channels), dtype=int)
        y = np.empty((self.batch_size, *self.input_size, 1), dtype=int)

        for i, ID in enumerate(ids):

            if self.mode == 'train':
                image_dir = TRAIN_SOURCES + TRAIN_SOURCE_NAME + ID + '/image.npy'
            else:
                image_dir = TEST_SOURCES + TEST_SOURCE_NAME + ID + '/image.npy'
            curr = np.load(image_dir)
            x[i,] = curr.astype(int)
            if self.mode == 'train':
                img = TRAIN_LABELS + TRAIN_LABEL_NAME + ID + '/labels.npy'
            else:
                img = TEST_LABELS + TEST_LABEL_NAME + ID + '/labels.npy'
                
            y[i] = np.load(img)
           
        return x, y

    def __getitem__(self, index):
        indexes = self.indexes[index * self.batch_size:(index + 1) * self.batch_size]

        list_ids_current_batch = [self.list_ids[k] for k in indexes]

        x, y = self.__data_generation(list_ids_current_batch)

        return x, y

I then instantiate two generators, one for training and one for validation and invoke the fit method like this

unet_model.fit(train_generator,
             validation_data=validation_generator,
             epochs=NUM_EPOCHS,
             steps_per_epoch=STEPS
             )

Unfortunately on my MacBook Pro it seems that the program is stuck at the first step of the fit phase and nothing else happens. Does anyone know why it is not working correctly? How can I fix this problem? Thanks!

Hello @zoythum
Thank you for using TensorFlow,
tf.keras.utils.Sequence has been changed in Keras 3 and can be used as keras.utils.PyDataset class.That name is now deprecated.
Also another work around would be include a function which converts .npy files to any of jpg or png,
and then work on use them for training.
Thank You.