From ed7569b5fe20f659c3e782f7ce9f1ae3dd4445cd Mon Sep 17 00:00:00 2001 From: Amir MOHAMMADI Date: Wed, 25 May 2022 09:08:28 +0200 Subject: [PATCH] Adapted to changes introduced in bob.bio.base!296 * Adapted to changes introduced in bob.bio.base!296 * removed the Histogram algorithm as it was not used --- bob/bio/face/__init__.py | 1 - bob/bio/face/algorithm/Histogram.py | 236 -------------------------- bob/bio/face/algorithm/__init__.py | 23 --- bob/bio/face/config/baseline/dummy.py | 10 +- bob/bio/face/database/frgc.py | 4 +- bob/bio/face/database/gbu.py | 2 +- bob/bio/face/database/ijbc.py | 8 +- bob/bio/face/database/lfw.py | 4 +- bob/bio/face/database/replaymobile.py | 2 +- bob/bio/face/database/rfw.py | 2 +- bob/bio/face/database/scface.py | 2 +- bob/bio/face/embeddings/mxnet.py | 3 +- bob/bio/face/embeddings/opencv.py | 3 +- bob/bio/face/embeddings/pytorch.py | 3 +- bob/bio/face/embeddings/tensorflow.py | 3 +- bob/bio/face/test/test_algorithms.py | 87 ---------- bob/bio/face/test/test_databases.py | 1 + bob/bio/face/utils.py | 21 ++- doc/implemented.rst | 16 -- notebooks/50-shades-of-face.ipynb | 4 +- notebooks/inject_samples.ipynb | 2 +- setup.py | 2 - 22 files changed, 44 insertions(+), 395 deletions(-) delete mode 100644 bob/bio/face/algorithm/Histogram.py delete mode 100644 bob/bio/face/algorithm/__init__.py delete mode 100644 bob/bio/face/test/test_algorithms.py diff --git a/bob/bio/face/__init__.py b/bob/bio/face/__init__.py index 596c7ab..15acd28 100644 --- a/bob/bio/face/__init__.py +++ b/bob/bio/face/__init__.py @@ -1,6 +1,5 @@ # isort: skip_file from . import preprocessor # noqa: F401 -from . import algorithm # noqa: F401 from . import script # noqa: F401 from . import database # noqa: F401 from . import annotator # noqa: F401 diff --git a/bob/bio/face/algorithm/Histogram.py b/bob/bio/face/algorithm/Histogram.py deleted file mode 100644 index f32694e..0000000 --- a/bob/bio/face/algorithm/Histogram.py +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# Manuel Guenther - -import numpy - -from bob.bio.base.algorithm import Algorithm - - -def chi_square(*args): - """ - Calculates the chi-square distance between two histograms. - - @param hist1 The first histogram - @param hist2 The second histogram - - @returns The chi-square distance between the two histograms - """ - if len(args) == 2: - h1, h2 = args - d = 0 - for i in range(h1.shape[0]): - if h1[i] != h2[i]: - d += int(((h1[i] - h2[i]) ** 2) / (h1[i] + h2[i])) - return d - else: - # histogram intersection with sparse histograms - index_1, value_1, index_2, value_2 = args - raise NotImplementedError( - "chi_square distance with sparse histograms is not implemented yet" - ) - - -def histogram_intersection(*args): - """ - Calculates the histogram intersection between two histograms. - - @param hist1 The first histogram - @param hist2 The second histogram - - @returns The histogram intersection between the two histograms - """ - if len(args) == 2: - hist1, hist2 = args - return numpy.sum(numpy.minimum(hist1, hist2)) - else: - # histogram intersection with sparse histograms - index_1, value_1, index_2, value_2 = args - i1, i2, i1_end, i2_end = 0, 0, index_1.shape[0], index_2.shape[0] - p1, p2 = index_1[i1], index_2[i2] - sum = 0 - while i1 < i1_end and i2 < i2_end: - p1 = index_1[i1] - p2 = index_2[i2] - if p1 == p2: - sum += numpy.minimum(value_1[i1], value_2[i2]) - i1 += 1 - i2 += 1 - elif p1 < p2: - i1 += 1 - else: - i2 += 1 - return sum - - -class Histogram(Algorithm): - """Computes the distance between histogram sequences. - - Both sparse and non-sparse representations of histograms are supported. - For enrollment, to date only the averaging of histograms is implemented. - - **Parameters:** - - distance_function : function - The function to be used to compare two histograms. - This function should accept sparse histograms. - - is_distance_function : bool - Is the given ``distance_function`` distance function (lower values are better) or a similarity function (higher values are better)? - - multiple_probe_scoring : str or ``None`` - The way, scores are fused when multiple probes are available. - See :py:func:`bob.bio.base.score_fusion_strategy` for possible values. - """ - - def __init__( - self, - distance_function=chi_square, - is_distance_function=True, - multiple_probe_scoring="average", - ): - - # call base class constructor - Algorithm.__init__( - self, - distance_function=str(distance_function), - is_distance_function=is_distance_function, - multiple_model_scoring=None, - multiple_probe_scoring=multiple_probe_scoring, - ) - - # remember distance function - self.distance_function = distance_function - self.factor = -1.0 if is_distance_function else 1 - - def _is_sparse(self, feature): - assert isinstance(feature, numpy.ndarray) - return feature.ndim == 2 - - def _check_feature(self, feature, sparse): - assert isinstance(feature, numpy.ndarray) - if sparse: - # check that we have a 2D array - assert feature.ndim == 2 - assert feature.shape[0] == 2 - else: - assert feature.ndim == 1 - - def enroll(self, enroll_features): - """enroll(enroll_features) -> model - - Enrolls a model by taking the average of all histograms. - - enroll_features : [1D or 2D :py:class:`numpy.ndarray`] - The histograms that should be averaged. - Histograms can be specified sparse (2D) or non-sparse (1D) - - **Returns:** - - model : 1D or 2D :py:class:`numpy.ndarray` - The averaged histogram, sparse (2D) or non-sparse (1D). - """ - assert len(enroll_features) - sparse = self._is_sparse(enroll_features[0]) - [self._check_feature(feature, sparse) for feature in enroll_features] - - if sparse: - # get all indices for the sparse model - values = {} - # iterate through all sparse features - for feature in enroll_features: - # collect the values by index - for j in range(feature.shape[1]): - index = int(feature[0, j]) - value = feature[1, j] / float(len(enroll_features)) - # add up values - if index in values: - values[index] += value - else: - values[index] = value - - # create model containing all the used indices - model = numpy.ndarray((2, len(values)), dtype=numpy.float64) - for i, index in enumerate(sorted(values.keys())): - model[0, i] = index - model[1, i] = values[index] - else: - model = numpy.zeros(enroll_features[0].shape, dtype=numpy.float64) - # add up models - for feature in enroll_features: - model += feature - # normalize by number of models - model /= float(len(enroll_features)) - - # return averaged model - return model - - def score(self, model, probe): - """score(model, probe) -> score - - Computes the score of the probe and the model using the desired histogram distance function. - The resulting score is the negative distance, if ``is_distance_function = True``. - Both sparse and non-sparse models and probes are accepted, but their sparseness must agree. - - **Parameters:** - - model : 1D or 2D :py:class:`numpy.ndarray` - The model enrolled by the :py:meth:`enroll` function. - - probe : 1D or 2D :py:class:`numpy.ndarray` - The probe histograms, which can be specified sparse (2D) or non-sparse (1D) - - **Returns:** - - score : float - The resulting similarity score. - """ - sparse = self._is_sparse(probe) - self._check_feature(model, sparse) - self._check_feature(probe, sparse) - - if sparse: - # assure that the probe is sparse as well - return self.factor * self.distance_function( - model[0, :], model[1, :], probe[0, :], probe[1, :] - ) - else: - return self.factor * self.distance_function(model, probe) - - # overwrite functions to avoid them being documented. - def train_projector(*args, **kwargs): - raise NotImplementedError( - "This function is not implemented and should not be called." - ) - - def load_projector(*args, **kwargs): - pass - - def project(*args, **kwargs): - raise NotImplementedError( - "This function is not implemented and should not be called." - ) - - def write_feature(*args, **kwargs): - raise NotImplementedError( - "This function is not implemented and should not be called." - ) - - def read_feature(*args, **kwargs): - raise NotImplementedError( - "This function is not implemented and should not be called." - ) - - def train_enroller(*args, **kwargs): - raise NotImplementedError( - "This function is not implemented and should not be called." - ) - - def load_enroller(*args, **kwargs): - pass - - def score_for_multiple_models(self, models, probe): - - self._check_feature(probe, self._is_sparse(probe)) - scores = [self.score(m, probe) for m in models] - return scores diff --git a/bob/bio/face/algorithm/__init__.py b/bob/bio/face/algorithm/__init__.py deleted file mode 100644 index c321215..0000000 --- a/bob/bio/face/algorithm/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# isort: skip_file -from .Histogram import Histogram - -# gets sphinx autodoc done right - don't remove it -def __appropriate__(*args): - """Says object was actually declared here, and not in the import module. - Fixing sphinx warnings of not being able to find classes, when path is shortened. - Parameters: - - *args: An iterable of objects to modify - - Resolves `Sphinx referencing issues - ` - """ - - for obj in args: - obj.__module__ = __name__ - - -__appropriate__( - Histogram, -) -__all__ = [_ for _ in dir() if not _.startswith("_")] diff --git a/bob/bio/face/config/baseline/dummy.py b/bob/bio/face/config/baseline/dummy.py index ded6970..b8c78a6 100644 --- a/bob/bio/face/config/baseline/dummy.py +++ b/bob/bio/face/config/baseline/dummy.py @@ -1,9 +1,10 @@ from sklearn.pipeline import make_pipeline +from sklearn.preprocessing import FunctionTransformer -from bob.bio.base.pipelines import Distance, PipelineSimple +from bob.bio.base.algorithm import Distance +from bob.bio.base.pipelines import PipelineSimple from bob.bio.face.utils import lookup_config_from_database from bob.pipelines import wrap -from bob.pipelines.transformers import SampleLinearize ( annotation_type, @@ -37,7 +38,10 @@ def load(annotation_type, fixed_positions=None): ToGray(), transform_extra_arguments=transform_extra_arguments, ), - SampleLinearize(), + wrap( + ["sample"], + FunctionTransformer(lambda X: [x.flatten() for x in X]), + ), ) algorithm = Distance() diff --git a/bob/bio/face/database/frgc.py b/bob/bio/face/database/frgc.py index da8e777..9fcdefc 100644 --- a/bob/bio/face/database/frgc.py +++ b/bob/bio/face/database/frgc.py @@ -14,7 +14,7 @@ from bob.bio.base.database import CSVDataset, CSVToSampleLoaderBiometrics from bob.bio.face.database.sample_loaders import EyesAnnotations from bob.extension import rc from bob.extension.download import get_file -from bob.pipelines.utils import hash_string +from bob.pipelines import hash_string class FRGCDatabase(CSVDataset): @@ -51,7 +51,7 @@ class FRGCDatabase(CSVDataset): ), annotation_type=annotation_type, fixed_positions=fixed_positions, - allow_scoring_with_all_biometric_references=True, + score_all_vs_all=True, group_probes_by_reference_id=True, memory_demanding=True, ) diff --git a/bob/bio/face/database/gbu.py b/bob/bio/face/database/gbu.py index 89f5c56..7640560 100644 --- a/bob/bio/face/database/gbu.py +++ b/bob/bio/face/database/gbu.py @@ -166,7 +166,7 @@ class GBUDatabase(Database): super().__init__( name="gbu", protocol=protocol, - allow_scoring_with_all_biometric_references=True, + score_all_vs_all=True, annotation_type="eyes-center", fixed_positions=fixed_positions, memory_demanding=True, diff --git a/bob/bio/face/database/ijbc.py b/bob/bio/face/database/ijbc.py index b3233e8..6d03d2f 100644 --- a/bob/bio/face/database/ijbc.py +++ b/bob/bio/face/database/ijbc.py @@ -10,8 +10,8 @@ import bob.io.base from bob.bio.base.pipelines.abstract_classes import Database from bob.extension import rc +from bob.pipelines import hash_string from bob.pipelines.sample import DelayedSample, SampleSet -from bob.pipelines.utils import hash_string logger = logging.getLogger(__name__) @@ -131,14 +131,14 @@ class IJBCDatabase(Database): if original_directory is None or not os.path.exists(original_directory): raise ValueError( - "Invalid or non existent `original_directory`: f{original_directory}" + f"Invalid or non existent `original_directory`: {original_directory}" ) self._check_protocol(protocol) super().__init__( name="ijbc", protocol=protocol, - allow_scoring_with_all_biometric_references=False, + score_all_vs_all=False, annotation_type="bounding-box", fixed_positions=None, memory_demanding=True, @@ -154,7 +154,7 @@ class IJBCDatabase(Database): # For the test4 protocols if "test4" in protocol: - self.allow_scoring_with_all_biometric_references = True + self.score_all_vs_all = True def _load_metadata(self, protocol): # Load CSV files diff --git a/bob/bio/face/database/lfw.py b/bob/bio/face/database/lfw.py index e70271e..6bf0fdd 100644 --- a/bob/bio/face/database/lfw.py +++ b/bob/bio/face/database/lfw.py @@ -98,7 +98,7 @@ class LFWDatabase(Database): if original_directory is None or not os.path.exists(original_directory): raise ValueError( - "Invalid or non existent `original_directory`: f{original_directory}." + f"Invalid or non existent `original_directory`: {original_directory}." "Please, do `bob config set bob.bio.face.lfw.directory PATH` to set the LFW data directory." ) @@ -164,7 +164,7 @@ class LFWDatabase(Database): super().__init__( name="lfw", protocol=protocol, - allow_scoring_with_all_biometric_references=protocol[0] == "o", + score_all_vs_all=protocol[0] == "o", annotation_type=annotation_type, fixed_positions=fixed_positions, memory_demanding=False, diff --git a/bob/bio/face/database/replaymobile.py b/bob/bio/face/database/replaymobile.py index c03af8e..06d39f9 100644 --- a/bob/bio/face/database/replaymobile.py +++ b/bob/bio/face/database/replaymobile.py @@ -16,9 +16,9 @@ from bob.bio.base.database import CSVDataset, CSVToSampleLoaderBiometrics from bob.bio.base.utils.annotations import read_annotation_file from bob.extension import rc from bob.extension.download import get_file +from bob.pipelines import hash_string from bob.pipelines.sample import DelayedSample from bob.pipelines.sample_loaders import AnnotationsLoader -from bob.pipelines.utils import hash_string logger = logging.getLogger(__name__) diff --git a/bob/bio/face/database/rfw.py b/bob/bio/face/database/rfw.py index ae8f96a..c8ba17d 100644 --- a/bob/bio/face/database/rfw.py +++ b/bob/bio/face/database/rfw.py @@ -82,7 +82,7 @@ class RFWDatabase(Database): super().__init__( name="rfw", protocol=protocol, - allow_scoring_with_all_biometric_references=False, + score_all_vs_all=False, annotation_type="eyes-center", fixed_positions=None, memory_demanding=False, diff --git a/bob/bio/face/database/scface.py b/bob/bio/face/database/scface.py index a462398..021ed02 100644 --- a/bob/bio/face/database/scface.py +++ b/bob/bio/face/database/scface.py @@ -56,7 +56,7 @@ class SCFaceDatabase(CSVDataset): ), annotation_type=annotation_type, fixed_positions=fixed_positions, - allow_scoring_with_all_biometric_references=True, + score_all_vs_all=True, ) @staticmethod diff --git a/bob/bio/face/embeddings/mxnet.py b/bob/bio/face/embeddings/mxnet.py index 12f1464..37a417c 100644 --- a/bob/bio/face/embeddings/mxnet.py +++ b/bob/bio/face/embeddings/mxnet.py @@ -163,7 +163,8 @@ class ArcFaceInsightFace_LResNet100(MxNetTransformer): self.model = model -from bob.bio.base.pipelines import Distance, PipelineSimple +from bob.bio.base.algorithm import Distance +from bob.bio.base.pipelines import PipelineSimple from bob.bio.face.utils import ( cropped_positions_arcface, dnn_default_cropping, diff --git a/bob/bio/face/embeddings/opencv.py b/bob/bio/face/embeddings/opencv.py index 940aab9..81d719c 100644 --- a/bob/bio/face/embeddings/opencv.py +++ b/bob/bio/face/embeddings/opencv.py @@ -8,7 +8,8 @@ import os from sklearn.base import BaseEstimator, TransformerMixin from sklearn.utils import check_array -from bob.bio.base.pipelines import Distance, PipelineSimple +from bob.bio.base.algorithm import Distance +from bob.bio.base.pipelines import PipelineSimple from bob.bio.face.annotator import MTCNN from bob.bio.face.utils import dnn_default_cropping, embedding_transformer from bob.extension.download import get_file diff --git a/bob/bio/face/embeddings/pytorch.py b/bob/bio/face/embeddings/pytorch.py index 3a37ff6..dafcefe 100644 --- a/bob/bio/face/embeddings/pytorch.py +++ b/bob/bio/face/embeddings/pytorch.py @@ -12,7 +12,8 @@ import torch from sklearn.base import BaseEstimator, TransformerMixin from sklearn.utils import check_array -from bob.bio.base.pipelines import Distance, PipelineSimple +from bob.bio.base.algorithm import Distance +from bob.bio.base.pipelines import PipelineSimple from bob.bio.face.annotator import MTCNN from bob.bio.face.pytorch.facexzoo import FaceXZooModelFactory from bob.bio.face.utils import ( diff --git a/bob/bio/face/embeddings/tensorflow.py b/bob/bio/face/embeddings/tensorflow.py index 5b7ac64..37a0815 100644 --- a/bob/bio/face/embeddings/tensorflow.py +++ b/bob/bio/face/embeddings/tensorflow.py @@ -13,7 +13,8 @@ import tensorflow as tf from sklearn.base import BaseEstimator, TransformerMixin from sklearn.utils import check_array -from bob.bio.base.pipelines import Distance, PipelineSimple +from bob.bio.base.algorithm import Distance +from bob.bio.base.pipelines import PipelineSimple from bob.bio.face.annotator import MTCNN from bob.bio.face.utils import ( cropped_positions_arcface, diff --git a/bob/bio/face/test/test_algorithms.py b/bob/bio/face/test/test_algorithms.py deleted file mode 100644 index a1e9f27..0000000 --- a/bob/bio/face/test/test_algorithms.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : -# @author: Manuel Guenther -# @date: Thu May 24 10:41:42 CEST 2012 -# -# Copyright (C) 2011-2012 Idiap Research Institute, Martigny, Switzerland -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, version 3 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import numpy -import pkg_resources - -import bob.io.base - -from bob.bio.face.algorithm.Histogram import histogram_intersection - -regenerate_refs = False -seed_value = 5489 - - -def test_histogram(): - histogram = bob.bio.face.algorithm.Histogram( - distance_function=histogram_intersection, is_distance_function=False - ) - - assert isinstance(histogram, bob.bio.face.algorithm.Histogram) - assert isinstance(histogram, bob.bio.base.algorithm.Algorithm) - assert not histogram.performs_projection - assert not histogram.requires_projector_training - assert not histogram.use_projected_features_for_enrollment - assert not histogram.split_training_features_by_client - assert not histogram.requires_enroller_training - - # read input - feature1 = bob.bio.base.load( - pkg_resources.resource_filename( - "bob.bio.face.test", "data/lgbphs_sparse.hdf5" - ) - ) - feature2 = bob.bio.base.load( - pkg_resources.resource_filename( - "bob.bio.face.test", "data/lgbphs_with_phase.hdf5" - ) - ) - - # enroll model from sparse features - model1 = histogram.enroll([feature1, feature1]) - assert model1.shape == feature1.shape - assert numpy.allclose(model1, feature1) - - # enroll from non-sparse features - model2 = histogram.enroll([feature2, feature2]) - assert model2.shape == feature2.shape - assert numpy.allclose(model2, feature2) - - # score without phase and sparse - reference = 40960.0 - assert abs(histogram.score(model1, feature1) - reference) < 1e-5 - assert ( - abs( - histogram.score_for_multiple_probes(model1, [feature1, feature1]) - - reference - ) - < 1e-5 - ) - - # score with phase, but non-sparse - # reference doubles since we have two times more features - reference *= 2.0 - assert abs(histogram.score(model2, feature2) - reference) < 1e-5 - assert ( - abs( - histogram.score_for_multiple_probes(model2, [feature2, feature2]) - - reference - ) - < 1e-5 - ) diff --git a/bob/bio/face/test/test_databases.py b/bob/bio/face/test/test_databases.py index 2c8dea5..cc0e37d 100644 --- a/bob/bio/face/test/test_databases.py +++ b/bob/bio/face/test/test_databases.py @@ -200,6 +200,7 @@ def test_replaymobile(): rc.get("bob.bio.face.ijbc.directory") is None, reason="IJBC original protocols not available. Please do `bob config set bob.bio.face.ijbc.directory [IJBC PATH]` to set the IJBC data path.", ) +@pytest.mark.slow def test_ijbc(): from bob.bio.face.database import IJBCDatabase diff --git a/bob/bio/face/utils.py b/bob/bio/face/utils.py index b6496a6..0f41cd4 100644 --- a/bob/bio/face/utils.py +++ b/bob/bio/face/utils.py @@ -1,6 +1,6 @@ import logging -from sklearn.pipeline import make_pipeline +from sklearn.pipeline import Pipeline from bob.pipelines import wrap @@ -360,13 +360,18 @@ def embedding_transformer( **kwargs, ) - transformer = make_pipeline( - wrap( - ["sample"], - face_cropper, - transform_extra_arguments=transform_extra_arguments, - ), - wrap(["sample"], embedding), + transformer = Pipeline( + [ + ( + "cropper", + wrap( + ["sample"], + face_cropper, + transform_extra_arguments=transform_extra_arguments, + ), + ), + ("embedding", wrap(["sample"], embedding)), + ] ) return transformer diff --git a/doc/implemented.rst b/doc/implemented.rst index 87f6071..e3f82e1 100644 --- a/doc/implemented.rst +++ b/doc/implemented.rst @@ -133,15 +133,6 @@ Image Preprocessors bob.bio.face.preprocessor.INormLBP - - -Face Recognition Algorithms -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. autosummary:: - bob.bio.face.algorithm.Histogram - - Databases --------- .. automodule:: bob.bio.face.database @@ -156,13 +147,6 @@ Preprocessors .. automodule:: bob.bio.face.preprocessor - - -Algorithms ----------- - -.. automodule:: bob.bio.face.algorithm - Utilities --------- diff --git a/notebooks/50-shades-of-face.ipynb b/notebooks/50-shades-of-face.ipynb index b51087b..b02b710 100644 --- a/notebooks/50-shades-of-face.ipynb +++ b/notebooks/50-shades-of-face.ipynb @@ -31,7 +31,7 @@ "# Fetching resources\n", "import bob.bio.base\n", "from bob.bio.base.pipelines import execute_pipeline_simple\n", - "from bob.bio.base.pipelines import Distance\n", + "from bob.bio.base.algorithm import Distance\n", "from bob.bio.base.pipelines import PipelineSimple\n", "from bob.pipelines import wrap\n", "from bob.bio.face.preprocessor import FaceCrop\n", @@ -293,7 +293,7 @@ " checkpoint,\n", " dask_partition_size,\n", " dask_n_workers,\n", - " allow_scoring_with_all_biometric_references=True\n", + " score_all_vs_all=True\n", " )\n", " \n", " scores_dev = os.path.join(output_path, \"scores-dev\")\n", diff --git a/notebooks/inject_samples.ipynb b/notebooks/inject_samples.ipynb index 8440057..7e60084 100644 --- a/notebooks/inject_samples.ipynb +++ b/notebooks/inject_samples.ipynb @@ -265,7 +265,7 @@ " probes,\n", " zprobes,\n", " treferences,\n", - " allow_scoring_with_all_biometric_references=True,\n", + " score_all_vs_all=True,\n", " ) \n", " \n", " \n", diff --git a/setup.py b/setup.py index aff7f96..803dbe1 100644 --- a/setup.py +++ b/setup.py @@ -100,7 +100,6 @@ setup( "arface-illumination = bob.bio.face.config.database.arface_illumination:database", "arface-occlusion = bob.bio.face.config.database.arface_occlusion:database", "arface-occlusion-and-illumination = bob.bio.face.config.database.arface_occlusion_and_illumination:database", - "atnt = bob.bio.face.config.database.atnt:database", "casia-africa = bob.bio.face.config.database.casia_africa:database", "caspeal-accessory = bob.bio.face.config.database.caspeal_accessory:database", "caspeal-aging = bob.bio.face.config.database.caspeal_aging:database", @@ -211,7 +210,6 @@ setup( "rexnet = bob.bio.face.config.baseline.rex_net", "ghostnet = bob.bio.face.config.baseline.ghost_net", # databases - "atnt = bob.bio.face.config.database.atnt", "casia-africa = bob.bio.face.config.database.casia_africa", "frgc-exp1 = bob.bio.face.config.database.frgc_experiment1", "frgc-exp2 = bob.bio.face.config.database.frgc_experiment2", -- GitLab