User GuideΒΆ
Score-level fusion is done (as the name suggests) using the scores generated by a biometric recognition or presentation attack detection (PAD) system. The idea of fusion is to integrate several systems into one macro system that produces one decision for a given biometric sample. For example, a face biometric system and a voice biometric system can be integrated together using score-level fusion to improve the performance of biometric recognition. Another example is to integrate one or several biometric recognition systems with one or several pad systems to improve both the recognition rate and the attack resilience. Fusion can be done between different biometric systems and/or pad systems. You can mix any number of biometric systems and pad systems in this package to do score-level fusion. The scores must comply the format of bob.bio.base and bob.pad.base packages.
The actual fusion can be done in different ways. For example, the simplest
approach to score-level fusion is to sum the scores of all systems. The way to
do the fusion in this package is by implementing an algorithm class that
inherits from bob.fusion.base.algorithm.Algorithm
:
An algorithm also takes a list of preprocessors (
bob.fusion.base.algorithm.Algorithm.preprocessors
) that are applied to data before fusion.A simple preprocessor can normalize data to be 0 mean and 1 std.
Preprocessors can also be trainable and they will be trained in
bob.fusion.base.algorithm.Algorithm.train_preprocessors
.After training the preprocessors and applying them on the data, the normalized data (data is score values) is used to train the fusion algorithm in
bob.fusion.base.algorithm.Algorithm.train
.After that,
bob.fusion.base.algorithm.Algorithm.fuse
is called on normalized scores to get the final decision score.
You can look into the source code of the
bob.fusion.base.script.routine_fusion
to see the actual steps that will
be run to do score-level fusion in this package.
All the computations are done using the following script:
$ bob fusion fuse --help
What you need is some training data (or a model_file that contains an already
trained algorithm) if your algorithm requires training and some scores to test
your algorithm on. See the Python API or run bob fusion
resource
for a list of already available algorithms.
Here is a minimal example to do MEAN fusion
(bob.fusion.base.algorithm.Weighted_Sum
) on a face recognition system
and a face PAD system.
$ bob fusion fuse -a mean face_bio/scores-{world,dev,eval} face_pad/scores-{train,dev,eval}
Finally, you can visualize the decision boundary of your fusion algorithm using
bob fusion boundary
.