Example on how to use the scalable implementation of PLDA and how to reproduce experiments of the article
Project description
This package contains scripts that shows how to use the implementation of the scalable formulation of Probabilistic Linear Discriminant Analysis (PLDA), integrated into bob, as well as how to reproduce experiments of the article mentioned below. It is implemented and maintained via github.
If you use this package and/or its results, please cite the following publications:
The original paper with the scalable formulation of PLDA explained in details:
@article{ElShafey_TPAMI_2013, author = {El Shafey, Laurent and McCool, Chris and Wallace, Roy and Marcel, S{\'{e}}bastien}, title = {A Scalable Formulation of Probabilistic Linear Discriminant Analysis: Applied to Face Recognition}, year = {2013}, month = jul, journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence}, volume = {35}, number = {7}, pages = {1788-1794}, doi = {10.1109/TPAMI.2013.38}, pdf = {http://publications.idiap.ch/downloads/papers/2013/ElShafey_TPAMI_2013.pdf} }
Bob as the core framework used to run the experiments:
@inproceedings{Anjos_ACMMM_2012, author = {A. Anjos and L. El Shafey and R. Wallace and M. G\"unther and C. McCool and S. Marcel}, title = {Bob: a free signal processing and machine learning toolbox for researchers}, year = {2012}, month = oct, booktitle = {20th ACM Conference on Multimedia Systems (ACMMM), Nara, Japan}, publisher = {ACM Press}, url = {http://publications.idiap.ch/downloads/papers/2012/Anjos_Bob_ACMMM12.pdf}, }
If you decide to use the Multi-PIE database, you should also mention the following paper, where it is introduced:
@article{Gross_IVC_2010, author = {Gross, Ralph and Matthews, Iain and Cohn, Jeffrey and Kanade, Takeo and Baker, Simon}, title = {Multi-PIE}, journal = {Image and Vision Computing}, year = {2010}, month = may, volume = {28}, number = {5}, issn = {0262-8856}, pages = {807--813}, numpages = {7}, doi = {10.1016/j.imavis.2009.08.002}, url = {http://dx.doi.org/10.1016/j.imavis.2009.08.002}, acmid = {1747071}, }
If you only use the Multi-PIE annotations, you should cite the following paper since annotations were made for the experiments of this work:
@article{ElShafey_TPAMI_2013, author = {El Shafey, Laurent and McCool, Chris and Wallace, Roy and Marcel, S{\'{e}}bastien}, title = {A Scalable Formulation of Probabilistic Linear Discriminant Analysis: Applied to Face Recognition}, year = {2013}, month = jul, journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence}, volume = {35}, number = {7}, pages = {1788-1794}, doi = {10.1109/TPAMI.2013.38}, pdf = {http://publications.idiap.ch/downloads/papers/2013/ElShafey_TPAMI_2013.pdf} }
Installation
There are two options you can follow to get this package installed and operational on your computer: you can use automatic installers like pip (or easy_install) or manually download, unpack and use zc.buildout to create a virtual work environment just for this package.
Using an automatic installer
Using pip is the easiest (shell commands are marked with a $ signal):
$ pip install xbob.paper.tpami2013
You can also do the same with easy_install:
$ easy_install xbob.paper.tpami2013
This will download and install this package plus any other required dependencies. It will also verify if the version of Bob you have installed is compatible.
This scheme works well with virtual environments by virtualenv or if you have root access to your machine. Otherwise, we recommend you use the next option.
Using zc.buildout
Download the latest version of this package from PyPI and unpack it in your working area:
$ wget http://pypi.python.org/packages/source/x/xbob.paper.tpami2013/xbob.paper.tpami2013-0.2.0a0.zip $ unzip xbob.paper.tpami2013-0.2.0a0.zip $ cd xbob.paper.tpami2013
The installation of the toolkit itself uses buildout. You don’t need to understand its inner workings to use this package. Here is a recipe to get you started:
$ python bootstrap.py $ ./bin/buildout
These two commands should download and install all non-installed dependencies and get you a fully operational test and development environment.
Please note that this package also requires that bob (>= 1.2.0) is installed.
PLDA tutorial
The following example consists of a simple script, that makes use of PLDA modeling on the Fisher’s iris dataset. It performs the following tasks:
Train a PLDA model using the first two classes of the dataset
Enroll a class-specific PLDA model for the third class of the dataset
Compute (verification) scores for both positive and negative samples
Plot the distribution of the scores and save it into a file
To run this simple example, you just need to execute the following command:
$ ./bin/plda_example_iris.py --output-img plda_example_iris.png
Reproducing experiments
It is currently possible to reproduce the experiments on Multi-PIE using the PLDA algorithm. In particular, the Figure 2 of the article can be easily reproduced, by following the steps described below, as well as the HTER reported on Table 3.
The experiments that make use of the LFW database may be integrated later on in this package.
Note for Grid Users
At Idiap, we use the powerful Sun Grid Engine (SGE) to parallelize our job submissions as much as we can. At the Biometrics group, we have developed a little toolbox <http://pypi.python.org/pypi/gridtk> that can submit and manage jobs at the Idiap computing grid through SGE.
The following sections will explain how to reproduce the paper results in single (non-gridified) jobs. If you are at Idiap, you could run the following commands on the SGE infrastructure, by applying the ‘–grid’ flag to any command. This may also work on other locations with an SGE infrastructure, but will likely require some configuration changes in the gridtk utility.
Multi-PIE dataset
Getting the data
- You first need to buy and download the Multi-PIE database:
- and to download the annotations available here:
Feature extraction
The following command will extract LBP histograms features. You should set the paths to the data according to your own environment:
$ ./bin/lbph_features.py --image-dir /PATH/TO/MULTIPIE/IMAGES --annotation-dir /PATH/TO/MULTIPIE/ANNOTATIONS --output-dir /PATH/TO/MULTIPIE/OUTPUT_DIR/
Dimensionality reduction
Once the features has been extracted, they are projected into a lower dimensional subspace using Principal Component Analysis (PCA):
$ ./bin/pca_features.py --output-dir /PATH/TO/MULTIPIE/OUTPUT_DIR/
Proposed system: PLDA modeling and scoring
PLDA is then applied on the dimensionality reduced features.
- This involves three different steps:
Training
Model enrollment
Scoring
The following command will perform all these steps:
$ ./bin/toolchain_plda.py --output-dir /PATH/TO/MULTIPIE/OUTPUT_DIR/
Then, the HTER on the evaluation set can be obtained using the evaluation script from the bob library as follows:
$ ./bin/bob_compute_perf.py -d /PATH/TO/MULTIPIE/OUTPUT_DIR/U/plda/scores/scores-dev -t /PATH/TO/MULTIPIE/OUTPUT_DIR/U/plda/scores/scores-eval -x
The HTER on the evaluation set, when using the the EER on the development set as the criterium for the threshold, corresponds to the PLDA value reported on Table 3 of the article mentioned above.
If you want to reproduce the Figure 2 of the article, you can run the following commands (instead of the previous one):
$ ./bin/experiment_plda_subworld.py --output-dir /PATH/TO/MULTIPIE/OUTPUT_DIR/ $ ./bin/plot_figure2.py --output-dir /PATH/TO/MULTIPIE/OUTPUT_DIR/
Then, the value of the HTER on Table 3 of the article (for the PLDA system) corresponds to the one, where the full training set is used, and might similarly be obtained as follows:
$ ./bin/bob_compute_perf.py -d /PATH/TO/MULTIPIE/OUTPUT_DIR/U/plda_subworld_76/scores/scores-dev -t /PATH/TO/MULTIPIE/OUTPUT_DIR/U/plda_subworld_76/scores/scores-eval -x
The previous commands will run the PLDA toolchain several times for a varying number of training samples. Please note, that this will require a lot of time to complete (one to two days on a recent workstation such as one with an Intel Core i7 CPU).
Baseline 1: PCA on the LBP histograms
The LBP histogram features were used in combination with the PCA classification technique (commonly called Eigenfaces in the face recognition litterature).
- This involves three different steps:
PCA subspace training
Model enrollment
Scoring (with an Euclidean distance)
The following command will perform all these steps:
$ ./bin/toolchain_pca.py --n-outputs 2048 --output-dir /PATH/TO/MULTIPIE/OUTPUT_DIR/
Then, the HTER on the evaluation set can be obtained using the evaluation script from the bob library as follows:
$ ./bin/bob_compute_perf.py -d /PATH/TO/MULTIPIE/OUTPUT_DIR/U/lda/scores/scores-dev -t /PATH/TO/MULTIPIE/OUTPUT_DIR/U/lda/scores/scores-eval -x
This value corresponds to the one of the PCA baseline reported on Table 3 of the article (Once more, be aware of differences due to the implementation changes in the feature extraction process and algorithm parameters that have not been kept). These results are obtained for a PCA subspace of rank 2048, which was found to be the optimal PCA subspace size, when we tuned this parameter using the LBPH features.
Baseline 2: LDA on the PCA projected LBP histograms
The PCA projected LBP histogram features considered for the PLDA system were also used in combination with the Fisher’s LDA classification technique (commonly called Fisherfaces in the face recognition litterature).
- This involves three different steps:
LDA subspace training
Model enrollment
Scoring (with an Euclidean distance)
The following command will perform all these steps:
$ ./bin/toolchain_lda.py --output-dir /PATH/TO/MULTIPIE/OUTPUT_DIR/
Then, the HTER on the evaluation set can be obtained using the evaluation script from the bob library as follows:
$ ./bin/bob_compute_perf.py -d /PATH/TO/MULTIPIE/OUTPUT_DIR/U/lda/scores/scores-dev -t /PATH/TO/MULTIPIE/OUTPUT_DIR/U/lda/scores/scores-eval -x
This value corresponds to the one of the LDA baseline reported on Table 3 of the PLDA article (Once more, be aware of slight differences due to the implementation changes in the feature extraction process). These results are obtained for a LDA subspace of rank 64, which was found to be the optimal LDA subspace size, when we tuned this parameter using the initial LBPH features.
Baseline 3: LBP histogram classification with Chi square scoring
The LBP histogram features might be used in combination with a distance such as the Chi Square distance, to obtain a face recognition system.
- This involves two different steps:
Model enrollment
Scoring (with a chi square distance)
The following command will perform all these steps:
$ ./bin/toolchain_lbph.py --output-dir /PATH/TO/MULTIPIE/OUTPUT_DIR/
Then, the HTER on the evaluation set can be obtained using the evaluation script from the bob library as follows:
$ ./bin/bob_compute_perf.py -d /PATH/TO/MULTIPIE/OUTPUT_DIR/U/lbph_chisquare/scores/scores-dev -t /PATH/TO/MULTIPIE/OUTPUT_DIR/U/lbph_chisquare/scores/scores-eval -x
This value corresponds to the one of the LBP histogram (chi square) baseline reported on Table 3 of article (Once more, be aware of slight differences due to the implementation changes on the feature extraction process).
Reporting bugs
The package is open source and maintained via github.
If you are facing technical issues to be able to run the scripts of this package, please send a message on the Bob’s mailing list.
If you find a problem wrt. to this satelitte package, you can file a ticket on the github issue tracker of this satellite package.
If you find a problem wrt. to the PLDA implementation, you can file an ticket on Bob’s issue tracker .
Please follow these guidelines when (or even better before) reporting any bug.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file xbob.paper.tpami2013-0.2.0a3.zip
.
File metadata
- Download URL: xbob.paper.tpami2013-0.2.0a3.zip
- Upload date:
- Size: 78.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a25c2588576a7c346ef0c3f37569394d08fe0ce06048de08d68c371c99aab31 |
|
MD5 | ad5b2a8177ba46db8725e7f868f8e3a1 |
|
BLAKE2b-256 | e2c39d9ce001ca80075dfb152283363d10e288ee229df051ddbdccec78e50688 |