Domain Specific Units

This section contains instructions on how to reproduce the experiments from Chapter 5 Domain Specific Units.

Exceptionally, these instructions will cover only the Thermal database. This would avoid this section to be extremely large. However, the same set of instructions applies to ALL heterogeneous face databases. To see all the available databases, check:

$ resources.py --types database
 List of registered databases:

 - bob.bio.htface 1.0.0 @  <experiment>/bob.bio.htface:
   + casia-nir-vis-2        --> bob.bio.htface.configs.databases.casia_nir_vis: database
   + cuhk-cufs              --> bob.bio.htface.configs.databases.cuhk_cufs: database
   + cuhk-cufsf             --> bob.bio.htface.configs.databases.cuhk_cufsf: database
   + eprip                  --> bob.bio.htface.configs.databases.eprip: database
   + fargo                  --> bob.bio.htface.configs.databases.fargo: database
   + fargo_depth            --> bob.bio.htface.configs.databases.fargo_depth: database
   + ldhf                   --> bob.bio.htface.configs.databases.ldhf: database
   + nivl                   --> bob.bio.htface.configs.databases.nivl: database
   + pola_thermal           --> bob.bio.htface.configs.databases.pola_thermal: database
   + thermal                --> bob.bio.htface.configs.databases.thermal: database

Thermal Experiments

The sequence of experiments in this subsection generates the necessary data that creates Figures 5.16, 5.17 and Table 5.10. This covers the training using Siamese/Triplet Networks, using Incep. Res. v2 and Incep. Res. v1 as DCNN basis and adaptation of \(\beta + W\) and \(\beta\).

Inception Resnet v2

The code below generates the cropped faces that are used to train the DSU for all the cases:

$ bob bio htface htface_baseline htface_idiap_msceleb_inception_v2_centerloss_gray thermal -- preprocess-training-data # generating prior

Siamese training adapting \(\beta + W\)

The code below trains the DSUs for: \(\theta_{[1-1](\beta + W)}\), \(\theta_{[1-2](\beta + W)}\), \(\theta_{[1-4](\beta + W)}\), \(\theta_{[1-5](\beta + W)}\) and \(\theta_{[1-6](\beta + W)}\):

$ bob bio htface htface_train_dsu siamese_inceptionv2_first_layer_nonshared_batch_norm thermal # Training DSU 1-1
$ bob bio htface htface_train_dsu siamese_inceptionv2_adapt_1_2_nonshared_batch_norm thermal # Training DSU 1-2
$ bob bio htface htface_train_dsu siamese_inceptionv2_adapt_1_4_nonshared_batch_norm thermal # Training DSU 1-4
$ bob bio htface htface_train_dsu siamese_inceptionv2_adapt_1_5_nonshared_batch_norm thermal # Training DSU 1-5
$ bob bio htface htface_train_dsu siamese_inceptionv2_adapt_1_6_nonshared_batch_norm thermal # Training DSU 1-6

With all the DSUs trained, the corresponding experiments are generated via the following bash commands:

$ bob bio htface htface_baseline siamese_inceptionv2_first_layer_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv2_adapt_1_2_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv2_adapt_1_4_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv2_adapt_1_5_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv2_adapt_1_6_nonshared_batch_norm thermal -vv

Finally, after the execution of the experiments, Figure 5.16 (a) can be generated:

$ bob htface evaluate_and_squash \
  \
  <experiment_path>/thermal/htface_idiap_msceleb_inception_v2_centerloss_gray/ \
  <experiment_path>/thermal/siamese_inceptionv2_first_layer_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv2_adapt_1_2_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv2_adapt_1_4_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv2_adapt_1_5_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv2_adapt_1_6_nonshared_batch_norm/ \
  \
  --legends "Incep. Res. v2 gray" --legends "$\theta_{t[1-1]}(\beta + W)$" --legends "$\theta_{t[1-2]}(\beta + W)$" \
  --legends "$\theta_{t[1-4]}(\beta + W)$" --legends "$\theta_{t[1-5]}(\beta + W)$" --legends "$\theta_{t[1-6]}(\beta + W)$" \
  --special-linestyle \
  --report-name "v2_siamese.pdf" \
  --x-min 0 \
  --title ""

Note

It’s not necessary to run everything at once. Generate partial plots is a possibility. For more info check:

$ bob bio htface evaluate_and_squash --help

If everything goes alright the following plot should be dumped

_images/v2_siamese.png

Siamese training adapting \(\beta\)

The code below trains the DSUs for: \(\theta_{[1-1](\beta)}\), \(\theta_{[1-2](\beta)}\), \(\theta_{[1-4](\beta)}\), \(\theta_{[1-5](\beta)}\) and \(\theta_{[1-6](\beta)}\):

$ bob bio htface htface_train_dsu siamese_inceptionv2_first_layer_betas_nonshared_batch_norm thermal # Training DSU 1-1
$ bob bio htface htface_train_dsu siamese_inceptionv2_adapt_1_2_betas_nonshared_batch_norm thermal # Training DSU 1-2
$ bob bio htface htface_train_dsu siamese_inceptionv2_adapt_1_4_betas_nonshared_batch_norm thermal # Training DSU 1-4
$ bob bio htface htface_train_dsu siamese_inceptionv2_adapt_1_5_betas_nonshared_batch_norm thermal # Training DSU 1-5
$ bob bio htface htface_train_dsu siamese_inceptionv2_adapt_1_6_betas_nonshared_batch_norm thermal # Training DSU 1-6

With all the DSUs trained, the corresponding experiments are generated via the following bash commands:

$ bob bio htface htface_baseline siamese_inceptionv2_first_layer_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv2_adapt_1_2_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv2_adapt_1_4_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv2_adapt_1_5_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv2_adapt_1_6_betas_nonshared_batch_norm thermal -vv

Finally, after the execution of the experiments, Figure 5.17 (a) can be generated:

$ bob htface evaluate_and_squash \
  \
  <experiment_path>/thermal/htface_idiap_msceleb_inception_v2_centerloss_gray/ \
  <experiment_path>/thermal/siamese_inceptionv2_first_layer_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv2_adapt_1_2_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv2_adapt_1_4_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv2_adapt_1_5_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv2_adapt_1_6_betas_nonshared_batch_norm/ \
  \
  --legends "Incep. Res. v2 gray" --legends "$\theta_{t[1-1]}(\beta)$" --legends "$\theta_{t[1-2]}(\beta)$" \
  --legends "$\theta_{t[1-4]}(\beta)$" --legends "$\theta_{t[1-5]}(\beta)$" --legends "$\theta_{t[1-6]}(\beta)$" \
  --special-linestyle \
  --report-name "v2_siamese_betas.pdf" \
  --x-min 0 \
  --title ""

Note

It’s not necessary to run everything at once. Generate partial plots is a possibility. For more info check:

$ bob bio htface evaluate_and_squash --help

If everything goes alright the following plot should be dumped

_images/v2_siamese_bias.png

Triplet training adapting \(\beta + W\)

The code below trains the DSUs for: \(\theta_{[1-1](\beta + W)}\), \(\theta_{[1-2](\beta + W)}\), \(\theta_{[1-4](\beta + W)}\), \(\theta_{[1-5](\beta + W)}\) and \(\theta_{[1-6](\beta + W)}\):

$ bob bio htface htface_train_dsu triplet_inceptionv2_first_layer_nonshared_batch_norm thermal # Training DSU 1-1
$ bob bio htface htface_train_dsu triplet_inceptionv2_layers_1_2_nonshared_batch_norm thermal # Training DSU 1-2
$ bob bio htface htface_train_dsu triplet_inceptionv2_layers_1_4_nonshared_batch_norm thermal # Training DSU 1-4
$ bob bio htface htface_train_dsu triplet_inceptionv2_layers_1_5_nonshared_batch_norm thermal # Training DSU 1-5
$ bob bio htface htface_train_dsu triplet_inceptionv2_layers_1_6_nonshared_batch_norm thermal # Training DSU 1-6

With all the DSUs trained, the corresponding experiments are generated via the following bash commands:

$ bob bio htface htface_baseline triplet_inceptionv2_first_layer_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv2_layers_1_2_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv2_layers_1_4_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv2_layers_1_5_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv2_layers_1_6_nonshared_batch_norm thermal -vv

Finally, after the execution of the experiments the CMC curves can be generated as:

$ bob htface evaluate_and_squash \
  \
  <experiment_path>/thermal/htface_idiap_msceleb_inception_v2_centerloss_gray/ \
  <experiment_path>/thermal/triplet_inceptionv2_first_layer_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv2_layers_1_2_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv2_layers_1_4_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv2_layers_1_5_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv2_layers_1_6_nonshared_batch_norm/ \
  \
  --legends "Incep. Res. v2 gray" --legends "$\theta_{t[1-1]}(\beta + W)$" --legends "$\theta_{t[1-2]}(\beta + W)$" \
  --legends "$\theta_{t[1-4]}(\beta + W)$" --legends "$\theta_{t[1-5]}(\beta + W)$" --legends "$\theta_{t[1-6]}(\beta + W)$" \
  --special-linestyle \
  --report-name "v2_triplet.pdf" \
  --x-min 0 \
  --title ""

Note

It’s not necessary to run everything at once. Generate partial plots is a possibility. For more info check:

$ bob bio htface evaluate_and_squash --help

Triplet training adapting \(\beta\)

The code below trains the DSUs for: \(\theta_{[1-1](\beta)}\), \(\theta_{[1-2](\beta)}\), \(\theta_{[1-4](\beta)}\), \(\theta_{[1-5](\beta)}\) and \(\theta_{[1-6](\beta)}\):

$ bob bio htface htface_train_dsu triplet_inceptionv2_first_layer_nonshared_betas_batch_norm thermal # Training DSU 1-1
$ bob bio htface htface_train_dsu triplet_inceptionv2_layers_1_2_betas_nonshared_batch_norm thermal # Training DSU 1-2
$ bob bio htface htface_train_dsu triplet_inceptionv2_layers_1_4_betas_nonshared_batch_norm thermal # Training DSU 1-4
$ bob bio htface htface_train_dsu triplet_inceptionv2_layers_1_5_betas_nonshared_batch_norm thermal # Training DSU 1-5
$ bob bio htface htface_train_dsu triplet_inceptionv2_layers_1_6_betas_nonshared_batch_norm thermal # Training DSU 1-6

With all the DSUs trained, the corresponding experiments are generated via the following bash commands:

$ bob bio htface htface_baseline triplet_inceptionv2_first_layer_nonshared_betas_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv2_layers_1_2_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv2_layers_1_4_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv2_layers_1_5_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv2_layers_1_6_betas_nonshared_batch_norm thermal -vv

Finally, after the execution of the experiments the CMC curves can be generated as:

$ bob htface evaluate_and_squash \
  \
  <experiment_path>/thermal/htface_idiap_msceleb_inception_v2_centerloss_gray/ \
  <experiment_path>/thermal/triplet_inceptionv2_first_layer_nonshared_betas_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv2_layers_1_2_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv2_layers_1_4_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv2_layers_1_5_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv2_layers_1_6_betas_nonshared_batch_norm/ \
  \
  --legends "Incep. Res. v2 gray" --legends "$\theta_{t[1-1]}(\beta)$" --legends "$\theta_{t[1-2]}(\beta)$" \
  --legends "$\theta_{t[1-4]}(\beta)$" --legends "$\theta_{t[1-5]}(\beta)$" --legends "$\theta_{t[1-6]}(\beta)$" \
  --special-linestyle \
  --report-name "v2_triplet_betas.pdf" \
  --x-min 0 \
  --title ""

Note

It’s not necessary to run everything at once. Generate partial plots is a possibility. For more info check:

$ bob bio htface evaluate_and_squash --help

Inception Resnet v1

The code below generates the cropped faces that are used to train the DSU for all the cases:

$ bob bio htface htface_baseline htface_idiap_msceleb_inception_v1_centerloss_gray thermal -- preprocess-training-data # generating prior

Siamese training adapting \(\beta + W\)

The code below trains the DSUs for: \(\theta_{[1-1](\beta + W)}\), \(\theta_{[1-2](\beta + W)}\), \(\theta_{[1-4](\beta + W)}\), \(\theta_{[1-5](\beta + W)}\) and \(\theta_{[1-6](\beta + W)}\):

$ bob bio htface htface_train_dsu siamese_inceptionv1_first_layer_nonshared_batch_norm thermal # Training DSU 1-1
$ bob bio htface htface_train_dsu siamese_inceptionv1_adapt_1_2_nonshared_batch_norm thermal # Training DSU 1-2
$ bob bio htface htface_train_dsu siamese_inceptionv1_adapt_1_4_nonshared_batch_norm thermal # Training DSU 1-4
$ bob bio htface htface_train_dsu siamese_inceptionv1_adapt_1_5_nonshared_batch_norm thermal # Training DSU 1-5
$ bob bio htface htface_train_dsu siamese_inceptionv1_adapt_1_6_nonshared_batch_norm thermal # Training DSU 1-6

With all the DSUs trained, the corresponding experiments are generated via the following bash commands:

$ bob bio htface htface_baseline siamese_inceptionv1_first_layer_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv1_adapt_1_2_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv1_adapt_1_4_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv1_adapt_1_5_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv1_adapt_1_6_nonshared_batch_norm thermal -vv

Finally, after the execution of the experiments, Figure 5.16 (b) can be generated:

$ bob htface evaluate_and_squash \
  \
  <experiment_path>/thermal/htface_idiap_msceleb_inception_v1_centerloss_gray/ \
  <experiment_path>/thermal/siamese_inceptionv1_first_layer_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv1_adapt_1_2_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv1_adapt_1_4_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv1_adapt_1_5_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv1_adapt_1_6_nonshared_batch_norm/ \
  \
  --legends "Incep. Res. v1 gray" --legends "$\theta_{t[1-1]}(\beta + W)$" --legends "$\theta_{t[1-2]}(\beta + W)$" \
  --legends "$\theta_{t[1-4]}(\beta + W)$" --legends "$\theta_{t[1-5]}(\beta + W)$" --legends "$\theta_{t[1-6]}(\beta + W)$" \
  --special-linestyle \
  --report-name "v1_siamese.pdf" \
  --x-min 0 \
  --title ""

Note

It’s not necessary to run everything at once. Generate partial plots is a possibility. For more info check:

$ bob bio htface evaluate_and_squash --help

If everything goes alright the following plot should be dumped

_images/v1_siamese.png

Siamese training adapting \(\beta\)

The code below trains the DSUs for: \(\theta_{[1-1](\beta)}\), \(\theta_{[1-2](\beta)}\), \(\theta_{[1-4](\beta)}\), \(\theta_{[1-5](\beta)}\) and \(\theta_{[1-6](\beta)}\):

$ bob bio htface htface_train_dsu siamese_inceptionv1_first_layer_betas_nonshared_batch_norm thermal # Training DSU 1-1
$ bob bio htface htface_train_dsu siamese_inceptionv1_adapt_1_2_betas_nonshared_batch_norm thermal # Training DSU 1-2
$ bob bio htface htface_train_dsu siamese_inceptionv1_adapt_1_4_betas_nonshared_batch_norm thermal # Training DSU 1-4
$ bob bio htface htface_train_dsu siamese_inceptionv1_adapt_1_5_betas_nonshared_batch_norm thermal # Training DSU 1-5
$ bob bio htface htface_train_dsu siamese_inceptionv1_adapt_1_6_betas_nonshared_batch_norm thermal # Training DSU 1-6

With all the DSUs trained, the corresponding experiments are generated via the following bash commands:

$ bob bio htface htface_baseline siamese_inceptionv1_first_layer_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv1_adapt_1_2_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv1_adapt_1_4_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv1_adapt_1_5_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline siamese_inceptionv1_adapt_1_6_betas_nonshared_batch_norm thermal -vv

Finally, after the execution of the experiments, Figure 5.17 (a) can be generated:

$ bob htface evaluate_and_squash \
  \
  <experiment_path>/thermal/htface_idiap_msceleb_inception_v1_centerloss_gray/ \
  <experiment_path>/thermal/siamese_inceptionv1_first_layer_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv1_adapt_1_2_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv1_adapt_1_4_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv1_adapt_1_5_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/siamese_inceptionv1_adapt_1_6_betas_nonshared_batch_norm/ \
  \
  --legends "Incep. Res. v1 gray" --legends "$\theta_{t[1-1]}(\beta)$" --legends "$\theta_{t[1-2]}(\beta)$" \
  --legends "$\theta_{t[1-4]}(\beta)$" --legends "$\theta_{t[1-5]}(\beta)$" --legends "$\theta_{t[1-6]}(\beta)$" \
  --special-linestyle \
  --report-name "v1_siamese_betas.pdf" \
  --x-min 0 \
  --title ""

Note

It’s not necessary to run everything at once. Generate partial plots is a possibility. For more info check:

$ bob bio htface evaluate_and_squash --help

If everything goes alright the following plot should be dumped

_images/v1_siamese_bias.png

Triplet training adapting \(\beta + W\)

The code below trains the DSUs for: \(\theta_{[1-1](\beta + W)}\), \(\theta_{[1-2](\beta + W)}\), \(\theta_{[1-4](\beta + W)}\), \(\theta_{[1-5](\beta + W)}\) and \(\theta_{[1-6](\beta + W)}\):

$ bob bio htface htface_train_dsu triplet_inceptionv1_first_layer_nonshared_batch_norm thermal # Training DSU 1-1
$ bob bio htface htface_train_dsu triplet_inceptionv1_layers_1_2_nonshared_batch_norm thermal # Training DSU 1-2
$ bob bio htface htface_train_dsu triplet_inceptionv1_layers_1_4_nonshared_batch_norm thermal # Training DSU 1-4
$ bob bio htface htface_train_dsu triplet_inceptionv1_layers_1_5_nonshared_batch_norm thermal # Training DSU 1-5
$ bob bio htface htface_train_dsu triplet_inceptionv1_layers_1_6_nonshared_batch_norm thermal # Training DSU 1-6

