User’s Guide

This package contains the access API and descriptions for the CUHK Face Sketch Database (CUFS) database. It only contains the Bob accessor methods to use the DB directly from python, with our certified protocols. The actual raw data for the database should be downloaded from the original URL.

The Database Interface

The bob.db.cuhk_cufs.Database complies with the standard biometric verification database as described in bob.db.base, implementing the interface bob.db.base.SQLiteDatabase.

CUHK CUFS Protocols

For this database we developed two major blocks of protocols. One for face identification (search) and one for face verification (comparison).

Search protocols

Defines a set of protocols for VIS->Skectch and Sketch->VIS face identification (search) in a close-set. These protocols were organized in the same way as in:

 @article{klare2013heterogeneous,
   title={Heterogeneous face recognition using kernel prototype similarities},
   author={Klare, Brendan F and Jain, Anil K},
   journal={Pattern Analysis and Machine Intelligence, IEEE Transactions on},
   volume={35},
   number={6},
   pages={1410--1422},
   year={2013},
   publisher={IEEE}
}
For each task (VIS->Sketch or Sketch->VIS) the 606 subjects are split in 5 sets where:
  • 404 subjects are used for training

  • 202 subjects are used for evaluation

To fetch the object files using, lets say the first split for the VIS->sketch protocol, use the following piece of code:

>>> import bob.db.cufs
>>> db = bob.db.cufs.Database()
>>>
>>> #fetching the files for training
>>> training = db.objects(protocol="search_split1_p2s", groups="world")
>>>
>>> #fetching the files for testing
>>> galery =  db.objects(protocol="search_split1_p2s", groups="dev", purposes="enroll")
>>> probes =  db.objects(protocol="search_split1_p2s", groups="dev", purposes="probe")
>>>

To list the available protocols type:

>>> import bob.db.cufs
>>> db = bob.db.cufs.Database()
>>> print(db.protocols())

Comparison protocols

Defines a set of protocols for VIS->Skectch and Sketch->VIS face verification (comparison). These set of protocols were designed by IDIAP Research Institute team.

There are four protocols for each task (VIS->Sketch or Sketch->VIS) and, for each one, the 606 subjects are split in the sets:

  • ARFACE set (`arface_p2s` and `arface_s2p`) In this set of protocols only pair of images of the ARFACE database are considered. The 123 pairs are split in:

    • 44 subjects are used for training

    • 40 subjects are used for development

    • 39 subjects are used for evaluation

  • XM2VTS set (`xm2vts_p2s` and `xm2vts_s2p`) In this set of protocols only pair of images of the XM2VTS database are considered. The 295 pairs are split in:

    • 118 subjects are used for training

    • 88 subjects are used for development

    • 89 subjects are used for evaluation

  • CUHK set (`cuhk_p2s` and `cuhk_s2p`) In this set of protocols only pair of images of the XM2VTS database are considered. The 188 pairs are split in:

    • 75 subjects are used for training

    • 56 subjects are used for development

    • 57 subjects are used for evaluation

  • ALL Mixed set (`cuhk_p2s` and `cuhk_s2p`). This is a mix of all databases (ARFACE + XM2VTS + CUHK). In this set of protocols only pair of images of the XM2VTS database are considered. The 188 pairs are split in:

    • 237 subjects are used for training

    • 184 subjects are used for development

    • 185 subjects are used for evaluation

To fetch the object files using, lets say the VIS->sketch comparison protocol for the ARFACE, use the following piece of code:

>>> import bob.db.cufsf
>>> db = bob.db.cufs.Database()
>>>
>>> #fetching the files for training
>>> training = db.objects(protocol="arface_p2s", groups="world")
>>>
>>> #fetching the files for development
>>> galery_dev =  db.objects(protocol="arface_p2s", groups="dev", purposes="enroll")
>>> probes_dev =  db.objects(protocol="arface_p2s", groups="dev", purposes="probe")
>>>
>>> #fetching the files for evaluation
>>> galery_eval =  db.objects(protocol="arface_p2s", groups="eval", purposes="enroll")
>>> probes_eval =  db.objects(protocol="arface_p2s", groups="eval", purposes="probe")
>>>

Score Normalization

This database API also provides methods to get identities for Z-Norm a T-Norm (score normalization techniques) [BENGIO].

Z-Norm

The Z-Norm or Zero Normalization normalize the scores in such a way that allows the selection of a global decision threshold. The Z-Norm aligns the imposter score distributions of all probes to zero mean and scaling them to unit variance. [score]

The intuition behind Z-Norm in the VIS->Sketch task is to shift the Sketch distribution close to the VIS score distribution.

To fetch the Z-Norm object files for the first split of the search protocol (just an example), use the following code:

>>> import bob.db.cufs
>>> db = bob.db.cufs.Database()
>>> zobjects = db.zobjects(protocol="search_split1_p2s")

T-Norm

The T-Norm or Test Normalization or cohort noalization normalizes the scores at test time (computes statistics for the normalization at test time). Usually this normalization is carried out, for each identity, against a specific group of identities, a.k.a cohort, which are considered to be “difficult” to recognize.

To fetch the T-Norm object files for the first split of the search protocol (just an example), use the following code:

>>> import bob.db.cufs
>>> db = bob.db.cufs.Database()
>>> zobjects = db.tobjects(protocol="search_split1_p2s")