diff --git a/benchmark_env.yml b/benchmark_env.yml new file mode 100644 index 0000000000000000000000000000000000000000..b4a0c24982ee2269fa80a4ba71c7cbf404bf76ee --- /dev/null +++ b/benchmark_env.yml @@ -0,0 +1,241 @@ +name: synbenchmark +channels: + - https://www.idiap.ch/software/bob/conda + - defaults +dependencies: + - _libgcc_mutex=0.1 + - _tflow_select=2.3.0 + - absl-py=0.12.0 + - aiohttp=3.7.4 + - argon2-cffi=20.1.0 + - astunparse=1.6.3 + - async-timeout=3.0.1 + - async_generator=1.10 + - attrs=20.3.0 + - backcall=0.2.0 + - blas=1.0 + - bleach=3.3.0 + - blinker=1.4 + - bob.bio.base=5.0.0 + - bob.bio.face=5.0.0 + - bob.blitz=2.0.23 + - bob.core=2.2.7 + - bob.db.atnt=2.0.17 + - bob.db.base=3.1.0 + - bob.extension=6.0.0 + - bob.io.base=3.0.10 + - bob.io.image=2.5.0 + - bob.ip.base=2.2.7 + - bob.ip.color=2.0.17 + - bob.ip.facedetect=4.0.0 + - bob.ip.gabor=2.0.18 + - bob.learn.activation=2.0.17 + - bob.learn.em=2.1.7 + - bob.learn.linear=2.1.9 + - bob.learn.tensorflow=2.0.0 + - bob.math=3.1.8 + - bob.measure=4.2.3 + - bob.pipelines=1.0.0 + - bob.sp=2.0.17 + - bokeh=2.3.1 + - boost=1.73.0 + - brotlipy=0.7.0 + - bzip2=1.0.8 + - c-ares=1.17.1 + - ca-certificates=2021.4.13 + - cachetools=4.2.2 + - certifi=2020.12.5 + - cffi=1.14.5 + - chardet=3.0.4 + - click=7.1.2 + - click-plugins=1.1.1 + - cloudpickle=1.6.0 + - coverage=5.5 + - cryptography=3.4.7 + - cycler=0.10.0 + - cython=0.29.23 + - cytoolz=0.11.0 + - dask=2021.4.0 + - dask-core=2021.4.0 + - dask-jobqueue=0.7.0 + - dbus=1.13.18 + - decorator=5.0.6 + - defusedxml=0.7.1 + - distributed=2021.4.0 + - entrypoints=0.3 + - expat=2.3.0 + - fontconfig=2.13.1 + - freetype=2.10.4 + - fsspec=0.9.0 + - gast=0.4.0 + - giflib=5.2.1 + - glib=2.68.1 + - google-auth=1.30.0 + - google-auth-oauthlib=0.4.4 + - google-pasta=0.2.0 + - greenlet=1.0.0 + - grpcio=1.36.1 + - gst-plugins-base=1.14.0 + - gstreamer=1.14.0 + - h5py=2.10.0 + - hdf5=1.10.6 + - heapdict=1.0.1 + - icu=58.2 + - idna=2.10 + - imageio=2.9.0 + - importlib-metadata=3.10.0 + - importlib_metadata=3.10.0 + - intel-openmp=2021.2.0 + - ipykernel=5.3.4 + - ipython=7.22.0 + - ipython_genutils=0.2.0 + - ipywidgets=7.6.3 + - jedi=0.17.0 + - jinja2=2.11.3 + - joblib=1.0.1 + - jpeg=9b + - jsonschema=3.2.0 + - jupyter=1.0.0 + - jupyter_client=6.1.12 + - jupyter_console=6.4.0 + - jupyter_core=4.7.1 + - jupyterlab_pygments=0.1.2 + - jupyterlab_widgets=1.0.0 + - keras-preprocessing=1.1.2 + - kiwisolver=1.3.1 + - lcms2=2.12 + - ld_impl_linux-64=2.33.1 + - libblitz=1.0.1 + - libboost=1.73.0 + - libffi=3.3 + - libgcc-ng=9.1.0 + - libgfortran-ng=7.3.0 + - libllvm10=10.0.1 + - libpng=1.6.37 + - libprotobuf=3.14.0 + - libsodium=1.0.18 + - libstdcxx-ng=9.1.0 + - libtiff=4.2.0 + - libuuid=1.0.3 + - libwebp-base=1.2.0 + - libxcb=1.14 + - libxml2=2.9.10 + - llvmlite=0.36.0 + - locket=0.2.1 + - lz4-c=1.9.3 + - markdown=3.3.4 + - markupsafe=1.1.1 + - matplotlib=3.3.4 + - matplotlib-base=3.3.4 + - mistune=0.8.4 + - mkl=2019.4 + - mkl-service=2.3.0 + - mkl_fft=1.3.0 + - mkl_random=1.1.0 + - msgpack-python=1.0.2 + - multidict=5.1.0 + - nbclient=0.5.3 + - nbconvert=6.0.7 + - nbformat=5.1.3 + - ncurses=6.2 + - nest-asyncio=1.5.1 + - networkx=2.5 + - notebook=6.3.0 + - numba=0.53.1 + - numpy=1.19.2 + - numpy-base=1.19.2 + - oauthlib=3.1.0 + - olefile=0.46 + - openssl=1.1.1k + - opt_einsum=3.1.0 + - packaging=20.9 + - pandas=1.2.4 + - pandoc=2.12 + - pandocfilters=1.4.3 + - parso=0.8.2 + - partd=1.2.0 + - pcre=8.44 + - pexpect=4.8.0 + - pickleshare=0.7.5 + - pillow=8.2.0 + - pip=21.0.1 + - prometheus_client=0.10.1 + - prompt-toolkit=3.0.17 + - prompt_toolkit=3.0.17 + - protobuf=3.14.0 + - psutil=5.8.0 + - ptyprocess=0.7.0 + - py-boost=1.73.0 + - pyasn1=0.4.8 + - pyasn1-modules=0.2.8 + - pycparser=2.20 + - pygments=2.8.1 + - pyjwt=1.7.1 + - pyopenssl=20.0.1 + - pyparsing=2.4.7 + - pyqt=5.9.2 + - pyrsistent=0.17.3 + - pysocks=1.7.1 + - python=3.8.8 + - python-dateutil=2.8.1 + - python-flatbuffers=1.12 + - pytz=2021.1 + - pywavelets=1.1.1 + - pyyaml=5.4.1 + - pyzmq=20.0.0 + - qt=5.9.7 + - qtconsole=5.0.3 + - qtpy=1.9.0 + - readline=8.1 + - requests=2.25.1 + - requests-oauthlib=1.3.0 + - rsa=4.7.2 + - scikit-image=0.18.1 + - scikit-learn=0.23.2 + - scipy=1.6.2 + - send2trash=1.5.0 + - setuptools=52.0.0 + - sip=4.19.13 + - six=1.15.0 + - sortedcontainers=2.3.0 + - sqlalchemy=1.4.7 + - sqlite=3.35.4 + - tabulate=0.8.9 + - tbb=2020.3 + - tblib=1.7.0 + - tensorboard=2.4.0 + - tensorboard-plugin-wit=1.6.0 + - tensorflow=2.4.1 + - tensorflow-base=2.4.1 + - tensorflow-estimator=2.4.1 + - termcolor=1.1.0 + - terminado=0.9.4 + - testpath=0.4.4 + - threadpoolctl=2.1.0 + - tifffile=2020.10.1 + - tk=8.6.10 + - toolz=0.11.1 + - tornado=6.1 + - traitlets=5.0.5 + - typing-extensions=3.7.4.3 + - typing_extensions=3.7.4.3 + - urllib3=1.26.4 + - vlfeat=0.9.21 + - wcwidth=0.2.5 + - webencodings=0.5.1 + - werkzeug=1.0.1 + - wheel=0.36.2 + - widgetsnbextension=3.5.1 + - wrapt=1.12.1 + - xarray=0.17.0 + - xz=5.2.5 + - yaml=0.2.5 + - yarl=1.6.3 + - zeromq=4.3.4 + - zict=2.0.0 + - zipp=3.4.1 + - zlib=1.2.11 + - zstd=1.4.5 + - pip: + - mxnet==1.8.0.post0 + - python-graphviz==0.8.4 diff --git a/bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/E.py b/bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/E.py index 0ce70c4bfe9f78baa490a56f617c5e6a612bf8c8..95f43a0557353779db8344ca559d1ef9411bcca2 100644 --- a/bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/E.py +++ b/bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/E.py @@ -1,3 +1,3 @@ from bob.bio.face.database.multipie import MultipieDatabase -database = MultipieDatabase(protocol='U') \ No newline at end of file +database = MultipieDatabase(protocol='E') \ No newline at end of file diff --git a/bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/P.py b/bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/P.py index f0603f9193d6566127527f5c1e8d10ed239b5f81..cf0081002459ee269b23bc9a8644c2533d6068f4 100644 --- a/bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/P.py +++ b/bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/P.py @@ -13,7 +13,7 @@ from sklearn.pipeline import make_pipeline # Kept cameras : ["08_0", "13_0", "14_0", "05_1", "05_0", "04_1", "19_0"] def get_database(): - csv_dir = './config/database/multipie/protocols' + csv_dir = './bob/paper/ijcb2021_synthetic_dataset/config/database/multipie/protocols' database = CSVDataset(dataset_protocol_path=csv_dir, protocol_name='P_center', diff --git a/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/E.py b/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/E.py index fc73f535f781adb55d3c96ee9d47e484259327be..39b6085e981ebe9d97e099038ada397a4191a98b 100644 --- a/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/E.py +++ b/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/E.py @@ -6,7 +6,7 @@ import os def get_database(protocol): image_dir = rc['bob.db.synmultipie.directory'] - csv_dir = './config/database/synmultipie/protocols' + csv_dir = './bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/protocols' sample_loader = CSVToSampleLoaderBiometrics(data_loader=bob.io.image.load, dataset_original_directory = image_dir, diff --git a/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/P.py b/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/P.py index 9b8e1335c48e2ac75e9ab31aea1d3c6836539ca0..d7fb2293b1ce5b9f27e17bfe4d821a0307e39d4d 100644 --- a/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/P.py +++ b/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/P.py @@ -5,7 +5,7 @@ from bob.bio.base.database import CSVToSampleLoaderBiometrics, CSVDataset def get_database(protocol): image_dir = rc['bob.db.synmultipie.directory'] - csv_dir = './config/database/synmultipie/protocols' + csv_dir = './bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/protocols' sample_loader = CSVToSampleLoaderBiometrics(data_loader=bob.io.image.load, dataset_original_directory = image_dir, diff --git a/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/U.py b/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/U.py index c3aa49c3024dc6b4801bfbc9478935e60e16db10..a9713fe4921ba04e7d04a7b31b59290b7bff3abf 100644 --- a/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/U.py +++ b/bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/U.py @@ -5,7 +5,7 @@ from bob.bio.base.database import CSVToSampleLoaderBiometrics, CSVDataset def get_database(protocol): image_dir = rc['bob.db.synmultipie.directory'] - csv_dir = './config/database/synmultipie/protocols' + csv_dir = './bob/paper/ijcb2021_synthetic_dataset/config/database/synmultipie/protocols' sample_loader = CSVToSampleLoaderBiometrics(data_loader=bob.io.image.load, dataset_original_directory = image_dir, diff --git a/bob/paper/ijcb2021_synthetic_dataset/script/benchmark.sh b/bob/paper/ijcb2021_synthetic_dataset/script/benchmark.sh new file mode 100644 index 0000000000000000000000000000000000000000..5842da7227081a7326906059c5bb8c708fa599c6 --- /dev/null +++ b/bob/paper/ijcb2021_synthetic_dataset/script/benchmark.sh @@ -0,0 +1,45 @@ +#!/bin/bash +### Run pipelines (bob bio pipelines) +output_dir=$(bob config get bob.synface.scores.directory)/benchmark +run_pipeline='bob bio pipeline vanilla-biometrics' + +declare -A baseline_paths=( + ["gabor_graph"]="gabor_graph" + ["lgbphs"]="lgbphs" + ["arcface"]="arcface-insightface" + ["inception_resnetv1_casiawebface"]="inception-resnetv1-casiawebface" + ["inception_resnetv2_casiawebface"]="inception-resnetv2-casiawebface" + ["resnet50_vgg2_arcface"]="resnet50-vgg2-arcface-2021" +) + +databases=( + multipie + synmultipie +) + +protocols=( + U + E + P +) + +baselines=( + gabor_graph + lgbphs + arcface + inception_resnetv1_casiawebface + inception_resnetv2_casiawebface + resnet50_vgg2_arcface +) + +set -x +for database in "${databases[@]}" +do + for protocol in "${protocols[@]}" + do + for baseline in "${baselines[@]}" + do + $run_pipeline -vv bob/paper/ijcb2021_synthetic_dataset/config/database/$database/$protocol.py "${baseline_paths[$baseline]}" -m -l sge -g dev -o $output_dir/$database/$protocol/$baseline + done + done +done diff --git a/bob/paper/ijcb2021_synthetic_dataset/script/generate_db.py b/bob/paper/ijcb2021_synthetic_dataset/script/generate_db.py index e57bc26d25461696fc1aecf586dccda854969107..57c2562da9f6a37bac978565f6e74be1126e8e45 100644 --- a/bob/paper/ijcb2021_synthetic_dataset/script/generate_db.py +++ b/bob/paper/ijcb2021_synthetic_dataset/script/generate_db.py @@ -61,10 +61,11 @@ def initialization( task_id, seed, ): + # Fix randomness tflib.init_tf({"rnd.np_random_seed": seed, "rnd.tf_random_seed": "auto"}) cropper = get_cropper() - generator = StyleGAN2Generator(randomize_noise=True, batch_size=4) + generator = StyleGAN2Generator(randomize_noise=False, batch_size=4) image_postprocessor = get_postprocessing_fn() image_dir = os.path.join(output_dir, "image") @@ -102,6 +103,7 @@ def initialization( @click.command( cls=ConfigCommand, + entry_point_group='generation_config', help="Generate a synthetic database using semantic augmentation in the latent space.", ) @click.option( @@ -153,6 +155,7 @@ def initialization( "-o", type=str, required=True, + default=rc['bob.db.synmultipie.directory'], help="Root of the output directory tree", cls=ResourceOption, ) diff --git a/setup.py b/setup.py index 9699428cbfee9346efdb768da649f7689e0c25bf..466641ba219a77dec8467a08936db149c1978e12 100644 --- a/setup.py +++ b/setup.py @@ -49,6 +49,11 @@ setup( 'multipie_U = bob.paper.ijcb2021_synthetic_dataset.config.project.multipie_U:database', 'multipie_E = bob.paper.ijcb2021_synthetic_dataset.config.project.multipie_E:database', 'multipie_P = bob.paper.ijcb2021_synthetic_dataset.config.project.multipie_P:database', + ], + "generation_config": [ + 'synmultipie = bob.paper.ijcb2021_synthetic_dataset.config.db_gen.syn_multipie', + 'uniqueness_no_ict = bob.paper.ijcb2021_synthetic_dataset.config.db_gen.uniqueness_no_ict', + 'uniqueness_ict = bob.paper.ijcb2021_synthetic_dataset.config.db_gen.uniqueness_ict_0.1' ] # add entry points (scripts, bob resources here, if any) },