Skip to content
Snippets Groups Projects
user avatar
Vedrana KRIVOKUCA authored
4d65b067
History
user avatar 4d65b067

Towards Measuring the Amount of Discriminatory Information in Fingervein Biometric Characteristics Using a Relative Entropy Estimator

This package is part of the signal-processing and machine learning toolbox Bob. It contains the source code to reproduce the following chapter:

@inbook{km19,
      author = "Krivoku{\'{c}}a, Vedrana and Gomez-Barrero, Marta and Marcel, S{\'{e}}bastien and Rathgeb, Christian and Busch, Christoph",
      booktitle = "Handbook of Vascular Biometrics",
      editor = "Uhl, Andreas and Veldhuis, Raymond and Busch, Christoph and Marcel, S{\'{e}}bastien",
      pages = "507-525",
      publisher = "Springer",
      title = "Towards Measuring the Amount of Discriminatory Information in Fingervein Biometric Characteristics Using a Relative Entropy Estimator",
      year = "2020"
}

If you use this package and/or its results, please cite both the package and the corresponding chapter. Also, please ensure that you include the two original Bob references (Bob) in your citations.

Software Installation

The first thing you must do is to install all the required software to reproduce the experiments in this paper. Note that the installation instructions are based on conda and that, for this paper, we currently only support Python 2.7 on Linux 64-bit architectures. Keeping this in mind, proceed with the installation as follows:

  1. Install Miniconda.

  2. Open up a terminal and follow instructions 3-7 by typing in the given commands.

  3. Navigate to your working directory:

    $ cd [path_to_your_working_directory]
  1. Clone the GitLab repository containing the code package:

    $ git clone https://gitlab.idiap.ch/bob/bob.chapter.fingerveins_relative_entropy
  2. Navigate to the cloned directory:

    $ cd bob.chapter.fingerveins_relative_entropy
  3. Create a conda environment containing all the necessary package dependencies:

    $ conda env create -f environment.yml
  4. Activate the environment as follows:

    $ conda activate bob.chapter.fingerveins_relative_entropy.env
  5. Generate the necessary scripts:

    $ buildout

Downloading the Databases

The next thing you must do is to download the two fingervein databases used in our experiments: VERA and UTFVP. Please refer to the following websites to do this:

Take note of the directories in which you have stored the downloaded databases. Then, create a textfile named .bob_bio_databases.txt and store it in your home directory. Inside this textfile, insert the following two lines:

[YOUR_VERAFINGER_DIRECTORY] = path_to_vera_database
[YOUR_UTFVP_DIRECTORY] = path_to_utfvp_database

Make sure you replace path_to_vera_database with the path to your downloaded VERA database and path_to_utfvp_database with the path to your downloaded UTFVP database.

Running the Experiments

