From a0ec1e4fc9a4d4c654f0c2408e6498973bf9b7b4 Mon Sep 17 00:00:00 2001
From: Yannick DAYER <yannick.dayer@idiap.ch>
Date: Fri, 22 Oct 2021 15:41:14 +0200
Subject: [PATCH] Clean GMM test, add write_model and multiple_probe

---
 bob/bio/gmm/bioalgorithm/GMM.py          |  37 +++++++++++++----------
 bob/bio/gmm/test/data/gmm_model.hdf5     | Bin 11176 -> 9984 bytes
 bob/bio/gmm/test/data/gmm_projected.hdf5 | Bin 6232 -> 6232 bytes
 bob/bio/gmm/test/data/gmm_projector.hdf5 | Bin 10256 -> 9984 bytes
 bob/bio/gmm/test/test_algorithms.py      |  18 ++++-------
 5 files changed, 27 insertions(+), 28 deletions(-)

diff --git a/bob/bio/gmm/bioalgorithm/GMM.py b/bob/bio/gmm/bioalgorithm/GMM.py
index 23d9ebc..7b6d7cb 100644
--- a/bob/bio/gmm/bioalgorithm/GMM.py
+++ b/bob/bio/gmm/bioalgorithm/GMM.py
@@ -268,7 +268,11 @@ class GMM(BioAlgorithm, BaseEstimator):
     #                Feature comparison                  #
     def read_model(self, model_file):
         """Reads the model, which is a GMM machine"""
-        return GMMMachine.from_hdf5(bob.io.base.HDF5File(model_file))
+        return GMMMachine.from_hdf5(bob.io.base.HDF5File(model_file), ubm=self.ubm)
+
+    def write_model(self, model, model_file):
+        """Write the features (GMM_Stats)"""
+        return model.save(model_file)
 
     def score(self, biometric_reference: GMMMachine, data: GMMStats):
         """Computes the score for the given model and the given probe.
@@ -283,13 +287,13 @@ class GMM(BioAlgorithm, BaseEstimator):
             The probe data to compare to the model.
         """
 
