From 2ebdd357349fbee93169a03072563905e4629e4f Mon Sep 17 00:00:00 2001 From: Yannick DAYER <yannick.dayer@idiap.ch> Date: Thu, 17 Feb 2022 22:17:46 +0100 Subject: [PATCH] Multi-scores tests, references regen on latest ver --- bob/bio/gmm/algorithm/GMM.py | 29 ++++++--------- bob/bio/gmm/test/data/gmm_enrolled.hdf5 | Bin 12920 -> 12920 bytes bob/bio/gmm/test/data/gmm_projected.hdf5 | Bin 10608 -> 10608 bytes bob/bio/gmm/test/data/gmm_ubm.hdf5 | Bin 12920 -> 12920 bytes bob/bio/gmm/test/test_gmm.py | 45 ++++++++++++++++------- 5 files changed, 44 insertions(+), 30 deletions(-) diff --git a/bob/bio/gmm/algorithm/GMM.py b/bob/bio/gmm/algorithm/GMM.py index 672ed23..3d9d23e 100644 --- a/bob/bio/gmm/algorithm/GMM.py +++ b/bob/bio/gmm/algorithm/GMM.py @@ -230,9 +230,8 @@ class GMM(BioAlgorithm, BaseEstimator): logger.debug(f"scoring {biometric_reference}, {probe}") if not isinstance(probe, GMMStats): - probe = self.project( - probe - ) # Projection is done here instead of transform (or it would be applied to enrollment data too...) + # Projection is done here instead of in transform (or it would be applied to enrollment data too...) + probe = self.project(probe) return self.scoring_function( models_means=[biometric_reference], ubm=self.ubm, @@ -265,26 +264,22 @@ class GMM(BioAlgorithm, BaseEstimator): ubm=self.ubm, test_stats=stats, frame_length_normalization=True, - ) + ).reshape((-1,)) - def score_for_multiple_probes(self, model, probes): + def score_for_multiple_probes(self, biometric_reference, probes): """This function computes the score between the given model and several given probe files.""" - logger.debug(f"scoring {model}, {probes}") - assert isinstance(model, GMMMachine) + logger.debug(f"scoring {biometric_reference}, {probes}") + assert isinstance(biometric_reference, GMMMachine) stats = [ self.project(probe) if not isinstance(probe, GMMStats) else probe for probe in probes ] - return ( - self.scoring_function( - models_means=model.means, - ubm=self.ubm, - test_stats=stats, - frame_length_normalization=True, - ) - .mean() - .reshape((-1,)) - ) + return self.scoring_function( + models_means=biometric_reference.means, + ubm=self.ubm, + test_stats=stats, + frame_length_normalization=True, + ).reshape((-1,)) def fit(self, X, y=None, **kwargs): """Trains the UBM.""" diff --git a/bob/bio/gmm/test/data/gmm_enrolled.hdf5 b/bob/bio/gmm/test/data/gmm_enrolled.hdf5 index 2e6e337f592e53f56806bce07dd5556c3176e6ae..6466ed0a3fc524a6ab698f09540aa908f5108c22 100644 GIT binary patch delta 1680 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 H$2<uD7lsae delta 1676 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 E0Fpxq*8l(j diff --git a/bob/bio/gmm/test/data/gmm_projected.hdf5 b/bob/bio/gmm/test/data/gmm_projected.hdf5 index 84437324be483253b54aff3fc2d0f1c2e1e620de..fc5e0a7c0b8f41d3b7d9a03d07c8e277f8bb5386 100644 GIT binary patch delta 1679 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 delta 1666 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 diff --git a/bob/bio/gmm/test/data/gmm_ubm.hdf5 b/bob/bio/gmm/test/data/gmm_ubm.hdf5 index 99df686343ee83dc8332c56561675cb91fd98ad8..6a8abe718f958351135e5992621a733016127ccc 100644 GIT binary patch delta 1678 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 E0O#oo+W-In delta 1674 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 diff --git a/bob/bio/gmm/test/test_gmm.py b/bob/bio/gmm/test/test_gmm.py index 404becc..e2434f0 100644 --- a/bob/bio/gmm/test/test_gmm.py +++ b/bob/bio/gmm/test/test_gmm.py @@ -18,8 +18,10 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import logging +import os import tempfile +import numpy import pkg_resources import bob.bio.gmm @@ -46,6 +48,8 @@ def test_class(): gmm1, bob.bio.base.pipelines.vanilla_biometrics.abstract_classes.BioAlgorithm ) assert gmm1.number_of_gaussians == 512 + assert "bob_fit_supports_dask_array" in gmm1._get_tags() + assert gmm1.transform(None) is None def test_training(): @@ -125,11 +129,17 @@ def test_enroll(): "bob.bio.gmm.test", "data/gmm_enrolled.hdf5" ) if regenerate_refs: - biometric_reference.save(reference_file) + gmm1.write_biometric_reference(biometric_reference, reference_file) + # Compare to pre-generated file gmm2 = gmm1.read_biometric_reference(reference_file) assert biometric_reference.is_similar_to(gmm2) + with tempfile.NamedTemporaryFile(prefix="bob_", suffix="_bioref.hdf5") as fd: + temp_file = fd.name + gmm1.write_biometric_reference(biometric_reference, reference_file) + assert os.path.exists(temp_file) + def test_score(): gmm1 = GMM(number_of_gaussians=2) @@ -143,18 +153,27 @@ def test_score(): probe = GMMStats.from_hdf5( pkg_resources.resource_filename("bob.bio.gmm.test", "data/gmm_projected.hdf5") ) + probe_data = utils.random_array((20, 45), -5.0, 5.0, seed=84) + + reference_score = -0.098980 - reference_score = 0.045073 - assert ( - abs(gmm1.score(biometric_reference, probe) - reference_score) < 1e-5 - ), "The scores differ: %3.8f, %3.8f" % ( - gmm1.score(biometric_reference, probe), - reference_score, + numpy.testing.assert_almost_equal( + gmm1.score(biometric_reference, probe), reference_score, decimal=5 ) - assert ( - abs( - gmm1.score_for_multiple_probes(biometric_reference, [probe, probe]) - - reference_score - ) - < 1e-5 + + multi_probes = gmm1.score_for_multiple_probes( + biometric_reference, [probe, probe, probe] + ) + assert multi_probes.shape == (3,), multi_probes.shape + numpy.testing.assert_almost_equal(multi_probes, reference_score, decimal=5) + + multi_refs = gmm1.score_multiple_biometric_references( + [biometric_reference, biometric_reference, biometric_reference], probe + ) + assert multi_refs.shape == (3,), multi_refs.shape + numpy.testing.assert_almost_equal(multi_refs, reference_score, decimal=5) + + # With not projected data + numpy.testing.assert_almost_equal( + gmm1.score(biometric_reference, probe_data), reference_score, decimal=5 ) -- GitLab