예제 #1
0
def test_generators_shift_in_flow(ct_path):
    ct_array, meta = load_ct.load_ct(ct_path)
    batch = np.expand_dims(np.expand_dims(ct_array[45:90], 0), 0)
    dg = generators.DataGenerator(shift_range=[.1, .4, .4],
                                  data_format='channels_first')
    augmented = next(dg.flow(batch, batch_size=1, seed=21))
    assert len(augmented.shape) == 5
    assert augmented.shape == batch.shape
    np.random.seed(21)
    shifted = generators.random_shift(batch[0], (.1, .4, .4))
    assert not np.abs(shifted - augmented).sum()
예제 #2
0
    def set_params(self):
        self.clip_lower = -1000
        self.clip_upper = 400

        self.train_data_generator = generators.DataGenerator(
            rotation_range=20,
            shift_range=.1,
            zoom_lower=.8,
            zoom_upper=1.2,
            zoom_independent=False,
            fill_mode='nearest',
            preprocessing_function=None)
        self.test_data_generator = generators.DataGenerator()

        if self.data_format is None:
            self.data_format = keras.backend.image_data_format()
        if self.data_format == 'channels_last':
            self.channel_axis = 4
        elif self.data_format == 'channel_first':
            self.channel_axis = 1
        else:
            raise ValueError(
                "The `data_format` should lie in {None, 'channels_last', 'channels_first'}."
            )
예제 #3
0
def test_generators_zoom_in_flow(ct_path):
    ct_array, meta = load_ct.load_ct(ct_path)
    batch = np.expand_dims(np.expand_dims(ct_array[45:90], 0), 0)
    dg = generators.DataGenerator(zoom_lower=[1, .8, .8],
                                  zoom_upper=[1, 1.2, 1.2],
                                  zoom_independent=True,
                                  data_format='channels_first')
    augmented = next(dg.flow(batch, batch_size=1, seed=21))
    assert len(augmented.shape) == 5
    assert augmented.shape == batch.shape
    np.random.seed(21)
    zoomed = generators.random_zoom(batch[0],
                                    zoom_lower=[1, .8, .8],
                                    zoom_upper=[1, 1.2, 1.2],
                                    independent=True)
    assert not np.abs(zoomed - augmented).sum()
예제 #4
0
def test_generators_standardization(ct_path):
    ct_array, meta = load_ct.load_ct(ct_path)
    batch = np.expand_dims(np.expand_dims(ct_array[45:90], 0), 0)
    dg = generators.DataGenerator(featurewise_center=True,
                                  featurewise_std_normalization=True,
                                  samplewise_center=True,
                                  samplewise_std_normalization=True)
    with warnings.catch_warnings():
        warnings.filterwarnings('error')
        try:
            next(dg.flow(batch, batch_size=1))
        except Warning as w:
            assert "Fit it first by calling `.fit(numpy_data)`" in str(w)
    dg.fit(batch)
    normalized = next(dg.flow(batch, batch_size=1))
    assert len(normalized.shape) == 5
    assert normalized.shape == batch.shape
예제 #5
0
def test_generators_save_to_dir(ct_path, tmpdir):
    ct_array, meta = load_ct.load_ct(ct_path)
    batch = np.expand_dims(np.expand_dims(ct_array[45:90], 0), 0)
    dg = generators.DataGenerator()
    np.random.seed(1)
    save_prefix = 'test'
    fname = '{prefix}_{index}_{hash}.{format}'.format(
        prefix=save_prefix, index=0, hash=np.random.randint(1e4), format='npy')
    fname = str(tmpdir.mkdir("processed").join(fname))
    batch = next(
        dg.flow(batch,
                seed=1,
                batch_size=1,
                save_to_dir=os.path.dirname(fname),
                save_prefix=save_prefix))
    saved = np.load(fname)
    assert len(saved.shape) == 4
    assert saved.shape == batch[0].shape
    assert not np.abs(saved - batch[0]).sum()