From 243367ac50764b7a68cc25b733287533c76e55fb Mon Sep 17 00:00:00 2001 From: Yannick DAYER <yannick.dayer@idiap.ch> Date: Mon, 29 Nov 2021 11:45:23 +0100 Subject: [PATCH] Use `resource_filename` instead of `datafile` --- bob/learn/em/data/gmm_MAP.hdf5 | Bin 41136 -> 12920 bytes bob/learn/em/test/test_gmm.py | 154 ++++++++++++++++----------------- 2 files changed, 76 insertions(+), 78 deletions(-) diff --git a/bob/learn/em/data/gmm_MAP.hdf5 b/bob/learn/em/data/gmm_MAP.hdf5 index 91c5e69141e3042ef5d211fc4098a8d59649d62d..0f57a2bde913bba76c2d9ab5a07cf81b07346d0f 100644 GIT binary patch literal 12920 zcmeD5aB<`1lHy_j0S*oZ76t(j3y%LoL4^@S2+I8r;W02IKpBisx&unDV1h6h89<PM zK?1^M5QLhKt}Z0V)s=yPi2-IljD~7sFkpeO6d)9Xh6aSu0HH?7VIBe=u8sj9FD5_} z+654Yfq|hx3&H@UGLRH{I(wiEk++b9(4>-#3~US_b0Gu+10w?m*a)x~0|Nsyg9KPg zl93UdvO&2AA_q~&%D@4ZXJP_V3>?s$zzj18tP5-;m=HoTziaK1L<R;}P60~~I1%jU z@50Ey$^ecG1_p)~1j6+I)Ws*@<pD$hJzg>(!VEv8pbQ)oBvcs~6qs=+fC|IPi3(Pz zz#yY&m#ze$Spbw05uP6G>56c82!Jz?00#p!hd6*ehsa+{;B1G;UkcE0fTb9)at6$B zm;jL&p(H39fx;BzeNX_pJNx^9XjriXW`oN)kO~F{Lp=j91Dc%~biq6Z2AkxZ#NuKF z^`!hHy`0p<qCCCST)o`PijvZzRK4`vTs?PRU*E*!jLf`Lbvq>UVCLlJKn;RY4g65X zC^Z@aqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsK=lv+_2*&Z0ieD)2!kvk zJU&D2IH(46sBUPDSHZ@kBS3+}z`$Sur6bVBLvvFT^NJZ57|IfhG86NXQ$cKyQW!tJ zB%>&`I3qtN1tJ3*Z-E91NGVk?vGFIUU=JT(GvQ`1`41W(VqjpvJ<etUbt<88w!t-y zO*lMA9dC3XG8_iycq3+bK!#5l86hbWRt~^u*t`en>BR#YPK5G%1y#~LxrShd2PAz% zLIX7KqX8a|mS6(S2{AB$%1nqH2ZNiVPp~Tk14BqqD2M_pz@2|0py2`04Rfy$G#7$I zyTJ26BPBc{heUY5;%TJNpnMNX;~@Wns)Uajk2|*hcw%<~Bmk=amR6^yPk&<HyOqPx z@ZvRlMg|5`&4w&KEkTEa)ia7j{s%i$R!lg*%$LC-MJh^5(%##Fq4A0Roz|oF3>zLk zeD}!F!Qu9wf}@O^>>C`^Po8+-0GZ!m*kA*(0T&IC9VJIYU^E0qLtr!nMnhmU1ZWTf zkaa(7@P2Lw8-7bXpwb$UZUmHvNx^!B60(?b$RabK91S@r0|&JMDqf%oW#FJ->jpVw za44XWF#Y-!QA4U7ots*c7@wAzlNw)^T2!2wp9c+puy}b<W=U#MJa~x-R6H*}J+ZX7 zI1@6u!oW~cl$e>9TEvi?pI4Szl%ATGoQfD)VPIg$O{|Dd%Pc9$%uA0iE=etbjJ7Z^ zl&5B<XOt8(loq5UmZZkRhHGGa*f0%DIZPa;jRDma;I1Cng@dJ+4_Q~sh;v=7fIir{ zu;o4w&L}xzLIATof-J0Nge<3H0QLJofq{!Ae;g<pT0TK3kR=QZSk~vkR)#_q(3pbM zbIj1u7X}6fJ^U8JT%TcxUma|;D+0274!`1IAUkmBsu~(4PzoBBnB!^mO;-aK9<!kV K0i^~>cmMz>03&?> literal 41136 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 diff --git a/bob/learn/em/test/test_gmm.py b/bob/learn/em/test/test_gmm.py index d69415d..89e96bf 100644 --- a/bob/learn/em/test/test_gmm.py +++ b/bob/learn/em/test/test_gmm.py @@ -15,9 +15,9 @@ import os import tempfile from copy import deepcopy from h5py import File as HDF5File +from pkg_resources import resource_filename -import bob.io.base -from bob.io.base.test_utils import datafile +from bob.io.base import load as load_array from bob.learn.em.mixture import GMMMachine from bob.learn.em.mixture import GMMStats @@ -187,7 +187,7 @@ def test_GMMMachine_1(): def test_GMMMachine_2(): # Test a GMMMachine (statistics) - arrayset = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__, path="../data/")) + arrayset = load_array(resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5")) gmm = GMMMachine(n_gaussians=2) gmm.weights = np.array([0.5, 0.5], "float64") gmm.means = np.array([[3, 70], [4, 72]], "float64") @@ -197,7 +197,7 @@ def test_GMMMachine_2(): stats = gmm.acc_statistics(arrayset) stats_ref = GMMStats(n_gaussians=2, n_features=2) - stats_ref.load(HDF5File(datafile("stats.hdf5",__name__, path="../data/"), "r")) + stats_ref.load(HDF5File(resource_filename("bob.learn.em", "data/stats.hdf5"), "r")) np.testing.assert_equal(stats.t, stats_ref.t) np.testing.assert_almost_equal(stats.n, stats_ref.n, decimal=10) @@ -210,11 +210,11 @@ def test_GMMMachine_2(): def test_GMMMachine_3(): # Test a GMMMachine (log-likelihood computation) - data = bob.io.base.load(datafile("data.hdf5", __name__, path="../data/")) + data = load_array(resource_filename("bob.learn.em", "data/data.hdf5")) gmm = GMMMachine(n_gaussians=2) - gmm.weights = bob.io.base.load(datafile("weights.hdf5", __name__, path="../data/")) - gmm.means = bob.io.base.load(datafile("means.hdf5", __name__, path="../data/")) - gmm.variances = bob.io.base.load(datafile("variances.hdf5", __name__, path="../data/")) + gmm.weights = load_array(resource_filename("bob.learn.em", "data/weights.hdf5")) + gmm.means = load_array(resource_filename("bob.learn.em", "data/means.hdf5")) + gmm.variances = load_array(resource_filename("bob.learn.em", "data/variances.hdf5")) # Compare the log-likelihood with the one obtained using Chris Matlab # implementation @@ -229,9 +229,9 @@ def test_GMMMachine_4(): data = np.random.rand(100,50) # Doesn't matter if it is random. The average of 1D array (in python) MUST output the same result for the 2D array (in C++) gmm = GMMMachine(n_gaussians=2) - gmm.weights = bob.io.base.load(datafile("weights.hdf5", __name__, path="../data/")) - gmm.means = bob.io.base.load(datafile("means.hdf5", __name__, path="../data/")) - gmm.variances = bob.io.base.load(datafile("variances.hdf5", __name__, path="../data/")) + gmm.weights = load_array(resource_filename("bob.learn.em", "data/weights.hdf5")) + gmm.means = load_array(resource_filename("bob.learn.em", "data/means.hdf5")) + gmm.variances = load_array(resource_filename("bob.learn.em", "data/variances.hdf5")) ll = 0 @@ -549,9 +549,9 @@ def test_map_transformer(): def loadGMM(): gmm = GMMMachine(n_gaussians=2) - gmm.weights = bob.io.base.load(datafile("gmm.init_weights.hdf5", __name__, path="../data/")) - gmm.means = bob.io.base.load(datafile("gmm.init_means.hdf5", __name__, path="../data/")) - gmm.variances = bob.io.base.load(datafile("gmm.init_variances.hdf5", __name__, path="../data/")) + gmm.weights = load_array(resource_filename("bob.learn.em", "data/gmm.init_weights.hdf5")) + gmm.means = load_array(resource_filename("bob.learn.em", "data/gmm.init_means.hdf5")) + gmm.variances = load_array(resource_filename("bob.learn.em", "data/gmm.init_variances.hdf5")) return gmm @@ -560,7 +560,7 @@ def equals(x, y, epsilon): def test_gmm_ML_1(): """Trains a GMMMachine with ML_GMMTrainer""" - ar = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__, path="../data/")) + ar = load_array(resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5")) gmm = loadGMM() # test rng handling @@ -579,29 +579,29 @@ def test_gmm_ML_1(): gmm = gmm.fit(ar) # Generate reference - # gmm.save(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data"), "w")) + # gmm.save(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "w")) - gmm_ref = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data"), "r")) + gmm_ref = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r")) assert gmm == gmm_ref def test_gmm_ML_2(): """Trains a GMMMachine with ML_GMMTrainer; compares to an old reference""" - ar = bob.io.base.load(datafile("dataNormalized.hdf5", __name__, path="../data/")) + ar = load_array(resource_filename("bob.learn.em", "data/dataNormalized.hdf5")) # Initialize GMMMachine gmm = GMMMachine(n_gaussians=5) - gmm.means = bob.io.base.load(datafile("meansAfterKMeans.hdf5", __name__, path="../data/")).astype("float64") - gmm.variances = bob.io.base.load(datafile("variancesAfterKMeans.hdf5", __name__, path="../data/")).astype("float64") - gmm.weights = np.exp(bob.io.base.load(datafile("weightsAfterKMeans.hdf5", __name__, path="../data/")).astype("float64")) + gmm.means = load_array(resource_filename("bob.learn.em", "data/meansAfterKMeans.hdf5")).astype("float64") + gmm.variances = load_array(resource_filename("bob.learn.em", "data/variancesAfterKMeans.hdf5")).astype("float64") + gmm.weights = np.exp(load_array(resource_filename("bob.learn.em", "data/weightsAfterKMeans.hdf5")).astype("float64")) threshold = 0.001 gmm.variance_thresholds = threshold # Initialize ML Trainer gmm.mean_var_update_threshold = 0.001 - gmm.max_fitting_steps = 26 - gmm.convergence_threshold = 0.00001 + gmm.max_fitting_steps = 25 + gmm.convergence_threshold = 0.000001 gmm.update_means = True gmm.update_variances = True gmm.update_weights = True @@ -610,26 +610,26 @@ def test_gmm_ML_2(): gmm = gmm.fit(ar) # Test results # Load torch3vision reference - meansML_ref = bob.io.base.load(datafile("meansAfterML.hdf5", __name__, path="../data/")) - variancesML_ref = bob.io.base.load(datafile("variancesAfterML.hdf5", __name__, path="../data/")) - weightsML_ref = bob.io.base.load(datafile("weightsAfterML.hdf5", __name__, path="../data/")) + meansML_ref = load_array(resource_filename("bob.learn.em", "data/meansAfterML.hdf5")) + variancesML_ref = load_array(resource_filename("bob.learn.em", "data/variancesAfterML.hdf5")) + weightsML_ref = load_array(resource_filename("bob.learn.em", "data/weightsAfterML.hdf5")) # Compare to current results - np.testing.assert_allclose(gmm.means, meansML_ref, rtol=3e-3) - np.testing.assert_allclose(gmm.variances, variancesML_ref, rtol=3e-3) - np.testing.assert_allclose(gmm.weights, weightsML_ref, rtol=1e-4) + np.testing.assert_allclose(gmm.means, meansML_ref, atol=3e-3) + np.testing.assert_allclose(gmm.variances, variancesML_ref, atol=3e-3) + np.testing.assert_allclose(gmm.weights, weightsML_ref, atol=1e-4) def test_gmm_ML_parallel(): """Trains a GMMMachine with ML_GMMTrainer; compares to an old reference""" - ar = da.array(bob.io.base.load(datafile("dataNormalized.hdf5", __name__, path="../data/"))) + ar = da.array(load_array(resource_filename("bob.learn.em", "data/dataNormalized.hdf5"))) # Initialize GMMMachine gmm = GMMMachine(n_gaussians=5) - gmm.means = bob.io.base.load(datafile("meansAfterKMeans.hdf5", __name__, path="../data/")).astype("float64") - gmm.variances = bob.io.base.load(datafile("variancesAfterKMeans.hdf5", __name__, path="../data/")).astype("float64") - gmm.weights = np.exp(bob.io.base.load(datafile("weightsAfterKMeans.hdf5", __name__, path="../data/")).astype("float64")) + gmm.means = load_array(resource_filename("bob.learn.em", "data/meansAfterKMeans.hdf5")).astype("float64") + gmm.variances = load_array(resource_filename("bob.learn.em", "data/variancesAfterKMeans.hdf5")).astype("float64") + gmm.weights = np.exp(load_array(resource_filename("bob.learn.em", "data/weightsAfterKMeans.hdf5")).astype("float64")) threshold = 0.001 gmm.variance_thresholds = threshold @@ -647,24 +647,24 @@ def test_gmm_ML_parallel(): # Test results # Load torch3vision reference - meansML_ref = bob.io.base.load(datafile("meansAfterML.hdf5", __name__, path="../data/")) - variancesML_ref = bob.io.base.load(datafile("variancesAfterML.hdf5", __name__, path="../data/")) - weightsML_ref = bob.io.base.load(datafile("weightsAfterML.hdf5", __name__, path="../data/")) + meansML_ref = load_array(resource_filename("bob.learn.em", "data/meansAfterML.hdf5")) + variancesML_ref = load_array(resource_filename("bob.learn.em", "data/variancesAfterML.hdf5")) + weightsML_ref = load_array(resource_filename("bob.learn.em", "data/weightsAfterML.hdf5")) # Compare to current results - np.testing.assert_allclose(gmm.means, meansML_ref, rtol=3e-3) - np.testing.assert_allclose(gmm.variances, variancesML_ref, rtol=3e-3) - np.testing.assert_allclose(gmm.weights, weightsML_ref, rtol=1e-4) + np.testing.assert_allclose(gmm.means, meansML_ref, atol=3e-3) + np.testing.assert_allclose(gmm.variances, variancesML_ref, atol=3e-3) + np.testing.assert_allclose(gmm.weights, weightsML_ref, atol=1e-4) def test_gmm_MAP_1(): """Train a GMMMachine with MAP_GMMTrainer""" - ar = bob.io.base.load(datafile("faithful.torch3_f64.hdf5", __name__, path="../data/")) + ar = load_array(resource_filename("bob.learn.em", "data/faithful.torch3_f64.hdf5")) # test with rng - gmmprior = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data/"), "r")) - gmm = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data/"), "r"), ubm = gmmprior) + gmmprior = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r")) + gmm = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"), ubm = gmmprior) gmm.update_means = True gmm.update_variances = False gmm.update_weights = False @@ -672,37 +672,38 @@ def test_gmm_MAP_1(): gmm.random_state = rng gmm = gmm.fit(ar) - gmmprior = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data/"), "r")) - gmm = GMMMachine.from_hdf5(HDF5File(datafile("gmm_ML.hdf5", __name__, path="../data/"), "r"), ubm = gmmprior) + gmmprior = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r")) + gmm = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_ML.hdf5"), "r"), ubm = gmmprior) gmm.update_means = True gmm.update_variances = False gmm.update_weights = False gmm = gmm.fit(ar) - gmm_ref = GMMMachine.from_hdf5(HDF5File(datafile("gmm_MAP.hdf5", __name__, path="../data/"), "r")) + # Generate reference + # gmm.save(HDF5File(resource_filename("bob.learn.em", "data/gmm_MAP.hdf5"), "w")) + + gmm_ref = GMMMachine.from_hdf5(HDF5File(resource_filename("bob.learn.em", "data/gmm_MAP.hdf5"), "r")) - np.testing.assert_allclose(gmm.means, gmm_ref.means, rtol=1e-3) - np.testing.assert_allclose(gmm.variances, gmm_ref.variances, rtol=1e-3) - np.testing.assert_allclose(gmm.weights, gmm_ref.weights, rtol=1e-3) + np.testing.assert_almost_equal(gmm.means, gmm_ref.means, decimal=3) + np.testing.assert_almost_equal(gmm.variances, gmm_ref.variances, decimal=3) + np.testing.assert_almost_equal(gmm.weights, gmm_ref.weights, decimal=3) def test_gmm_MAP_2(): """Train a GMMMachine with MAP_GMMTrainer and compare with matlab reference""" - data = bob.io.base.load(datafile("data.hdf5", __name__, path="../data/")) - data = data.reshape((-1, 1)) # make a 2D array out of it - means = bob.io.base.load(datafile("means.hdf5", __name__, path="../data/")) - variances = bob.io.base.load(datafile("variances.hdf5", __name__, path="../data/")) - weights = bob.io.base.load(datafile("weights.hdf5", __name__, path="../data/")) + data = load_array(resource_filename("bob.learn.em", "data/data.hdf5")) + data = data.reshape((1, -1)) # make a 2D array out of it + means = load_array(resource_filename("bob.learn.em", "data/means.hdf5")) + variances = load_array(resource_filename("bob.learn.em", "data/variances.hdf5")) + weights = load_array(resource_filename("bob.learn.em", "data/weights.hdf5")) gmm = GMMMachine(n_gaussians=2) gmm.means = means gmm.variances = variances gmm.weights = weights - gmm = gmm.fit(data) - gmm_adapted = GMMMachine( n_gaussians=2, trainer="map", @@ -717,38 +718,36 @@ def test_gmm_MAP_2(): gmm_adapted.variances = variances gmm_adapted.weights = weights - gmm_adapted = gmm_adapted.fit(data) - new_means = bob.io.base.load(datafile("new_adapted_mean.hdf5", __name__, path="../data/")) + new_means = load_array(resource_filename("bob.learn.em", "data/new_adapted_mean.hdf5")) # Compare to matlab reference - np.testing.assert_allclose(new_means[0,:], gmm_adapted.means[:,0], rtol=1e-4) - np.testing.assert_allclose(new_means[1,:], gmm_adapted.means[:,1], rtol=1e-4) + np.testing.assert_allclose(new_means.T, gmm_adapted.means, rtol=1e-4) def test_gmm_MAP_3(): """Train a GMMMachine with MAP_GMMTrainer; compares to old reference""" - ar = bob.io.base.load(datafile("dataforMAP.hdf5", __name__, path="../data/")) + ar = load_array(resource_filename("bob.learn.em", "data/dataforMAP.hdf5")) # Initialize GMMMachine n_gaussians = 5 prior_gmm = GMMMachine(n_gaussians) - prior_gmm.means = bob.io.base.load(datafile("meansAfterML.hdf5", __name__, path="../data/")) - prior_gmm.variances = bob.io.base.load(datafile("variancesAfterML.hdf5", __name__, path="../data/")) - prior_gmm.weights = bob.io.base.load(datafile("weightsAfterML.hdf5", __name__, path="../data/")) + prior_gmm.means = load_array(resource_filename("bob.learn.em", "data/meansAfterML.hdf5")) + prior_gmm.variances = load_array(resource_filename("bob.learn.em", "data/variancesAfterML.hdf5")) + prior_gmm.weights = load_array(resource_filename("bob.learn.em", "data/weightsAfterML.hdf5")) threshold = 0.001 prior_gmm.variance_thresholds = threshold # Initialize MAP Trainer + prior = 0.001 accuracy = 0.00001 - gmm = GMMMachine( n_gaussians, trainer="map", ubm=prior_gmm, - convergence_threshold=threshold, + convergence_threshold=prior, max_fitting_steps=1, update_means=True, update_variances=False, @@ -762,32 +761,31 @@ def test_gmm_MAP_3(): # Test results # Load torch3vision reference - meansMAP_ref = bob.io.base.load(datafile("meansAfterMAP.hdf5", __name__, path="../data/")) - variancesMAP_ref = bob.io.base.load(datafile("variancesAfterMAP.hdf5", __name__, path="../data/")) - weightsMAP_ref = bob.io.base.load(datafile("weightsAfterMAP.hdf5", __name__, path="../data/")) + meansMAP_ref = load_array(resource_filename("bob.learn.em", "data/meansAfterMAP.hdf5")) + variancesMAP_ref = load_array(resource_filename("bob.learn.em", "data/variancesAfterMAP.hdf5")) + weightsMAP_ref = load_array(resource_filename("bob.learn.em", "data/weightsAfterMAP.hdf5")) # Compare to current results # Gaps are quite large. This might be explained by the fact that there is no # adaptation of a given Gaussian in torch3 when the corresponding responsibilities # are below the responsibilities threshold - np.testing.assert_allclose(gmm.means, meansMAP_ref, rtol=2e-1) - np.testing.assert_allclose(gmm.variances, variancesMAP_ref, rtol=1e-4) - np.testing.assert_allclose(gmm.weights, weightsMAP_ref, rtol=1e-4) + np.testing.assert_allclose(gmm.means, meansMAP_ref, atol=2e-1) + np.testing.assert_allclose(gmm.variances, variancesMAP_ref, atol=1e-4) + np.testing.assert_allclose(gmm.weights, weightsMAP_ref, atol=1e-4) def test_gmm_test(): + """ Tests a GMMMachine by computing scores against a model and comparing to a reference + """ - # Tests a GMMMachine by computing scores against a model and compare to - # an old reference - - ar = bob.io.base.load(datafile("dataforMAP.hdf5", __name__, path="../data/")) + ar = load_array(resource_filename("bob.learn.em", "data/dataforMAP.hdf5")) # Initialize GMMMachine n_gaussians = 5 gmm = GMMMachine(n_gaussians) - gmm.means = bob.io.base.load(datafile("meansAfterML.hdf5", __name__, path="../data/")) - gmm.variances = bob.io.base.load(datafile("variancesAfterML.hdf5", __name__, path="../data/")) - gmm.weights = bob.io.base.load(datafile("weightsAfterML.hdf5", __name__, path="../data/")) + gmm.means = load_array(resource_filename("bob.learn.em", "data/meansAfterML.hdf5")) + gmm.variances = load_array(resource_filename("bob.learn.em", "data/variancesAfterML.hdf5")) + gmm.weights = load_array(resource_filename("bob.learn.em", "data/weightsAfterML.hdf5")) threshold = 0.001 gmm.variance_thresholds = threshold -- GitLab