Skip to content
Snippets Groups Projects
Commit 7b54bbaa authored by Amir MOHAMMADI's avatar Amir MOHAMMADI
Browse files

Generate documentation

parent 37970560
No related branches found
No related tags found
No related merge requests found
Pipeline #
#!/usr/bin/env python
import os
import numpy
import matplotlib.pyplot as plt
from bob.measure.load import load_score, get_all_scores,\
get_negatives_positives_all
from bob.fusion.base.algorithm import LLR, Weighted_Sum, MLP
from bob.fusion.base.normalizer import ZNorm
def main():
'''
/home/amir/idiap/remote/user/mobio-male/baselines/gmm/male/nonorm/scores-dev
/home/amir/idiap/remote/user/mobio-male/baselines/gmm/male/nonorm/scores-eval
/home/amir/idiap/remote/user/mobio-male/baselines/gmm/male/ztnorm/scores-dev
/home/amir/idiap/remote/user/mobio-male/baselines/gmm/male/ztnorm/scores-eval
/home/amir/idiap/remote/user/mobio-male/baselines/gabor-graph/male/nonorm/scores-dev
/home/amir/idiap/remote/user/mobio-male/baselines/gabor-graph/male/nonorm/scores-eval
/home/amir/idiap/remote/user/mobio-male/baselines/gabor-graph/male/ztnorm/scores-dev
/home/amir/idiap/remote/user/mobio-male/baselines/gabor-graph/male/ztnorm/scores-eval
/home/amir/idiap/remote/user/mobio-male/voice/gmm/male/nonorm/scores-dev
/home/amir/idiap/remote/user/mobio-male/voice/gmm/male/nonorm/scores-eval
/home/amir/idiap/remote/user/mobio-male/voice/gmm/male/ztnorm/scores-dev
/home/amir/idiap/remote/user/mobio-male/voice/gmm/male/ztnorm/scores-eval
/home/amir/idiap/remote/user/mobio-male/voice/isv/male/nonorm/scores-dev
/home/amir/idiap/remote/user/mobio-male/voice/isv/male/nonorm/scores-eval
/home/amir/idiap/remote/user/mobio-male/voice/isv/male/ztnorm/scores-dev
/home/amir/idiap/remote/user/mobio-male/voice/isv/male/ztnorm/scores-eval
# = ['/home/amir/idiap/remote/scores-dev_gmm',
# '/home/amir/idiap/remote/scores-dev_isv']
# s_eval_paths = ['/home/amir/idiap/remote/scores-eval_gmm',
# '/home/amir/idiap/remote/scores-eval_isv']
'''
score_path_mask = '/home/amir/idiap/remote/user/mobio-male/{}/male/{}/scores-{}'
fusion_lists = [
(('baselines/gmm', 'voice/isv'), 'face-voice/F-gmm-S-isv{}'),
(('baselines/gmm', 'baselines/gabor-graph'), 'baselines/gmm-gabor-graph{}'),
(('voice/gmm', 'voice/isv'), 'voice/gmm-isv{}'),
# (('baselines/gmm', 'baselines/gabor-graph', 'voice/gmm', 'voice/isv'), 'face-voice/F-gmm-gabor-graph-S-gmm-isv{}'),
]
for norm in ['ztnorm']:
for scores_paths_param, save_path_param in fusion_lists:
save_path_dev = score_path_mask.format(save_path_param, norm, 'dev')
save_path_eval = score_path_mask.format(save_path_param, norm, 'eval')
# for path in [save_path_dev, save_path_eval]:
# for tag in [
# '_Weighted_Sum',
# '_LLR',
# '_MLP'
# ]:
# try:
# os.makedirs(os.path.split(path.format(tag))[0])
# except Exception:
# pass
s_dev_paths = [
score_path_mask.format(a, norm, 'dev') for a in scores_paths_param]
s_eval_paths = [
score_path_mask.format(a, norm, 'eval') for a in scores_paths_param]
score_lines_list = [load_score(path) for path in s_dev_paths]
scores = get_all_scores(score_lines_list)
trainer_scores = get_negatives_positives_all(score_lines_list)
score_lines_list_eval = [load_score(path) for path in s_eval_paths]
scores_eval = get_all_scores(score_lines_list_eval)
plt.figure()
for i, (fuse, tag) in enumerate([
(Weighted_Sum(normalizer=ZNorm(), scores=numpy.array(scores), trainer_scores=trainer_scores), '_Weighted_Sum'),
(LLR(normalizer=ZNorm(), scores=numpy.array(scores), trainer_scores=trainer_scores), '_LLR'),
(MLP(normalizer=ZNorm(), scores=numpy.array(scores), trainer_scores=trainer_scores, verbose=True,
mlp_shape=(2, 3, 1), batch_size=1, seed=0), '_MLP'),
]):
plt.subplot(2,2,i+1)
fuse.train()
# import ipdb; ipdb.set_trace()
fused_scores_dev = fuse()
score_lines = numpy.array(score_lines_list[0])
score_lines['score'] = fused_scores_dev
# import ipdb
# ipdb.set_trace()
# numpy.savetxt(save_path_dev.format(tag), score_lines, fmt='%s %s %s %.6f')
fuse.scores = numpy.array(scores_eval)
fused_scores_eval = fuse()
fuse.scores = numpy.array(scores_eval)
score_lines = numpy.array(score_lines_list_eval[0])
score_lines['score'] = fused_scores_eval
# numpy.savetxt(save_path_eval.format(tag), score_lines, fmt='%s %s %s %.6f')
# plot the decision boundary
from bob.measure import eer_threshold, min_hter_threshold
from bob.measure.load import get_negatives_positives
score_labels = score_lines['claimed_id'] == score_lines['real_id']
threshold = eer_threshold(*get_negatives_positives(score_lines))
thres_system1 = min_hter_threshold(
*get_negatives_positives(score_lines_list[0]))
thres_system2 = min_hter_threshold(
*get_negatives_positives(score_lines_list[1]))
fuse.plot_boundary_decision(
score_labels, threshold,
scores_paths_param[0], scores_paths_param[1],
thres_system1, thres_system2,
True,
seed=0
)
plt.title(tag[1:])
# print(thres_system1, thres_system2)
# thres_system1, thres_system2 = (3.51670052, 3.19892205)
# plt.axvline(thres_system1, color='red')
# plt.axhline(thres_system2, color='red')
# plt.show()
plt.savefig('scatter_{}_{}.pdf'.format(norm, '_'.join([a.replace('/','-') for a in scores_paths_param])))
plt.close()
# return
# fuse = LLR(scores=scores, trainer_scores=trainer_scores)
# fuse.train()
# print('LLR', fuse()[:10])
# fuse = Weighted_Sum(scores=scores)
# print('Weighted_Sum', fuse()[:10])
# fuse = MEAN(scores=scores)
# print('MEAN', fuse()[:10])
# fuse = MLP(scores=scores, trainer_scores=trainer_scores,
# verbose=True, max_iter=0, batch_size=1)
# fuse.train()
# print('MLP', fuse()[:10])
if __name__ == '__main__':
main()
......@@ -119,7 +119,7 @@ def write_info(args, command_line_parameters):
command_line_parameters : [str] or ``None``
The command line parameters that have been interpreted.
If ``None``, the parameters specified by the user on command line
are considered.
are considered.
executable : str
The name of the executable (such as ``'./bin/verify.py'``) that is used
......@@ -161,7 +161,7 @@ def load_resource(resource, keyword, imports=['bob.fusion.base'],
1. a resource as defined in the setup.py
2. a configuration file
3. a string defining the construction of an object. If imports are required
for the construction of this object, they can be given as list of strings.
for the construction of this object, they can be given as list of strings.
**Parameters:**
......
bob.fusion.base.algorithm package
=================================
Submodules
----------
bob.fusion.base.algorithm.Algorithm module
------------------------------------------
.. automodule:: bob.fusion.base.algorithm.Algorithm
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.algorithm.AlgorithmBob module
---------------------------------------------
.. automodule:: bob.fusion.base.algorithm.AlgorithmBob
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.algorithm.LLR module
------------------------------------
.. automodule:: bob.fusion.base.algorithm.LLR
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.algorithm.MLP module
------------------------------------
.. automodule:: bob.fusion.base.algorithm.MLP
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.algorithm.Weighted_Sum module
---------------------------------------------
.. automodule:: bob.fusion.base.algorithm.Weighted_Sum
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.algorithm.mlp_train_helper module
-------------------------------------------------
.. automodule:: bob.fusion.base.algorithm.mlp_train_helper
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: bob.fusion.base.algorithm
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.config.algorithm package
========================================
Submodules
----------
bob.fusion.base.config.algorithm.llr module
-------------------------------------------
.. automodule:: bob.fusion.base.config.algorithm.llr
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.config.algorithm.llr_skl module
-----------------------------------------------
.. automodule:: bob.fusion.base.config.algorithm.llr_skl
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.config.algorithm.mean module
--------------------------------------------
.. automodule:: bob.fusion.base.config.algorithm.mean
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.config.algorithm.mlp module
-------------------------------------------
.. automodule:: bob.fusion.base.config.algorithm.mlp
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.config.algorithm.plr_2 module
---------------------------------------------
.. automodule:: bob.fusion.base.config.algorithm.plr_2
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: bob.fusion.base.config.algorithm
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.config package
==============================
Subpackages
-----------
.. toctree::
bob.fusion.base.config.algorithm
Module contents
---------------
.. automodule:: bob.fusion.base.config
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base package
=======================
Subpackages
-----------
.. toctree::
bob.fusion.base.algorithm
bob.fusion.base.config
bob.fusion.base.script
bob.fusion.base.tools
Module contents
---------------
.. automodule:: bob.fusion.base
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.script package
==============================
Submodules
----------
bob.fusion.base.script.bob_fuse module
--------------------------------------
.. automodule:: bob.fusion.base.script.bob_fuse
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.script.plot_fusion_decision_boundary module
-----------------------------------------------------------
.. automodule:: bob.fusion.base.script.plot_fusion_decision_boundary
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: bob.fusion.base.script
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.tools package
=============================
Submodules
----------
bob.fusion.base.tools.command_line module
-----------------------------------------
.. automodule:: bob.fusion.base.tools.command_line
:members:
:undoc-members:
:show-inheritance:
bob.fusion.base.tools.plotting module
-------------------------------------
.. automodule:: bob.fusion.base.tools.plotting
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: bob.fusion.base.tools
:members:
:undoc-members:
:show-inheritance:
bob.fusion package
==================
Subpackages
-----------
.. toctree::
bob.fusion.base
Module contents
---------------
.. automodule:: bob.fusion
:members:
:undoc-members:
:show-inheritance:
bob package
===========
Subpackages
-----------
.. toctree::
bob.fusion
Module contents
---------------
.. automodule:: bob
:members:
:undoc-members:
:show-inheritance:
......@@ -8,18 +8,18 @@
Running Score Fusion in Biometric Recognition Experiments
==========================================================
There are two scripts available in the package as of now and they work for verification scenarios.
Spoofing and Anti-spoofing scenarios are not considered yet in the scripts however the Python API allows for easy extension.
Each score fusion experiment requires at least a classifier.
The ``bob.fusion.base`` package itself implements two such classifiers: ``MLP`` and ``WeightedSum``.
The ``bob.fusion.base`` package itself implements three such classifiers: ``MLP``, ``LLR`` and ``WeightedSum``.
You can also use any class as a classifier that implements a ``fit(X[, y])`` and a ``decision_function(X)`` method.
An example is `sklearn.linear_model.LogisticRegression <http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html>`_.
You can also use pre-processors to pre-process your data. The pre-processor class should implement a ``fit_transform(X[, y])`` and a ``transform(X[, y, copy])`` methods. An example is `sklearn.preprocessing.StandardScaler <http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html>`_.
Using ``sklearn`` classifiers and pre-processors you can different fusion algorithms. Please take a look at some examples in ``bob.fusion.base.config.algorithm`` to see how it is done.
Using ``sklearn`` classifiers and pre-processors you can implement different fusion algorithms. Please take a look at some examples in ``bob.fusion.base.config.algorithm`` to see how it is done.
There are two scripts available in the package as of now and they work for verification scenarios.
Spoofing and Anti-spoofing scenarios are not considered yet **in the scripts** however the Python API allows for easy extension.
Also take a look at the scripts ``fuse.py`` and ``plot_fusion_decision_boundary.py`` and use them for your actual fusion experiments.
Also take a look at the scripts ``bob_fuse.py`` and ``plot_fusion_decision_boundary.py`` and use them for your actual fusion experiments.
.. include:: links.rst
......@@ -19,7 +19,7 @@ Users Guide
.. toctree::
:maxdepth: 2
fusion
guide
================
Reference Manual
......@@ -28,7 +28,7 @@ Reference Manual
.. toctree::
:maxdepth: 2
py_api
* :ref:`modindex`
==========
......@@ -36,22 +36,11 @@ References
==========
=========
ToDo-List
=========
This documentation is still under development.
Here is a list of things that needs to be done:
.. todolist::
testing
==================
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
.. include:: links.rst
bob.fusion.base
===============
.. toctree::
:maxdepth: 4
bob
===========================
Python API for bob.fusion.base
===========================
Details
-------
.. include:: links.rst
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment