From da3111a141a12c481f325f8f3d9ed2da9acb6259 Mon Sep 17 00:00:00 2001 From: Amir MOHAMMADI <amir.mohammadi@idiap.ch> Date: Tue, 10 Jul 2018 09:18:28 +0200 Subject: [PATCH] Handle different verify scripts using an option --- bob/bio/base/script/baseline.py | 65 +++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/bob/bio/base/script/baseline.py b/bob/bio/base/script/baseline.py index e0c8ecd8..c5c4cbae 100644 --- a/bob/bio/base/script/baseline.py +++ b/bob/bio/base/script/baseline.py @@ -8,34 +8,40 @@ A script to run biometric recognition baselines from .. import load_resource -from .verify import main as verify import os from ..baseline import get_available_databases, search_preprocessor -from bob.extension.scripts.click_helper import verbosity_option +from bob.extension.scripts.click_helper import ( + verbosity_option, log_parameters) import click import tempfile import logging -import os logger = logging.getLogger("bob.bio.base") +EPILOG = '''\b +Example: + $ bob bio baseline eigenface atnt -vvv + +which will run the eigenface baseline (from bob.bio.face) on the atnt +database. +''' + + @click.command(context_settings={'ignore_unknown_options': True, - 'allow_extra_args': True}) + 'allow_extra_args': True}, epilog=EPILOG) @click.argument('baseline', required=True) @click.argument('database', required=True) +@click.option('--parallel-training', default='verify', show_default=True, + type=click.Choice(('verify', 'gmm', 'isv', 'ivector')), + help='Which script to use for training the algorithm. Some ' + 'algorithms would train more efficiently using a different ' + 'script.') @verbosity_option() @click.pass_context -def baseline(ctx, baseline, database, **kwargs): +def baseline(ctx, baseline, database, parallel_training, **kwargs): """Run a biometric recognition baseline. - \b - Example: - $ bob bio baseline eigenface atnt -vvv - - which will run the eigenface baseline (from bob.bio.face) on the atnt - database. - \b Check out all baselines available by running: `resource.py --types baseline` @@ -52,6 +58,8 @@ def baseline(ctx, baseline, database, **kwargs): Hint: pass `--result-directory <dir>` to set the directory for resulting score files """ + log_parameters(logger) + # Triggering training for each baseline/database loaded_baseline = load_resource( baseline, 'baseline', package_prefix="bob.bio.") @@ -90,22 +98,31 @@ verbose = {verbose} verbose=ctx.meta['verbosity'], ) + if parallel_training == "verify": + from .verify import main + elif parallel_training == "gmm": + from bob.bio.gmm.script.verify_gmm import main + elif parallel_training == "isv": + from bob.bio.gmm.script.verify_isv import main + elif parallel_training == "ivector": + from bob.bio.gmm.script.verify_ivector import main + + algorithm = loaded_baseline.algorithm + if 'gmm' in algorithm and parallel_training != 'gmm': + logger.warning("GMM algorithms can train faster using the " + "``--parallel-training gmm`` option.") + if 'isv' in algorithm and parallel_training != 'isv': + logger.warning("ISV algorithms can train faster using the " + "``--parallel-training isv`` option.") + if 'ivector' in algorithm and parallel_training != 'ivector': + logger.warning("ivector algorithms can train faster using the " + "``--parallel-training ivector`` option.") + with tempfile.NamedTemporaryFile(mode='w+t', prefix='{}_'.format(baseline), suffix='.py', delete=False, dir='.') as f: f.write(config) f.flush() f.seek(0) - verify([f.name] + ctx.args) + main([f.name] + ctx.args) click.echo("You may want to delete `{}' after the experiments are " "finished running.".format(f.name)) - - if "gmm" in loaded_baseline.algorithm: - from bob.bio.gmm.script.verify_gmm import main as verify - elif "isv" in loaded_baseline.algorithm: - from bob.bio.gmm.script.verify_isv import main as verify - elif "ivector" in loaded_baseline.algorithm: - from bob.bio.gmm.script.verify_ivector import main as verify - else: - from .verify import main as verify - - verify(parameters + ctx.args) -- GitLab