def test_movie_data_generator_fit(self): generator = image_generators.MovieDataGenerator( featurewise_center=True, samplewise_center=True, featurewise_std_normalization=True, samplewise_std_normalization=True, zca_whitening=True, data_format='channels_last') # Test grayscale x = np.random.random((8, 5, 10, 10, 1)) generator.fit(x) # Test RBG x = np.random.random((8, 5, 10, 10, 3)) generator.fit(x) generator = image_generators.MovieDataGenerator( featurewise_center=True, samplewise_center=True, featurewise_std_normalization=True, samplewise_std_normalization=True, zca_whitening=False, data_format='channels_first') # Test grayscale x = np.random.random((8, 1, 5, 4, 6)) generator.fit(x) # Test RBG x = np.random.random((8, 3, 5, 4, 6)) generator.fit(x)
def test_movie_data_generator_invalid_data(self): generator = image_generators.MovieDataGenerator( featurewise_center=True, samplewise_center=True, featurewise_std_normalization=True, samplewise_std_normalization=True, zca_whitening=True, data_format='channels_last') # Test fit with invalid data with self.assertRaises(ValueError): x = np.random.random((3, 10, 10)) generator.fit(x) # Test flow with invalid dimensions with self.assertRaises(ValueError): train_dict = { 'X': np.random.random((32, 10, 10, 1)), 'y': np.random.random((32, 10, 10, 1)) } generator.flow(train_dict) # Test flow with non-matching batches with self.assertRaises(Exception): train_dict = { 'X': np.random.random((32, 30, 10, 10, 1)), 'y': np.random.random((25, 30, 10, 10, 1)) } generator.flow(train_dict) # Test flow with bigger frames_per_batch than frames with self.assertRaises(Exception): train_dict = { 'X': np.random.random((32, 30, 10, 10, 1)), 'y': np.random.random((32, 30, 10, 10, 1)) } generator.flow(train_dict, frames_per_batch=31) # Invalid number of channels: will work but raise a warning x = np.random.random((32, 30, 10, 10, 5)) y = np.random.random((32, 30, 10, 10, 1)) generator.flow({'X': x, 'y': y}) with self.assertRaises(ValueError): generator = image_generators.MovieDataGenerator( data_format='unknown') generator = image_generators.MovieDataGenerator(zoom_range=(2, 2)) with self.assertRaises(ValueError): generator = image_generators.MovieDataGenerator(zoom_range=(2, 2, 2))
def test_movie_data_generator(self): frames = 7 for test_images in _generate_test_images(): img_list = [] for im in test_images: frame_list = [] for _ in range(frames): frame_list.append(img_to_array(im)[None, ...]) img_stack = np.vstack(frame_list) img_list.append(img_stack) images = np.vstack(img_list) batches = images.shape[0] // frames images = np.reshape(images, (batches, frames, *images.shape[1:])) generator = image_generators.MovieDataGenerator( featurewise_center=True, samplewise_center=True, featurewise_std_normalization=True, samplewise_std_normalization=True, zca_whitening=False, rotation_range=90., width_shift_range=0.1, height_shift_range=0.1, shear_range=0.5, zoom_range=0.2, channel_shift_range=1., brightness_range=(1, 5), fill_mode='nearest', cval=0.5, horizontal_flip=True, vertical_flip=True) # Basic test before fit train_dict = { 'X': np.random.random((8, 11, 10, 10, 3)), 'y': np.random.random((8, 11, 10, 10, 1)), } generator.flow(train_dict, frames_per_batch=1) # Temp dir to save generated images temp_dir = self.get_temp_dir() # Fit generator.fit(images, augment=True, seed=1) y_shape = tuple(list(images.shape)[:-1] + [1]) train_dict['X'] = images train_dict['y'] = np.random.random(y_shape) frames_per_batch = 5 for x, y in generator.flow(train_dict, shuffle=True, save_to_dir=temp_dir, skip=1, frames_per_batch=frames_per_batch): batch_x_shape = (frames_per_batch, *images.shape[2:]) batch_y_shape = (frames_per_batch, *y_shape[2:]) self.assertEqual(x.shape[1:], batch_x_shape) self.assertEqual(len(y), 2) self.assertEqual(y[0].shape[1:], batch_y_shape) self.assertEqual(y[-1].shape[1:], batch_y_shape) break
def test_batch_standardize(self): # MovieDataGenerator.standardize should work on batches frames = 3 for test_images in _generate_test_images(): img_list = [] for im in test_images: frame_list = [] for _ in range(frames): frame_list.append(img_to_array(im)[None, ...]) img_stack = np.vstack(frame_list) img_list.append(img_stack) images = np.vstack(img_list) batches = images.shape[0] // frames images = np.reshape(images, (batches, frames, *images.shape[1:])) generator = image_generators.MovieDataGenerator( featurewise_center=True, samplewise_center=True, featurewise_std_normalization=True, samplewise_std_normalization=True, zca_whitening=False, rescale=2, preprocessing_function=lambda x: x, rotation_range=90., width_shift_range=0.1, height_shift_range=0.1, shear_range=0.5, zoom_range=0.2, channel_shift_range=0., brightness_range=(1, 5), fill_mode='nearest', cval=0.5, horizontal_flip=True, vertical_flip=True) generator.fit(images, augment=True) transformed = np.copy(images) for i, im in enumerate(transformed): transformed[i] = generator.random_transform(im, seed=1) transformed = generator.standardize(transformed)