From 42800e57fa4089d04aa94441160ae22bc96bc153 Mon Sep 17 00:00:00 2001 From: Olegs NIKISINS <onikisins@italix03.idiap.ch> Date: Mon, 2 Oct 2017 11:00:41 +0200 Subject: [PATCH] Updated the main doc on anomaly detection PAD for Aggregated Db, some doc for VideoSparseCoding preprocessor --- .../face/preprocessor/VideoSparseCoding.py | 29 ++ ...qm_anomaly_detection_aggr_db_grandtest.pdf | Bin 0 -> 20029 bytes ...qm_anomaly_detection_aggr_db_ph_ph_vid.pdf | Bin 0 -> 20037 bytes ...m_anomaly_detection_aggr_db_vid_vid_ph.pdf | Bin 0 -> 19931 bytes doc/index.rst | 1 + doc/other_pad_algorithms.rst | 366 ++++++++++++++++++ doc/resources.rst | 29 ++ 7 files changed, 425 insertions(+) create mode 100644 doc/img/ROC_iqm_anomaly_detection_aggr_db_grandtest.pdf create mode 100644 doc/img/ROC_iqm_anomaly_detection_aggr_db_ph_ph_vid.pdf create mode 100644 doc/img/ROC_iqm_anomaly_detection_aggr_db_vid_vid_ph.pdf create mode 100644 doc/other_pad_algorithms.rst diff --git a/bob/pad/face/preprocessor/VideoSparseCoding.py b/bob/pad/face/preprocessor/VideoSparseCoding.py index d4484adb..944ca82e 100644 --- a/bob/pad/face/preprocessor/VideoSparseCoding.py +++ b/bob/pad/face/preprocessor/VideoSparseCoding.py @@ -718,6 +718,35 @@ class VideoSparseCoding(Preprocessor, object): def comp_hist_of_sparse_codes(self, frames, method): """ Compute the histograms of sparse codes. + + **Parameters:** + + ``frame_container`` : FrameContainer + FrameContainer containing the frames with sparse codes for the + frontal, horizontal and vertical patches. Each frame is a 3D array. + The dimensionality of array is: + (``3`` x ``n_samples`` x ``n_words_in_the_dictionary``). + First array [0,:,:] contains frontal sparse codes. + Second array [1,:,:] contains horizontal sparse codes. + Third array [2,:,:] contains vertical sparse codes. + + ``method`` : :py:class:`str` + Name of the method to be used for combining the sparse codes into + a single feature vector. Two options are possible: "mean" and + "hist". If "mean" is selected the mean for ``n_samples`` dimension + is first computed. The resulting vectors for various types of + patches are then concatenated into a single feature vector. + If "hist" is selected, the values in the input array are first + binarized setting all non-zero elements to one. The rest of the + process is similar to the "mean" combination method. + + **Returns:** + + ``frame_container`` : FrameContainer + FrameContainer containing the frames with sparse codes for the + frontal, horizontal and vertical patches. Each frame is a 3D array. + The dimensionality of array is: + (``3`` x ``n_samples`` x ``n_words_in_the_dictionary``). """ histograms = [] diff --git a/doc/img/ROC_iqm_anomaly_detection_aggr_db_grandtest.pdf b/doc/img/ROC_iqm_anomaly_detection_aggr_db_grandtest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2175b5b169aadd33c6e78a66654f0c0bde764724 GIT binary patch literal 20029 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 literal 0 HcmV?d00001 diff --git a/doc/img/ROC_iqm_anomaly_detection_aggr_db_ph_ph_vid.pdf b/doc/img/ROC_iqm_anomaly_detection_aggr_db_ph_ph_vid.pdf new file mode 100644 index 0000000000000000000000000000000000000000..802a0369db76fbc2d0facb533f4d4ea46707bddd GIT binary patch literal 20037 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 literal 0 HcmV?d00001 diff --git a/doc/img/ROC_iqm_anomaly_detection_aggr_db_vid_vid_ph.pdf b/doc/img/ROC_iqm_anomaly_detection_aggr_db_vid_vid_ph.pdf new file mode 100644 index 0000000000000000000000000000000000000000..52bfea975f7d4b3070df1c63c8d5bd27008629dc GIT binary patch literal 19931 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 MLUwjpbveTS151U-&j0`b literal 0 HcmV?d00001 diff --git a/doc/index.rst b/doc/index.rst index fda461ea..f06c8df2 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -22,6 +22,7 @@ Users Guide installation baselines + other_pad_algorithms references resources api diff --git a/doc/other_pad_algorithms.rst b/doc/other_pad_algorithms.rst new file mode 100644 index 00000000..ac7efc11 --- /dev/null +++ b/doc/other_pad_algorithms.rst @@ -0,0 +1,366 @@ + + +.. _bob.pad.face.other_pad_algorithms: + + +=============================== + Executing Other Algorithms +=============================== + +This section explains how to execute face presentation attack detection (PAD) algorithms implemented +in ``bob.pad.face``. + +.. warning:: + + Algorithms introduced in this section might be in the process of publishing. Therefore, it is not + allowed to publish results introduced in this section without permission of the owner of the package. + If you are planning to use the results from this section, please contact the owner of the package first. + Please check the ``setup.py`` for contact information. + + +Running face PAD Experiments +------------------------------ + +To run the PAD experiments, the ``spoof.py`` script located in ``bin`` directory is used. +To see the description of the script you can type in the console: + +.. code-block:: sh + + $ spoof.py --help + +This script is explained in more detail in :ref:`bob.pad.base.experiments`. + +Usually it is a good idea to have at least verbose level 2 (i.e., calling +``spoof.py --verbose --verbose``, or the short version ``spoof.py +-vv``). + +.. note:: **Running in Parallel** + + To run the experiments in parallel, you can define an SGE grid or local host + (multi-processing) configurations as explained in + :ref:`running_in_parallel`. + + In short, to run in the Idiap SGE grid, you can simply add the ``--grid`` + command line option, with grid configuration parameters. To run experiments in parallel on + the local machine, simply add a ``--parallel <N>`` option, where ``<N>`` + specifies the number of parallel jobs you want to execute. + + +Database setups and face PAD algorithms are encoded using +:ref:`bob.bio.base.configuration-files`, all stored inside the package root, in +the directory ``bob/pad/face/config``. Documentation for each resource +is available on the section :ref:`bob.pad.face.resources`. + +.. warning:: + + You **cannot** run experiments just by executing the command line + instructions described in this guide. You **need first** to procure yourself + the raw data files that correspond to *each* database used here in order to + correctly run experiments with those data. Biometric data is considered + private date and, under EU regulations, cannot be distributed without a + consent or license. You may consult our + :ref:`bob.pad.face.resources.databases` resources section for checking + currently supported databases and accessing download links for the raw data + files. + + Once the raw data files have been downloaded, particular attention should be + given to the directory locations of those. Unpack the databases carefully + and annotate the root directory where they have been unpacked. + + Then, carefully read the *Databases* section of + :ref:`bob.pad.base.installation` on how to correctly setup the + ``~/.bob_bio_databases.txt`` file. + + Use the following keywords on the left side of the assignment (see + :ref:`bob.pad.face.resources.databases`): + + .. code-block:: text + + [YOUR_REPLAY_ATTACK_DIRECTORY] = /complete/path/to/replayattack-database/ + + Notice it is rather important to use the strings as described above, + otherwise ``bob.pad.base`` will not be able to correctly load your images. + + Once this step is done, you can proceed with the instructions below. + + +------------ + + +.. _bob.pad.face.other_pad_algorithms.aggregated_db: + +Anomaly detection based PAD on Aggregated Database +-------------------------------------------------------- + +This section summarizes the results of *anomaly detection* based face PAD experiments on the Aggregated Database. +The description of the database-related settings, which are used to run face PAD algorithms on the Aggregated Db is given here :ref:`bob.pad.face.resources.databases.aggregated_db`. To understand the settings in more details you can check the corresponding configuration file : ``bob/pad/face/config/aggregated_db.py``. + +------------ + + +Results for *grandtest* protocol +======================================================================== + +This section summarizes the evaluation results on the **grandtest** protocol of the Aggregated database for the following face PAD algorithms (for more details click on the corresponding algorithm): + +- :ref:`bob.pad.face.resources.face_pad.qm_one_class_gmm`, +- :ref:`bob.pad.face.resources.face_pad.qm_one_class_svm_aggregated_db`, +- :ref:`bob.pad.face.resources.face_pad.qm_lr`, +- :ref:`bob.pad.face.resources.face_pad.qm_svm_aggregated_db`. + +For a more detailed understanding of above pipe-lines you can also check corresponding configuration files: + +- ``bob/pad/face/config/qm_one_class_gmm.py``, +- ``bob/pad/face/config/qm_one_class_svm_aggregated_db.py``, +- ``bob/pad/face/config/qm_lr.py``, +- ``bob/pad/face/config/qm_svm_aggregated_db.py``. + +To run above algorithms on the :ref:`bob.pad.face.resources.databases.aggregated_db` database, using the ``grandtest`` protocol, execute the following: + +.. code-block:: sh + + $ spoof.py aggregated-db qm-one-class-gmm \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_1> + + $ spoof.py aggregated-db qm-one-class-svm-aggregated-db \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_2> + + $ spoof.py aggregated-db qm-lr \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_3> + + $ spoof.py aggregated-db qm-svm-aggregated-db \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_4> + +.. tip:: + + If you are in `idiap`_ you can use SGE grid to speed-up the calculations. + Simply add ``--grid idiap`` argument to the above command. For example: + + +To evaluate the results computing EER, HTER and plotting ROC you can use the +following command: + +.. code-block:: sh + + ./bin/evaluate.py \ + --dev-files \ + <PATH_TO_STORE_THE_RESULTS_1>/grandtest/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_2>/grandtest/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_3>/grandtest/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_4>/grandtest/scores/scores-dev \ + --eval-files \ + <PATH_TO_STORE_THE_RESULTS_1>/grandtest/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_2>/grandtest/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_3>/grandtest/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_4>/grandtest/scores/scores-eval \ + --legends \ + "IQM + one-class GMM + Aggregated Db" \ + "IQM + one-class SVM + Aggregated Db" \ + "IQM + two-class LR + Aggregated Db" \ + "IQM + two-class SVM + Aggregated Db" \ + -F 7 \ + --criterion EER \ + --roc <PATH_TO_STORE_THE_RESULTS>/ROC.pdf + +The EER/HTER errors for the :ref:`bob.pad.face.resources.databases.aggregated_db` database are summarized in the Table below: + ++------------------------+----------+----------+ +| Algorithm | EER,\% | HTER,\% | ++========================+==========+==========+ +| IQM + one-class GMM | 19.336 | 20.769 | ++------------------------+----------+----------+ +| IQM + one-class SVM | 28.137 | 34.776 | ++------------------------+----------+----------+ +| IQM + two-class LR | 10.354 | 11.856 | ++------------------------+----------+----------+ +| IQM + two-class SVM | 12.710 | 15.253 | ++------------------------+----------+----------+ + +The ROC curves for the particular experiment can be downloaded from here: + +:download:`ROC curve <img/ROC_iqm_anomaly_detection_aggr_db_grandtest.pdf>` + +------------ + + +Results for *photo-photo-video* protocol +======================================================================== + +This section summarizes the evaluation results on the **photo-photo-video** protocol of the Aggregated database for the following face PAD algorithms (for more details click on the corresponding algorithm): + +- :ref:`bob.pad.face.resources.face_pad.qm_one_class_gmm`, +- :ref:`bob.pad.face.resources.face_pad.qm_one_class_svm_aggregated_db`, +- :ref:`bob.pad.face.resources.face_pad.qm_lr`, +- :ref:`bob.pad.face.resources.face_pad.qm_svm_aggregated_db`. + +For a more detailed understanding of above pipe-lines you can also check corresponding configuration files: + +- ``bob/pad/face/config/qm_one_class_gmm.py``, +- ``bob/pad/face/config/qm_one_class_svm_aggregated_db.py``, +- ``bob/pad/face/config/qm_lr.py``, +- ``bob/pad/face/config/qm_svm_aggregated_db.py``. + +To run above algorithms on the :ref:`bob.pad.face.resources.databases.aggregated_db` database, using the ``photo-photo-video`` protocol, execute the following: + +.. code-block:: sh + + $ spoof.py aggregated-db qm-one-class-gmm \ + --protocol photo-photo-video \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_1> + + $ spoof.py aggregated-db qm-one-class-svm-aggregated-db \ + --protocol photo-photo-video \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_2> + + $ spoof.py aggregated-db qm-lr \ + --protocol photo-photo-video \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_3> + + $ spoof.py aggregated-db qm-svm-aggregated-db \ + --protocol photo-photo-video \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_4> + +.. tip:: + + If you are in `idiap`_ you can use SGE grid to speed-up the calculations. + Simply add ``--grid idiap`` argument to the above command. For example: + + +To evaluate the results computing EER, HTER and plotting ROC you can use the +following command: + +.. code-block:: sh + + ./bin/evaluate.py \ + --dev-files \ + <PATH_TO_STORE_THE_RESULTS_1>/photo-photo-video/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_2>/photo-photo-video/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_3>/photo-photo-video/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_4>/photo-photo-video/scores/scores-dev \ + --eval-files \ + <PATH_TO_STORE_THE_RESULTS_1>/photo-photo-video/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_2>/photo-photo-video/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_3>/photo-photo-video/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_4>/photo-photo-video/scores/scores-eval \ + --legends \ + "IQM + one-class GMM + Aggregated Db" \ + "IQM + one-class SVM + Aggregated Db" \ + "IQM + two-class LR + Aggregated Db" \ + "IQM + two-class SVM + Aggregated Db" \ + -F 7 \ + --criterion EER \ + --roc <PATH_TO_STORE_THE_RESULTS>/ROC.pdf + +The EER/HTER errors for the :ref:`bob.pad.face.resources.databases.aggregated_db` database are summarized in the Table below: + ++------------------------+----------+----------+ +| Algorithm | EER,\% | HTER,\% | ++========================+==========+==========+ +| IQM + one-class GMM | 22.075 | 14.470 | ++------------------------+----------+----------+ +| IQM + one-class SVM | 35.537 | 24.317 | ++------------------------+----------+----------+ +| IQM + two-class LR | 10.184 | 30.132 | ++------------------------+----------+----------+ +| IQM + two-class SVM | 10.527 | 21.926 | ++------------------------+----------+----------+ + +The ROC curves for the particular experiment can be downloaded from here: + +:download:`ROC curve <img/ROC_iqm_anomaly_detection_aggr_db_ph_ph_vid.pdf>` + +------------ + + +Results for *video-video-photo* protocol +======================================================================== + +This section summarizes the evaluation results on the **video-video-photo** protocol of the Aggregated database for the following face PAD algorithms (for more details click on the corresponding algorithm): + +- :ref:`bob.pad.face.resources.face_pad.qm_one_class_gmm`, +- :ref:`bob.pad.face.resources.face_pad.qm_one_class_svm_aggregated_db`, +- :ref:`bob.pad.face.resources.face_pad.qm_lr`, +- :ref:`bob.pad.face.resources.face_pad.qm_svm_aggregated_db`. + +For a more detailed understanding of above pipe-lines you can also check corresponding configuration files: + +- ``bob/pad/face/config/qm_one_class_gmm.py``, +- ``bob/pad/face/config/qm_one_class_svm_aggregated_db.py``, +- ``bob/pad/face/config/qm_lr.py``, +- ``bob/pad/face/config/qm_svm_aggregated_db.py``. + +To run above algorithms on the :ref:`bob.pad.face.resources.databases.aggregated_db` database, using the ``video-video-photo`` protocol, execute the following: + +.. code-block:: sh + + $ spoof.py aggregated-db qm-one-class-gmm \ + --protocol video-video-photo \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_1> + + $ spoof.py aggregated-db qm-one-class-svm-aggregated-db \ + --protocol video-video-photo \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_2> + + $ spoof.py aggregated-db qm-lr \ + --protocol video-video-photo \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_3> + + $ spoof.py aggregated-db qm-svm-aggregated-db \ + --protocol video-video-photo \ + --sub-directory <PATH_TO_STORE_THE_RESULTS_4> + +.. tip:: + + If you are in `idiap`_ you can use SGE grid to speed-up the calculations. + Simply add ``--grid idiap`` argument to the above command. For example: + + +To evaluate the results computing EER, HTER and plotting ROC you can use the +following command: + +.. code-block:: sh + + ./bin/evaluate.py \ + --dev-files \ + <PATH_TO_STORE_THE_RESULTS_1>/video-video-photo/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_2>/video-video-photo/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_3>/video-video-photo/scores/scores-dev \ + <PATH_TO_STORE_THE_RESULTS_4>/video-video-photo/scores/scores-dev \ + --eval-files \ + <PATH_TO_STORE_THE_RESULTS_1>/video-video-photo/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_2>/video-video-photo/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_3>/video-video-photo/scores/scores-eval \ + <PATH_TO_STORE_THE_RESULTS_4>/video-video-photo/scores/scores-eval \ + --legends \ + "IQM + one-class GMM + Aggregated Db" \ + "IQM + one-class SVM + Aggregated Db" \ + "IQM + two-class LR + Aggregated Db" \ + "IQM + two-class SVM + Aggregated Db" \ + -F 7 \ + --criterion EER \ + --roc <PATH_TO_STORE_THE_RESULTS>/ROC.pdf + +The EER/HTER errors for the :ref:`bob.pad.face.resources.databases.aggregated_db` database are summarized in the Table below: + ++------------------------+----------+----------+ +| Algorithm | EER,\% | HTER,\% | ++========================+==========+==========+ +| IQM + one-class GMM | 13.503 | 29.794 | ++------------------------+----------+----------+ +| IQM + one-class SVM | 18.234 | 39.502 | ++------------------------+----------+----------+ +| IQM + two-class LR | 1.499 | 30.268 | ++------------------------+----------+----------+ +| IQM + two-class SVM | 1.422 | 24.901 | ++------------------------+----------+----------+ + +The ROC curves for the particular experiment can be downloaded from here: + +:download:`ROC curve <img/ROC_iqm_anomaly_detection_aggr_db_vid_vid_ph.pdf>` + +------------ + + +.. include:: links.rst + + diff --git a/doc/resources.rst b/doc/resources.rst index ca93b11a..971e96de 100644 --- a/doc/resources.rst +++ b/doc/resources.rst @@ -135,3 +135,32 @@ Frame differences based features (motion analysis) + SVM for Aggregated Database .. automodule:: bob.pad.face.config.frame_diff_svm_aggregated_db :members: + + +.. _bob.pad.face.resources.face_pad.qm_lr: + +Image Quality Measures as features of facial region + Logistic Regression +============================================================================================================================ + +.. automodule:: bob.pad.face.config.qm_lr + :members: + + +.. _bob.pad.face.resources.face_pad.qm_one_class_gmm: + +Image Quality Measures as features of facial region + GMM-based one-class classifier (anomaly detector) +============================================================================================================================ + +.. automodule:: bob.pad.face.config.qm_one_class_gmm + :members: + + +.. _bob.pad.face.resources.face_pad.qm_one_class_svm_aggregated_db: + +Image Quality Measures as features of facial region + one-class SVM classifier (anomaly detector) for Aggregated Database +============================================================================================================================ + +.. automodule:: bob.pad.face.config.qm_one_class_svm_aggregated_db + :members: + + -- GitLab