-        assert isinstance(biometric_reference, GMMMachine)  # TODO is it a list?
+        assert isinstance(biometric_reference, GMMMachine)
         assert isinstance(data, GMMStats)
         return self.scoring_function(
             models_means=[biometric_reference],
             ubm=self.ubm,
             test_stats=data,
-            frame_length_normalisation=True,
+            frame_length_normalization=True,
         )[0, 0]
 
     def score_multiple_biometric_references(
@@ -307,26 +311,27 @@ class GMM(BioAlgorithm, BaseEstimator):
             The probe data to compare to the models.
         """
 
-        assert isinstance(biometric_references, GMMMachine)  # TODO is it a list?
+        assert isinstance(biometric_references, GMMMachine)
         assert isinstance(data, GMMStats)
         return self.scoring_function(
             models_means=biometric_references,
             ubm=self.ubm,
             test_stats=data,
-            frame_length_normalisation=True,
+            frame_length_normalization=True,
         )
 
-    # def score_for_multiple_probes(self, model, probes):
-    #     """This function computes the score between the given model and several given probe files."""
-    #     assert isinstance(model, GMMMachine)
-    #     for probe in probes:
-    #         assert isinstance(probe, GMMStats)
-    #     #    logger.warn("Please verify that this function is correct")
-    #     return self.probe_fusion_function(
-    #         self.scoring_function(
-    #             model.means, self.ubm, probes, [], frame_length_normalisation=True
-    #         )
-    #     )
+    def score_for_multiple_probes(self, model, probes):
+        """This function computes the score between the given model and several given probe files."""
+        assert isinstance(model, GMMMachine)
+        for probe in probes:
+            assert isinstance(probe, GMMStats)
+        #    logger.warn("Please verify that this function is correct")
+        return self.scoring_function(
+            models_means=model.means,
+            ubm=self.ubm,
+            test_stats=probes,
+            frame_length_normalization=True,
+        ).mean()
 
     def fit(self, X, y=None, **kwargs):
         """Trains the UBM."""
diff --git a/bob/bio/gmm/test/data/gmm_model.hdf5 b/bob/bio/gmm/test/data/gmm_model.hdf5
index a57d494c0fc9112e582827d577ae4bf974d2e174..21bf67f4cc54782e78f4b9750e15fefc76089089 100644
GIT binary patch
literal 9984
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
AEC2ui

literal 11176
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
Sr{@{ac!c#7A?_S(=@|fJ=S<cB

diff --git a/bob/bio/gmm/test/data/gmm_projected.hdf5 b/bob/bio/gmm/test/data/gmm_projected.hdf5
index ba17796e7d8d0a7374edc3a9ae067447043feedc..c5b7f29da7cabbbf870f7ce48365e157e636e8b1 100644
GIT binary patch
delta 91
zcmca%aKm839A>8Ay_@GThcPh)@0~o4dD0|-q{*+?lt7|<>}8xFQ9kyr$pV5sAfb7J
b+ZbU&4}`%&c_MNkq0N1wd|-N>*e*r@9TOoA

delta 91
zcmca%aKm839A+llwVUTLhcPkPuAMxOdD0|-q{*+?lt7|<>}8xFQ9kyr$pV5sAfb7J
b+ZbU&4}`%&c_MNkq0N1wd|-N>*e*r@<31m_

diff --git a/bob/bio/gmm/test/data/gmm_projector.hdf5 b/bob/bio/gmm/test/data/gmm_projector.hdf5
index d39d6920f1e7d335eddb7ce2c2be0ba892aa0541..ebeb5462e0ce7a3d28f03fd77ef20cfb1eee1520 100644
GIT binary patch
delta 408
zcmbOb(BL;ggNZ?XqE;W9fH(sK1H)ti_74*;{F*Ev$T4{X69?A?kRSsCLx$wUC^^m(
zQV_1dWJebHi5Da$D=^nE1@E0akNMDK2T9J!nJoNFC!{u4u~adFgwH7~nLLZFh$(pQ
zW<GWs#?3(->)0n=;Fu%;)>J33YVr>GQ<FalMuAlL39*4S@v(PJ{veXY=ruW7R1suK
zo#-FNsL9o0V9r0qmdU3iGZ>>`0`tU*CL6G@F|tiAm(ZMiLPCSFV{)dX`s5E18eAJ7
zu4Rajn0Qcb@&XBs$qGtIVC^vo?Vlzu5RaI6pkwk4X$7VqvYUTNM=&wQPOfGK+c%GS
z)?@*Bj>#GF3X?ama4@})0U4Db&%xv%Kk=X(R{+!s1!a)<26>Lj67mX@Shq~>QIKOy
xn7mp6WXk4q3OtOAJ(F)Mf_RhvDZXKf;hua)Q32#{KIJ)#Oa>}2?l~1FW&qu?g*N~I

delta 439
zcmZqhn-DNTgGoSRqE;Vgfdm5>OxSqvJ0sTvFq?rvKzw499On&b2v=aTBa8gR3lftR
zm}{79*G`_te2DSF<U|&6rW?|mt5~WSL4y0_mrS0;R>Wkxb~7Kl4I?ANW@nDA?2`n*
zI_d;gF*ZzYl#`#tx@z(#!6=X_KOr`-Mn3kg$rpr@7`-OHW>W;21QK{4oW&S4*;@oG
zkSFqoF==wPD46q4an<Ank{&!oiFqmcx$(s%i6yC%pGd|`7GkfMY{0_C$Ua$ITyydR
zagE6i;u@1Dh-+}IfOvyphvdYAa+4ESI2olT9+YF8Fga6Pec}a;$sa_j7?WY<_ldq?
zOhIspCZCW}VB(P9{7Nc<i7|C@H8a>1^O$E%lH-`XLQY}w1{MycAF?2m1LQa+bI2)h
z1widHPyvZ9kmH!FA$V%?Dpsz^HS%(d8IxzrgUr~xPo9U7amwV=3LxI(cM5NqQn)9d
WQBVK{&OgODj7$!yFz!BOCuRV7b&Em(

diff --git a/bob/bio/gmm/test/test_algorithms.py b/bob/bio/gmm/test/test_algorithms.py
index e0375ec..1ee7f9b 100644
--- a/bob/bio/gmm/test/test_algorithms.py
+++ b/bob/bio/gmm/test/test_algorithms.py
@@ -24,7 +24,6 @@ import sys
 
 import numpy
 import pkg_resources
-import pytest
 
 import bob.bio.gmm
 import bob.io.base
@@ -35,7 +34,7 @@ from bob.bio.base.test import utils
 
 logger = logging.getLogger(__name__)
 
-regenerate_refs = True
+regenerate_refs = False
 
 seed_value = 5489
 
@@ -73,11 +72,8 @@ def _compare_complex(
             assert numpy.allclose(d, r, atol=1e-5)
 
 
-@pytest.mark.isolated_gmm
 def test_gmm():
-    temp_file = (
-        "./temptest/test_file"  # TODO bob.io.base.test_utils.temporary_filename()
-    )
+    temp_file = bob.io.base.test_utils.temporary_filename()
     gmm1 = bob.bio.base.load_resource(
         "gmm", "bioalgorithm", preferred_package="bob.bio.gmm"
     )
@@ -85,11 +81,9 @@ def test_gmm():
     assert isinstance(
         gmm1, bob.bio.base.pipelines.vanilla_biometrics.abstract_classes.BioAlgorithm
     )
-    # assert gmm1.performs_projection
-    # assert gmm1.requires_projector_training
-    # assert not gmm1.use_projected_features_for_enrollment
-    # assert not gmm1.split_training_features_by_client
-    # assert not gmm1.requires_enroller_training
+
+    # Fix the number of gaussians for tests
+    gmm1.number_of_gaussians = 2
 
     # create smaller GMM object
     gmm2 = bob.bio.gmm.bioalgorithm.GMM(
@@ -149,7 +143,7 @@ def test_gmm():
     probe = gmm1.read_feature(
         pkg_resources.resource_filename("bob.bio.gmm.test", "data/gmm_projected.hdf5")
     )
-    reference_score = -0.01676570
+    reference_score = -0.01992773
     assert (
         abs(gmm1.score(model, probe) - reference_score) < 1e-5
     ), "The scores differ: %3.8f, %3.8f" % (gmm1.score(model, probe), reference_score)
-- 
GitLab