With all the DSUs trained, the corresponding experiments are generated via the following bash commands:

$ bob bio htface htface_baseline triplet_inceptionv1_first_layer_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv1_layers_1_2_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv1_layers_1_4_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv1_layers_1_5_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv1_layers_1_6_nonshared_batch_norm thermal -vv

Finally, after the execution of the experiments the CMC curves can be generated as:

$ bob htface evaluate_and_squash \
  \
  <experiment_path>/thermal/htface_idiap_msceleb_inception_v1_centerloss_gray/ \
  <experiment_path>/thermal/triplet_inceptionv1_first_layer_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv1_layers_1_2_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv1_layers_1_4_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv1_layers_1_5_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv1_layers_1_6_nonshared_batch_norm/ \
  \
  --legends "Incep. Res. v1 gray" --legends "$\theta_{t[1-1]}(\beta + W)$" --legends "$\theta_{t[1-2]}(\beta + W)$" \
  --legends "$\theta_{t[1-4]}(\beta + W)$" --legends "$\theta_{t[1-5]}(\beta + W)$" --legends "$\theta_{t[1-6]}(\beta + W)$" \
  --special-linestyle \
  --report-name "v1_triplet.pdf" \
  --x-min 0 \
  --title ""

Note

It’s not necessary to run everything at once. Generate partial plots is a possibility. For more info check:

$ bob bio htface evaluate_and_squash --help

Triplet training adapting \(\beta\)

The code below trains the DSUs for: \(\theta_{[1-1](\beta)}\), \(\theta_{[1-2](\beta)}\), \(\theta_{[1-4](\beta)}\), \(\theta_{[1-5](\beta)}\) and \(\theta_{[1-6](\beta)}\):

$ bob bio htface htface_train_dsu triplet_inceptionv1_first_layer_nonshared_betas_batch_norm thermal # Training DSU 1-1
$ bob bio htface htface_train_dsu triplet_inceptionv1_layers_1_2_betas_nonshared_batch_norm thermal # Training DSU 1-2
$ bob bio htface htface_train_dsu triplet_inceptionv1_layers_1_4_betas_nonshared_batch_norm thermal # Training DSU 1-4
$ bob bio htface htface_train_dsu triplet_inceptionv1_layers_1_5_betas_nonshared_batch_norm thermal # Training DSU 1-5
$ bob bio htface htface_train_dsu triplet_inceptionv1_layers_1_6_betas_nonshared_batch_norm thermal # Training DSU 1-6

With all the DSUs trained, the corresponding experiments are generated via the following bash commands:

$ bob bio htface htface_baseline triplet_inceptionv1_first_layer_nonshared_betas_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv1_layers_1_2_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv1_layers_1_4_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv1_layers_1_5_betas_nonshared_batch_norm thermal -vv
$ bob bio htface htface_baseline triplet_inceptionv1_layers_1_6_betas_nonshared_batch_norm thermal -vv

Finally, after the execution of the experiments the CMC curves can be generated as:

$ bob htface evaluate_and_squash \
  \
  <experiment_path>/thermal/htface_idiap_msceleb_inception_v1_centerloss_gray/ \
  <experiment_path>/thermal/triplet_inceptionv1_first_layer_nonshared_betas_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv1_layers_1_2_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv1_layers_1_4_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv1_layers_1_5_betas_nonshared_batch_norm/ \
  <experiment_path>/thermal/triplet_inceptionv1_layers_1_6_betas_nonshared_batch_norm/ \
  \
  --legends "Incep. Res. v1 gray" --legends "$\theta_{t[1-1]}(\beta)$" --legends "$\theta_{t[1-2]}(\beta)$" \
  --legends "$\theta_{t[1-4]}(\beta)$" --legends "$\theta_{t[1-5]}(\beta)$" --legends "$\theta_{t[1-6]}(\beta)$" \
  --special-linestyle \
  --report-name "v1_triplet_betas.pdf" \
  --x-min 0 \
  --title ""

Note

It’s not necessary to run everything at once. Generate partial plots is a possibility. For more info check:

$ bob bio htface evaluate_and_squash --help

Relevant publications for this Section

  • [pdf] T. d. F. Pereira, A. Anjos and S. Marcel, “Heterogeneous Face Recognition Using Domain Specific Units,” in IEEE Transactions on Information Forensics and Security. doi: 10.1109/TIFS.2018.2885284