You are now ready to run the experiments to reproduce the results from the chapter! To do this, follow steps 1-8:

  1. Figure 1:

    In your terminal, run the following command to generate Figure 1 from the chapter:

    $ ./bin/plot_fig1.py

    View the resulting figures, located in bob.chapter.fingerveins_relative_entropy/results/fig1_lower.pdf and bob.chapter.fingerveins_relative_entropy/results/fig1_higher.pdf for lower and higher D(G||I) values, respectively.

  2. Table 1:

    In your terminal, run the following commands, one at a time, to extract fingervein features using the WLD, RLT and MC extractors, respectively, and to calculate the corresponding RE and EER, on the VERA database:

    $ ./bin/calc_table1.py -d 'vera' -e 'wld'
    $ ./bin/calc_table1.py -d 'vera' -e 'rlt'
    $ ./bin/calc_table1.py -d 'vera' -e 'mc'

    View the RE and EER results for each extractor in bob.chapter.fingerveins_relative_entropy/results/table1.txt. Note that the results are all rounded to 4 decimal places, because the saved RE values will be used later to calculate the NRE, but in Table 1 in the chapter we only use 1 decimal place.

    In your terminal, run the following commands, one at a time, to extract fingervein features using the WLD, RLT and MC extractors, respectively, and to calculate the RE and EER, on the UTFVP database:

    $ ./bin/calc_table1.py -d 'utfvp' -e 'wld'
    $ ./bin/calc_table1.py -d 'utfvp' -e 'rlt'
    $ ./bin/calc_table1.py -d 'utfvp' -e 'mc'

    View the RE and EER results for each extractor in bob.chapter.fingerveins_relative_entropy/results/table1.txt.

    Please be aware that it might take a while for each of the above experiments to complete. This is particularly true for the RLT extractor and for the UTFVP database in general.

    If you wish to inspect the output of each stage of the experimental process, you may look inside the bob.chapter.fingerveins_relative_entropy/results/ directory, under the database-specific and extractor-specific sub-directories. For example, the outputs for the MC extractor on the VERA database will be stored in the bob.chapter.fingerveins_relative_entropy/results/vera/mc/ directory. Inside each extractor's results directory, you will find the following sub-directories: preprocessed, extracted, models, Full for VERA and full for UTFVP, and gridtk_logs. These directories store the results of the full fingervein recognition pipeline, starting from preprocessing the images in the database to calculating the match scores between different fingervein feature vectors. In particular:

    • preprocessed: contains the preprocessed finger images;
    • extracted: contains the extracted fingervein features;
    • models: contains the enrolled fingervein features;
    • Full/nonorm/scores-dev (VERA) or full/nonorm/scores-dev (UTFVP): textfile that contains the Hamming Distance (HD) between every possible pair of extracted fingervein feature vectors (Full or full is the name of the matching protocol used, which in this case just means that the HD is calculated between all possible pairs of finger samples);
    • gridtk_logs: contains messages logging the full experimental procedure.
  3. Figure 3:

    In your terminal, run the following command to generate Figure 3 from the chapter:

    $ ./bin/plot_fig3.py

    View the resulting figures, located in bob.chapter.fingerveins_relative_entropy/results/fig3_rlt.pdf and bob.chapter.fingerveins_relative_entropy/results/fig3_mc.pdf for the RLT and MC score distributions, respectively.

  4. Figure 4:

    In your terminal, run the following command to generate Figure 4 from the chapter:

    $ ./bin/plot_fig4.py

    View the resulting figures, located in bob.chapter.fingerveins_relative_entropy/results/fig4_min.pdf and bob.chapter.fingerveins_relative_entropy/results/fig4_max.pdf for the minimum and maximum NRE systems, respectively.

    NOTE: Since the comparison scores for the Minimum NRE system are randomly generated in the range [0, 0.5], the corresponding figure (i.e., fig4_min.pdf) may not look exactly the same as the one in the chapter; however, it should be similar.

  5. Table 2:

    In your terminal, run the following command to generate the results in Table 2 from the chapter:

    $ ./bin/calc_table2.py

    View the RE and NRE results for each database-extractor system in bob.chapter.fingerveins_relative_entropy/results/table2.txt.

  6. Figure 5:

    In your terminal, run the following command to generate Figure 5 from the chapter:

    $ ./bin/plot_fig5.py

    View the resulting figures, located in bob.chapter.fingerveins_relative_entropy/results/fig5_lower.pdf and bob.chapter.fingerveins_relative_entropy/results/fig5_higher.pdf for the lower NRE and higher NRE systems, respectively.

  7. Figure 6:

    In your terminal, run the following command to generate Figure 6 from the chapter:

    $ ./bin/plot_fig6.py

    View the resulting figures, located in bob.chapter.fingerveins_relative_entropy/results/fig6_higher.pdf and bob.chapter.fingerveins_relative_entropy/results/fig6_lower.pdf for the higher NRE and lower NRE systems, respectively.

  8. Figure 7 and Table 3:

    In your terminal, run the following command to generate Figure 7 and the results in Table 3 from the chapter:

    $ ./bin/epsilon_experiment.py

    Note that this experiment will take some time to run.

    View the resulting figures, located in bob.chapter.fingerveins_relative_entropy/results/fig7_RE.pdf and bob.chapter.fingerveins_relative_entropy/results/fig7_NRE.pdf for the RE versus epsilon and NRE versus epsilon plots, respectively.

    View the RE and NRE results for the different epsilon values in bob.chapter.fingerveins_relative_entropy/results/table3.txt.

  1. Figure 8 and Table 4:

    In your terminal, run the following command to generate Figure 8 and the results in Table 4 from the chapter:

    $ ./bin/k_experiment.py

    Note that this experiment will take some time to run.

    View the resulting figures, located in bob.chapter.fingerveins_relative_entropy/results/fig8_RE.pdf and bob.chapter.fingerveins_relative_entropy/results/fig8_NRE.pdf for the RE versus k and NRE versus k plots, respectively.

    View the RE and NRE results for the different k values in bob.chapter.fingerveins_relative_entropy/results/table4.txt.

Contact

If you have any questions or issues relating to this software package, please contact Vedrana Krivokuca Hahn (vkrivokuca@idiap.ch or vedrana.krivokuca@idiap.ch) or our development mailing list.