Skip to content

Commit

Permalink
pytest general test speed-up (#211)
Browse files Browse the repository at this point in the history
* initial commit, restoration re-denoising test removed

* removed the commented out lines

* regression subpackage tests are improved

* using smaller input data where possible

* black fixes

* to keep changes

* aydin.it.test_fgr.py addressed

* black fix
  • Loading branch information
AhmetCanSolak committed Jul 15, 2022
1 parent 035fe0e commit 28e8562
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 116 deletions.
2 changes: 1 addition & 1 deletion aydin/it/classic_denoisers/test/test_bilateral.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

def est_bilateral():
# TODO: bilateral filter in scikit image seems broken
assert demo_bilateral(cropped_newyork(), display=False) >= 0.40 - 0.1
assert demo_bilateral(cropped_newyork(crop_amount=384), display=False) >= 0.40 - 0.1


def test_bilateral_nd():
Expand Down
4 changes: 3 additions & 1 deletion aydin/it/classic_denoisers/test/test_butterworth.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@


def test_butterworth():
ssim_denoised, parameters = demo_butterworth(cropped_newyork(), display=False)
ssim_denoised, parameters = demo_butterworth(
cropped_newyork(crop_amount=384), display=False
)
assert ssim_denoised >= 0.608 - 0.035


Expand Down
4 changes: 3 additions & 1 deletion aydin/it/classic_denoisers/test/test_gaussian.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@


def test_gaussian():
assert demo_gaussian(cropped_newyork(), display=False) >= 0.600 - 0.02
assert (
demo_gaussian(cropped_newyork(crop_amount=384), display=False) >= 0.600 - 0.02
)


def test_gaussian_nd():
Expand Down
2 changes: 1 addition & 1 deletion aydin/it/classic_denoisers/test/test_gm.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@


def test_gm():
assert demo_gm(cropped_newyork(), display=False) >= 0.610 - 0.03
assert demo_gm(cropped_newyork(crop_amount=384), display=False) >= 0.610 - 0.03


def test_gm_nd():
Expand Down
4 changes: 3 additions & 1 deletion aydin/it/classic_denoisers/test/test_lipschitz.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@


def test_lipschitz():
assert demo_lipschitz(cropped_newyork(), display=False) >= 0.50 - 0.02
assert (
demo_lipschitz(cropped_newyork(crop_amount=384), display=False) >= 0.50 - 0.02
)


def test_lipschitz_nd():
Expand Down
69 changes: 17 additions & 52 deletions aydin/it/test/test_fgr.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,54 +20,61 @@
@pytest.mark.heavy
def test_it_fgr_linear():
regressor = LinearRegressor()
do_it_fgr_with_self_supervised(regressor, min_psnr=18, min_ssim=0.65)
do_it_fgr(regressor, min_psnr=18, min_ssim=0.65)


def test_it_fgr_rf():
regressor = RandomForestRegressor(max_num_estimators=128)
do_it_fgr_with_self_supervised(regressor, min_ssim=0.75)
do_it_fgr(regressor, min_ssim=0.75)


@pytest.mark.heavy
def test_it_fgr_svr():
regressor = SupportVectorRegressor()
do_it_fgr_with_self_supervised(regressor, min_psnr=22, min_ssim=0.71)
do_it_fgr(regressor, min_psnr=22, min_ssim=0.71)


def test_it_fgr_lgbm():
regressor = LGBMRegressor(max_num_estimators=256)
do_it_fgr_with_self_supervised(regressor, min_ssim=0.77)
do_it_fgr(regressor, min_ssim=0.77)


@pytest.mark.heavy
def test_it_fgr_nn():
regressor = PerceptronRegressor(max_epochs=64)
do_it_fgr_with_self_supervised(regressor, min_ssim=0.70)
do_it_fgr(regressor, min_ssim=0.70)


@pytest.mark.heavy # we skip this as we run same for saveload
def test_it_fgr_cb():
regressor = CBRegressor(max_num_estimators=256, min_num_estimators=64)
do_it_fgr_with_self_supervised(regressor, min_ssim=0.779)
do_it_fgr(regressor, min_ssim=0.779)


def test_it_fgr_cb_supervised():
regressor = CBRegressor(max_num_estimators=256, min_num_estimators=64)
do_it_fgr_with_supervised(regressor, min_ssim=0.77)
do_it_fgr(regressor, min_ssim=0.77, supervised=True)


def do_it_fgr_with_self_supervised(regressor, min_psnr=22, min_ssim=0.75):
def do_it_fgr(regressor, min_psnr=22, min_ssim=0.75, supervised=False):
"""
Test for self-supervised denoising using camera image with synthetic noise
"""

image = normalise(camera().astype(numpy.float32))
noisy = add_noise(image)

generator = StandardFeatureGenerator(max_level=5, include_spatial_features=True)
if supervised:
generator = StandardFeatureGenerator(include_spatial_features=False)
else:
generator = StandardFeatureGenerator(max_level=5, include_spatial_features=True)
it = ImageTranslatorFGR(feature_generator=generator, regressor=regressor)

start = time.time()
it.train(noisy, noisy)
if supervised:
it.train(noisy, image)
else:
it.train(noisy, noisy)
stop = time.time()
print(f"####### Training: elapsed time: {stop - start} sec")

Expand All @@ -94,45 +101,3 @@ def do_it_fgr_with_self_supervised(regressor, min_psnr=22, min_ssim=0.75):
# do not change the number below, but instead, fix the problem -- most likely a parameter.

assert psnr_denoised > min_psnr and ssim_denoised > min_ssim


def do_it_fgr_with_supervised(regressor, min_psnr=23, min_ssim=0.74):
"""
Test for self-supervised denoising using camera image with synthetic noise
"""

image = normalise(camera().astype(numpy.float32))
noisy = add_noise(image)

generator = StandardFeatureGenerator(include_spatial_features=False)
it = ImageTranslatorFGR(feature_generator=generator, regressor=regressor)

start = time.time()
it.train(noisy, image)
stop = time.time()
print(f"####### Training: elapsed time: {stop - start} sec")

start = time.time()
denoised = it.translate(noisy)
stop = time.time()
print(f"####### Inference: elapsed time: {stop - start} sec")

image = numpy.clip(image, 0, 1)
noisy = numpy.clip(noisy, 0, 1)
denoised = numpy.clip(denoised, 0, 1)

psnr_noisy = psnr(noisy, image)
ssim_noisy = ssim(noisy, image)
print("noisy", psnr_noisy, ssim_noisy)

psnr_denoised = psnr(denoised, image)
ssim_denoised = ssim(denoised, image)
print("denoised", psnr_denoised, ssim_denoised)

assert psnr_denoised > psnr_noisy and ssim_denoised > ssim_noisy
assert psnr_denoised > psnr_noisy and ssim_denoised > ssim_noisy

# if the line below fails, then the parameters of the image the regressor have been broken.
# do not change the number below, but instead, fix the problem -- most likely a parameter.

assert psnr_denoised > min_psnr and ssim_denoised > min_ssim
57 changes: 29 additions & 28 deletions aydin/regression/test/test_regressors.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import time
from os.path import join
import numpy
import pytest
from skimage.data import camera
from skimage.metrics import peak_signal_noise_ratio as psnr
from skimage.metrics import structural_similarity as ssim
Expand All @@ -17,51 +18,51 @@
from aydin.regression.support_vector import SupportVectorRegressor


def test_linear_regressor():
regressor = LinearRegressor()
with_regressor(regressor, min_ssim=0.6)
@pytest.fixture(scope="session")
def data():
image = camera()[:256, :256].astype(numpy.float32)
image = normalise(image)
noisy = add_noise(image)

# feature generator requires images in 'standard' form: BCTZYX
noisy = noisy[numpy.newaxis, numpy.newaxis, ...]

def test_rf_regressor():
regressor = RandomForestRegressor()
with_regressor(regressor, min_ssim=0.6)
generator = StandardFeatureGenerator(max_level=6)

features = generator.compute(noisy, exclude_center_value=True)

def test_svr_regressor():
regressor = SupportVectorRegressor()
with_regressor(regressor, min_ssim=0.65)
x = features.reshape(-1, features.shape[-1])
y = noisy.reshape(-1)

return image, noisy, x, y

def test_lgbm_regressor():
regressor = LGBMRegressor(max_num_estimators=600)
with_regressor(regressor, min_ssim=0.75)

def test_linear_regressor(data):
with_regressor(data, LinearRegressor(), min_ssim=0.6)

def test_cb_regressor():
regressor = CBRegressor(max_num_estimators=600)
with_regressor(regressor, min_ssim=0.75)

def test_rf_regressor(data):
with_regressor(data, RandomForestRegressor(), min_ssim=0.6)

def test_nn_regressor():
regressor = PerceptronRegressor(max_epochs=6, depth=6)
with_regressor(regressor, min_ssim=0.64)

def test_svr_regressor(data):
with_regressor(data, SupportVectorRegressor(), min_ssim=0.65)

def with_regressor(regressor, min_ssim=0.8):

image = camera().astype(numpy.float32)
image = normalise(image)
noisy = add_noise(image)
def test_lgbm_regressor(data):
with_regressor(data, LGBMRegressor(max_num_estimators=600), min_ssim=0.75)

# feature generator requires images in 'standard' form: BCTZYX
noisy = noisy[numpy.newaxis, numpy.newaxis, ...]

generator = StandardFeatureGenerator(max_level=6)
def test_cb_regressor(data):
with_regressor(data, CBRegressor(max_num_estimators=600), min_ssim=0.75)

features = generator.compute(noisy, exclude_center_value=True)

x = features.reshape(-1, features.shape[-1])
y = noisy.reshape(-1)
def test_nn_regressor(data):
with_regressor(data, PerceptronRegressor(max_epochs=6, depth=6), min_ssim=0.64)


def with_regressor(data, regressor, min_ssim=0.8):
image, noisy, x, y = data

regressor.fit(x, y)

Expand Down
29 changes: 0 additions & 29 deletions aydin/restoration/denoise/test/test_n2s_fgr.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,5 @@
from pprint import pprint

import numpy as np
from skimage.data import camera
from skimage.exposure import rescale_intensity
from skimage.metrics import peak_signal_noise_ratio as psnr
from skimage.metrics import structural_similarity as ssim

from aydin.io.datasets import add_noise
from aydin.it.transforms.padding import PaddingTransform
from aydin.it.transforms.range import RangeTransform
from aydin.restoration.denoise.noise2selffgr import Noise2SelfFGR


Expand All @@ -22,23 +13,3 @@ def test_configure():

implementations_description = Noise2SelfFGR().implementations_description
pprint(implementations_description)


def test_run_n2s_fgr():
# Prepare the noisy classic_denoisers camera image
image = camera().astype(np.float32)
image = rescale_intensity(image, in_range='image', out_range=(0, 1))
noisy_image = add_noise(image)

# Call the Noise2Self restoration
transforms = [
{"class": RangeTransform, "kwargs": {}},
{"class": PaddingTransform, "kwargs": {}},
]
n2s = Noise2SelfFGR(variant="cb", it_transforms=transforms)
n2s.train(noisy_image)
denoised_image = n2s.denoise(noisy_image).clip(0, 1)

# Check if denoised image satisfies some checks
assert psnr(denoised_image, image) >= 20.0
assert ssim(denoised_image, image) >= 0.7
24 changes: 22 additions & 2 deletions aydin/restoration/denoise/test/test_saveload.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,31 @@
from aydin import Classic
from aydin.io.datasets import normalise, add_noise
from aydin.io.folders import get_temp_folder
from aydin.it.transforms.padding import PaddingTransform
from aydin.it.transforms.range import RangeTransform
from aydin.restoration.denoise.noise2selffgr import Noise2SelfFGR


transforms = [
{"class": RangeTransform, "kwargs": {}},
{"class": PaddingTransform, "kwargs": {}},
]


def test_saveload_classic_gaussian():
saveload(Classic(variant="gaussian"), min_psnr=19, min_ssim=0.61)
saveload(
Classic(variant="gaussian", it_transforms=transforms),
min_psnr=19,
min_ssim=0.61,
)


def test_saveload_noise2selffgr():
saveload(Noise2SelfFGR(), min_psnr=20, min_ssim=0.78)
saveload(
Noise2SelfFGR(variant="cb", it_transforms=transforms),
min_psnr=20,
min_ssim=0.78,
)


def saveload(denoiser, min_psnr=22, min_ssim=0.75):
Expand Down Expand Up @@ -48,6 +64,10 @@ def saveload(denoiser, min_psnr=22, min_ssim=0.75):
ssim_denoised = ssim(denoised, image)
print("denoised", psnr_denoised, ssim_denoised)

# Check if denoised image satisfies some checks
assert psnr_denoised >= 20.0
assert ssim_denoised >= 0.7

assert psnr_denoised > psnr_noisy and ssim_denoised > ssim_noisy
assert psnr_denoised > psnr_noisy and ssim_denoised > ssim_noisy

Expand Down

0 comments on commit 28e8562

Please sign in to comment.