diff --git a/deepface/basemodels/DeepID.py b/deepface/basemodels/DeepID.py index 30f67c1..08c7923 100644 --- a/deepface/basemodels/DeepID.py +++ b/deepface/basemodels/DeepID.py @@ -1,11 +1,12 @@ import os from pathlib import Path import gdown -import keras -from keras.models import Model -from keras.layers import Conv2D, Activation, Input, Add, MaxPooling2D, Flatten, Dense, Dropout import zipfile +from tensorflow import keras +from tensorflow.keras.models import Model +from tensorflow.keras.layers import Conv2D, Activation, Input, Add, MaxPooling2D, Flatten, Dense, Dropout + #------------------------------------- def loadModel(url = 'https://drive.google.com/uc?id=1uRLtBCTQQAvHJ_KVrdbRJiCKxU8m5q2J'): @@ -14,15 +15,15 @@ def loadModel(url = 'https://drive.google.com/uc?id=1uRLtBCTQQAvHJ_KVrdbRJiCKxU8 x = Conv2D(20, (4, 4), name='Conv1', activation='relu', input_shape=(55, 47, 3))(myInput) x = MaxPooling2D(pool_size=2, strides=2, name='Pool1')(x) - x = Dropout(rate=1, name='D1')(x) + x = Dropout(rate=0.99, name='D1')(x) x = Conv2D(40, (3, 3), name='Conv2', activation='relu')(x) x = MaxPooling2D(pool_size=2, strides=2, name='Pool2')(x) - x = Dropout(rate=1, name='D2')(x) + x = Dropout(rate=0.99, name='D2')(x) x = Conv2D(60, (3, 3), name='Conv3', activation='relu')(x) x = MaxPooling2D(pool_size=2, strides=2, name='Pool3')(x) - x = Dropout(rate=1, name='D3')(x) + x = Dropout(rate=0.99, name='D3')(x) x1 = Flatten()(x) fc11 = Dense(160, name = 'fc11')(x1) diff --git a/deepface/basemodels/Facenet.py b/deepface/basemodels/Facenet.py index 7a63502..1f11325 100644 --- a/deepface/basemodels/Facenet.py +++ b/deepface/basemodels/Facenet.py @@ -3,19 +3,19 @@ from pathlib import Path import gdown from functools import partial -from keras.models import Model -from keras.layers import Activation -from keras.layers import BatchNormalization -from keras.layers import Concatenate -from keras.layers import Conv2D -from keras.layers import Dense -from keras.layers import Dropout -from keras.layers import GlobalAveragePooling2D -from keras.layers import Input -from keras.layers import Lambda -from keras.layers import MaxPooling2D -from keras.layers import add -from keras import backend as K +from tensorflow.keras.models import Model +from tensorflow.keras.layers import Activation +from tensorflow.keras.layers import BatchNormalization +from tensorflow.keras.layers import Concatenate +from tensorflow.keras.layers import Conv2D +from tensorflow.keras.layers import Dense +from tensorflow.keras.layers import Dropout +from tensorflow.keras.layers import GlobalAveragePooling2D +from tensorflow.keras.layers import Input +from tensorflow.keras.layers import Lambda +from tensorflow.keras.layers import MaxPooling2D +from tensorflow.keras.layers import add +from tensorflow.keras import backend as K def scaling(x, scale): return x * scale diff --git a/deepface/basemodels/FbDeepFace.py b/deepface/basemodels/FbDeepFace.py index 6d130da..68da8aa 100644 --- a/deepface/basemodels/FbDeepFace.py +++ b/deepface/basemodels/FbDeepFace.py @@ -1,11 +1,12 @@ import os from pathlib import Path import gdown -import keras -from keras.models import Model, Sequential -from keras.layers import Convolution2D, LocallyConnected2D, MaxPooling2D, Flatten, Dense, Dropout import zipfile +from tensorflow import keras +from tensorflow.keras.models import Model, Sequential +from tensorflow.keras.layers import Convolution2D, LocallyConnected2D, MaxPooling2D, Flatten, Dense, Dropout + #------------------------------------- def loadModel(url = 'https://github.com/swghosh/DeepFace/releases/download/weights-vggface2-2d-aligned/VGGFace2_DeepFace_weights_val-0.9034.h5.zip'): diff --git a/deepface/basemodels/OpenFace.py b/deepface/basemodels/OpenFace.py index 82a4af9..eb63812 100644 --- a/deepface/basemodels/OpenFace.py +++ b/deepface/basemodels/OpenFace.py @@ -3,15 +3,13 @@ from pathlib import Path import gdown import tensorflow as tf -import keras -from keras.models import Model, Sequential -from keras.layers import Conv2D, ZeroPadding2D, Activation, Input, concatenate -from keras.layers.core import Dense, Activation, Lambda, Flatten -from keras.layers.pooling import MaxPooling2D, AveragePooling2D -from keras.layers.merge import Concatenate -from keras.layers.normalization import BatchNormalization -from keras.models import load_model -from keras import backend as K +from tensorflow import keras +from tensorflow.keras.models import Model, Sequential +from tensorflow.keras.layers import Conv2D, ZeroPadding2D, Activation, Input, concatenate +from tensorflow.keras.layers import Dense, Activation, Lambda, Flatten, BatchNormalization +from tensorflow.keras.layers import MaxPooling2D, AveragePooling2D +from tensorflow.keras.models import load_model +from tensorflow.keras import backend as K #--------------------------------------- diff --git a/deepface/basemodels/VGGFace.py b/deepface/basemodels/VGGFace.py index 48d8495..3ba4fa1 100644 --- a/deepface/basemodels/VGGFace.py +++ b/deepface/basemodels/VGGFace.py @@ -1,9 +1,17 @@ import os from pathlib import Path -from keras.models import Model, Sequential -from keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, Activation import gdown +import tensorflow as tf + +if int(tf.__version__.split(".")[0]) == 1: + from keras.models import Model, Sequential + from keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, Activation +else: + from tensorflow import keras + from tensorflow.keras.models import Model, Sequential + from tensorflow.keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, Activation + #--------------------------------------- def baseModel(): diff --git a/deepface/commons/functions.py b/deepface/commons/functions.py index ac7638d..5a26ebb 100644 --- a/deepface/commons/functions.py +++ b/deepface/commons/functions.py @@ -1,9 +1,6 @@ import os import numpy as np import pandas as pd -from keras.preprocessing.image import load_img, save_img, img_to_array -from keras.applications.imagenet_utils import preprocess_input -from keras.preprocessing import image import cv2 from pathlib import Path import gdown @@ -14,12 +11,26 @@ import copy import base64 import multiprocessing import subprocess -import tensorflow as tf -import keras import bz2 from deepface.commons import distance from mtcnn import MTCNN #0.1.0 +import tensorflow as tf +tf_version = int(tf.__version__.split(".")[0]) + +if tf_version == 1: + import keras + from keras.preprocessing.image import load_img, save_img, img_to_array + from keras.applications.imagenet_utils import preprocess_input + from keras.preprocessing import image +elif tf_version == 2: + from tensorflow import keras + from tensorflow.keras.preprocessing.image import load_img, save_img, img_to_array + from tensorflow.keras.applications.imagenet_utils import preprocess_input + from tensorflow.keras.preprocessing import image + +#-------------------------------------------------- + def initialize_input(img1_path, img2_path = None): if type(img1_path) == list: diff --git a/deepface/extendedmodels/Age.py b/deepface/extendedmodels/Age.py index 42f7bb5..1a20de3 100644 --- a/deepface/extendedmodels/Age.py +++ b/deepface/extendedmodels/Age.py @@ -1,12 +1,20 @@ -#from basemodels import VGGFace from deepface.basemodels import VGGFace - import os from pathlib import Path import gdown import numpy as np -from keras.models import Model, Sequential -from keras.layers import Convolution2D, Flatten, Activation + +import tensorflow as tf +tf_version = int(tf.__version__.split(".")[0]) + +if tf_version == 1: + import keras + from keras.models import Model, Sequential + from keras.layers import Convolution2D, Flatten, Activation +elif tf_version == 2: + from tensorflow import keras + from tensorflow.keras.models import Model, Sequential + from tensorflow.keras.layers import Convolution2D, Flatten, Activation def loadModel(): diff --git a/deepface/extendedmodels/Emotion.py b/deepface/extendedmodels/Emotion.py index 6936219..1e7d049 100644 --- a/deepface/extendedmodels/Emotion.py +++ b/deepface/extendedmodels/Emotion.py @@ -1,10 +1,20 @@ import os import gdown from pathlib import Path -from keras.models import Model, Sequential -from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, Flatten, Dense, Dropout import zipfile +import tensorflow as tf +tf_version = int(tf.__version__.split(".")[0]) + +if tf_version == 1: + import keras + from keras.models import Model, Sequential + from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, Flatten, Dense, Dropout +elif tf_version == 2: + from tensorflow import keras + from tensorflow.keras.models import Model, Sequential + from tensorflow.keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, Flatten, Dense, Dropout + def loadModel(): num_classes = 7 diff --git a/deepface/extendedmodels/Gender.py b/deepface/extendedmodels/Gender.py index cb19cca..a9c04a8 100644 --- a/deepface/extendedmodels/Gender.py +++ b/deepface/extendedmodels/Gender.py @@ -1,12 +1,18 @@ -#from basemodels import VGGFace from deepface.basemodels import VGGFace - import os from pathlib import Path import gdown import numpy as np -from keras.models import Model, Sequential -from keras.layers import Convolution2D, Flatten, Activation + +import tensorflow as tf +tf_version = int(tf.__version__.split(".")[0]) + +if tf_version == 1: + from keras.models import Model, Sequential + from keras.layers import Convolution2D, Flatten, Activation +elif tf_version == 2: + from tensorflow.keras.models import Model, Sequential + from tensorflow.keras.layers import Convolution2D, Flatten, Activation def loadModel(): diff --git a/deepface/extendedmodels/Race.py b/deepface/extendedmodels/Race.py index fed0ee3..aaf81e7 100644 --- a/deepface/extendedmodels/Race.py +++ b/deepface/extendedmodels/Race.py @@ -1,14 +1,21 @@ -#from basemodels import VGGFace from deepface.basemodels import VGGFace import os from pathlib import Path import gdown import numpy as np -from keras.models import Model, Sequential -from keras.layers import Convolution2D, Flatten, Activation import zipfile +import tensorflow as tf +tf_version = int(tf.__version__.split(".")[0]) + +if tf_version == 1: + from keras.models import Model, Sequential + from keras.layers import Convolution2D, Flatten, Activation +elif tf_version == 2: + from tensorflow.keras.models import Model, Sequential + from tensorflow.keras.layers import Convolution2D, Flatten, Activation + def loadModel(): model = VGGFace.baseModel() diff --git a/requirements.txt b/requirements.txt index 23066f3..d971381 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,4 @@ keras>=2.2.0 Flask>=1.1.2 mtcnn>=0.1.0 lightgbm>=2.3.1 +dlib>=19.20.0 \ No newline at end of file diff --git a/tests/unit_tests.py b/tests/unit_tests.py index 8e2c654..5b204f0 100644 --- a/tests/unit_tests.py +++ b/tests/unit_tests.py @@ -1,10 +1,20 @@ +import warnings +warnings.filterwarnings("ignore") + +import os +#os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' + from deepface import DeepFace from deepface.commons import functions import json import time -import os -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' +import tensorflow as tf + +#----------------------------------------- + +tf_version = int(tf.__version__.split(".")[0]) #----------------------------------------- @@ -136,7 +146,8 @@ dataset = [ ] models = ['VGG-Face', 'Facenet', 'OpenFace', 'DeepFace', 'DeepID', 'Dlib'] -metrics = ['cosine', 'euclidean', 'euclidean_l2'] +#metrics = ['cosine', 'euclidean', 'euclidean_l2'] +metrics = ['cosine'] passed_tests = 0; test_cases = 0