
    >|hO                     ,   d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ  e
d      Z ej                         Zedk(  rOd d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  nNd d	l!mZ d d
l"mZ d dl"mZ d dl"mZ d dl"mZ d dl"mZ d dl"mZ d dl"mZ d dl"mZ d dl"mZ d dl"mZ d dl"mZ d dl#mZ   G d de      Z$ G d de      Z%d Z&d de'defdZ(	 d!defdZ)	 d"defdZ*y)#    )ListN)package_utilsfolder_utils)Logger)FacialRecognitionzbasemodels.Facenet)module   )Model)
Activation)BatchNormalization)Concatenate)Conv2D)Dense)Dropout)GlobalAveragePooling2D)Input)Lambda)MaxPooling2D)add)backendc                   @    e Zd ZdZd Zdej                  dee   fdZ	y)FaceNet128dClientz"
    FaceNet-128d model class
    c                 L    t               | _        d| _        d| _        d| _        y )NzFaceNet-128d   r      )load_facenet128d_modelmodel
model_nameinput_shapeoutput_shapeselfs    Z/var/www/html/test/engine/venv/lib/python3.12/site-packages/deepface/basemodels/Facenet.py__init__zFaceNet128dClient.__init__5   #    +-
(%    imgreturnc                 f    | j                  |d      j                         d   j                         S )z
        find embeddings with FaceNet-128d model
        Args:
            img (np.ndarray): pre-loaded image in BGR
        Returns
            embeddings (list): multi-dimensional vector
        Ftrainingr   r   numpytolistr#   r(   s     r$   find_embeddingsz!FaceNet128dClient.find_embeddings;   .     zz#z.446q9@@BBr'   N
__name__
__module____qualname____doc__r%   npndarrayr   floatr1    r'   r$   r   r   0   *     
C2:: 
C$u+ 
Cr'   r   c                   @    e Zd ZdZd Zdej                  dee   fdZ	y)FaceNet512dClientz#
    FaceNet-1512d model class
    c                 L    t               | _        d| _        d| _        d| _        y )NzFaceNet-512dr      )load_facenet512d_modelr   r   r    r!   r"   s    r$   r%   zFaceNet512dClient.__init__M   r&   r'   r(   r)   c                 f    | j                  |d      j                         d   j                         S )z
        find embeddings with FaceNet-512d model
        Args:
            img (np.ndarray): pre-loaded image in BGR
        Returns
            embeddings (list): multi-dimensional vector
        Fr+   r   r-   r0   s     r$   r1   z!FaceNet512dClient.find_embeddingsS   r2   r'   Nr3   r;   r'   r$   r>   r>   H   r<   r'   r>   c                     | |z  S )Nr;   )xscales     r$   scalingrF   `   s    u9r'   	dimensionr)   c           	      O   t        d      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t	        ddd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddddd!	      |      } t        dd
ddd"      |      } t        dd#      |      } t        d$ddddd%	      |      } t        dd
ddd&      |      } t        dd'      |      } t        dddddd(	      |      } t        dd
ddd)      |      } t        dd*      |      } t        dddddd+	      |      } t        dd
ddd,      |      } t        dd-      |      } t        dddddd.	      |      } t        dd
ddd/      |      } t        dd0      |      } t        dddddd1	      |      } t        dd
ddd2      |      } t        dd3      |      } t        dddddd4	      |      } t        dd
ddd5      |      } t        dd6      |      } t        dddddd7	      |      } t        dd
ddd8      |      } t        dd9      |      }|||g} t        dd:;      |      } t        d$dddd<d=	      |      } t        t        t        j                  |      dd> d?d@iA      |      }t        ||g      } t        ddB      |      } t        ddddddC	      |      } t        dd
dddD      |      } t        ddE      |      } t        ddddddF	      |      } t        dd
dddG      |      } t        ddH      |      } t        ddddddI	      |      } t        dd
dddJ      |      } t        ddK      |      } t        ddddddL	      |      } t        dd
dddM      |      } t        ddN      |      } t        ddddddO	      |      } t        dd
dddP      |      } t        ddQ      |      } t        ddddddR	      |      } t        dd
dddS      |      } t        ddT      |      }|||g} t        ddU;      |      } t        d$dddd<dV	      |      } t        t        t        j                  |      dd> d?d@iA      |      }t        ||g      } t        ddW      |      } t        ddddddX	      |      } t        dd
dddY      |      } t        ddZ      |      } t        dddddd[	      |      } t        dd
ddd\      |      } t        dd]      |      } t        dddddd^	      |      } t        dd
ddd_      |      } t        dd`      |      } t        dddddda	      |      } t        dd
dddb      |      } t        ddc      |      } t        ddddddd	      |      } t        dd
ddde      |      } t        ddf      |      } t        ddddddg	      |      } t        dd
dddh      |      } t        ddi      |      }|||g} t        ddj;      |      } t        d$dddd<dk	      |      } t        t        t        j                  |      dd> d?d@iA      |      }t        ||g      } t        ddl      |      } t        ddddddm	      |      } t        dd
dddn      |      } t        ddo      |      } t        ddddddp	      |      } t        dd
dddq      |      } t        ddr      |      } t        dddddds	      |      } t        dd
dddt      |      } t        ddu      |      } t        ddddddv	      |      } t        dd
dddw      |      } t        ddx      |      } t        ddddddy	      |      } t        dd
dddz      |      } t        dd{      |      } t        dddddd|	      |      } t        dd
ddd}      |      } t        dd~      |      }|||g} t        dd;      |      } t        d$dddd<d	      |      } t        t        t        j                  |      dd> d?d@iA      |      }t        ||g      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      }|||g} t        dd;      |      } t        d$dddd<d	      |      } t        t        t        j                  |      dd> d?d@iA      |      }t        ||g      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d$ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t	        dddd      |      }	|||	g} t        dd;      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd;      |      } t        ddddd<d	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd¬      |      } t        dddgddddì	      |      } t        dd
dddĬ      |      } t        ddŬ      |      }||g} t        ddƬ;      |      } t        ddddd<dǬ	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        ddȬ      |      } t        ddddddɬ	      |      } t        dd
dddʬ      |      } t        ddˬ      |      } t        dddddd̬	      |      } t        dd
dddͬ      |      } t        ddά      |      } t        dddgddddϬ	      |      } t        dd
dddЬ      |      } t        ddѬ      |      } t        dddgddddҬ	      |      } t        dd
dddӬ      |      } t        ddԬ      |      }||g} t        ddլ;      |      } t        ddddd<d֬	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd׬      |      } t        ddddddج	      |      } t        dd
ddd٬      |      } t        ddڬ      |      } t        dddddd۬	      |      } t        dd
dddܬ      |      } t        ddݬ      |      } t        dddgddddެ	      |      } t        dd
ddd߬      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd;      |      } t        ddddd<d	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd;      |      } t        ddddd<d	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd       |      } t        dd      |      }||g} t        dd;      |      } t        ddddd<d	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd	      |      } t        dd
      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd;      |      } t        ddddd<d	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      } t        dddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd ;      |      } t        ddddd<d!	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd"      |      } t        dddddd#	      |      } t        dd
ddd$      |      } t        dd%      |      } t        dddddd&	      |      } t        dd
ddd'      |      } t        dd(      |      } t        dddgdddd)	      |      } t        dd
ddd*      |      } t        dd+      |      } t        dddgdddd,	      |      } t        dd
ddd-      |      } t        dd.      |      }||g} t        dd/;      |      } t        ddddd<d0	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd1      |      } t        dddddd2	      |      } t        dd
ddd3      |      } t        dd4      |      } t        dddddd5	      |      } t        dd
ddd6      |      } t        dd7      |      } t        dddgdddd8	      |      } t        dd
ddd9      |      } t        dd:      |      } t        dddgdddd;	      |      } t        dd
ddd<      |      } t        dd=      |      }||g} t        dd>;      |      } t        ddddd<d?	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        dd@      |      } t        d$dddddA	      |      } t        dd
dddB      |      } t        ddC      |      } t        ddddddD	      |      } t        dd
dddE      |      } t        ddF      |      } t        d$dddddG	      |      } t        dd
dddH      |      } t        ddI      |      } t        d$dddddJ	      |      } t        dd
dddK      |      } t        ddL      |      } t        d$dddddM	      |      } t        dd
dddN      |      } t        ddO      |      } t        d$dddddP	      |      } t        dd
dddQ      |      } t        ddR      |      } t        d$dddddS	      |      } t        dd
dddT      |      } t        ddU      |      } t	        ddddV      |      }	||||	g} t        ddW;      |      } t        d dddddX	      |      } t        dd
dddY      |      } t        ddZ      |      } t        d ddddd[	      |      } t        dd
ddd\      |      } t        dd]      |      } t        d ddgdddd^	      |      } t        dd
ddd_      |      } t        dd`      |      } t        d ddgdddda	      |      } t        dd
dddb      |      } t        ddc      |      }||g} t        ddd;      |      } t        dedddd<df	      |      } t        t        t        j                  |      dd> d?dgiA      |      }t        ||g      } t        ddh      |      } t        d dddddi	      |      } t        dd
dddj      |      } t        ddk      |      } t        d dddddl	      |      } t        dd
dddm      |      } t        ddn      |      } t        d ddgddddo	      |      } t        dd
dddp      |      } t        ddq      |      } t        d ddgddddr	      |      } t        dd
ddds      |      } t        ddt      |      }||g} t        ddu;      |      } t        dedddd<dv	      |      } t        t        t        j                  |      dd> d?dgiA      |      }t        ||g      } t        ddw      |      } t        d dddddx	      |      } t        dd
dddy      |      } t        ddz      |      } t        d ddddd{	      |      } t        dd
ddd|      |      } t        dd}      |      } t        d ddgdddd~	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd;      |      } t        dedddd<d	      |      } t        t        t        j                  |      dd> d?dgiA      |      }t        ||g      } t        dd      |      } t        d ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddgdddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd;      |      } t        dedddd<d	      |      } t        t        t        j                  |      dd> d?dgiA      |      }t        ||g      } t        dd      |      } t        d ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddgdddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd;      |      } t        dedddd<d	      |      } t        t        t        j                  |      dd> d?dgiA      |      }t        ||g      } t        dd      |      } t        d ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddgdddd	      |      } t        dd
ddd      |      } t        dd      |      } t        d ddgdddd	      |      } t        dd
ddd      |      } t        dd      |      }||g} t        dd;      |      } t        dedddd<d	      |      } t        t        t        j                  |      dd> d?diA      |      }t        ||g      } t        d      |      } t        dd      |      } t        | dd      |      } t        d
ddd      |      }t        ||d      }
|
S (  z
    InceptionResNetV2 model
    Args:
        dimension (int): number of dimensions in the embedding layer
    Returns:
        model (Model)
    )r   r      )shape    rI      validFConv2d_1a_3x3)stridespaddinguse_biasnamegףp=
?gMbP?Conv2d_1a_3x3_BatchNorm)axismomentumepsilonrE   rR   reluConv2d_1a_3x3_Activation)rR   r	   Conv2d_2a_3x3Conv2d_2a_3x3_BatchNormConv2d_2a_3x3_Activation@   sameConv2d_2b_3x3Conv2d_2b_3x3_BatchNormConv2d_2b_3x3_ActivationMaxPool_3a_3x3)rO   rR   P   Conv2d_3b_1x1Conv2d_3b_1x1_BatchNormConv2d_3b_1x1_Activation   Conv2d_4a_3x3Conv2d_4a_3x3_BatchNormConv2d_4a_3x3_Activation   Conv2d_4b_3x3Conv2d_4b_3x3_BatchNormConv2d_4b_3x3_ActivationBlock35_1_Branch_0_Conv2d_1x1'Block35_1_Branch_0_Conv2d_1x1_BatchNorm(Block35_1_Branch_0_Conv2d_1x1_Activation Block35_1_Branch_1_Conv2d_0a_1x1*Block35_1_Branch_1_Conv2d_0a_1x1_BatchNorm+Block35_1_Branch_1_Conv2d_0a_1x1_Activation Block35_1_Branch_1_Conv2d_0b_3x3*Block35_1_Branch_1_Conv2d_0b_3x3_BatchNorm+Block35_1_Branch_1_Conv2d_0b_3x3_Activation Block35_1_Branch_2_Conv2d_0a_1x1*Block35_1_Branch_2_Conv2d_0a_1x1_BatchNorm+Block35_1_Branch_2_Conv2d_0a_1x1_Activation Block35_1_Branch_2_Conv2d_0b_3x3*Block35_1_Branch_2_Conv2d_0b_3x3_BatchNorm+Block35_1_Branch_2_Conv2d_0b_3x3_Activation Block35_1_Branch_2_Conv2d_0c_3x3*Block35_1_Branch_2_Conv2d_0c_3x3_BatchNorm+Block35_1_Branch_2_Conv2d_0c_3x3_ActivationBlock35_1_Concatenate)rT   rR   TBlock35_1_Conv2d_1x1NrE   g(\?)r!   	argumentsBlock35_1_ActivationBlock35_2_Branch_0_Conv2d_1x1'Block35_2_Branch_0_Conv2d_1x1_BatchNorm(Block35_2_Branch_0_Conv2d_1x1_Activation Block35_2_Branch_1_Conv2d_0a_1x1*Block35_2_Branch_1_Conv2d_0a_1x1_BatchNorm+Block35_2_Branch_1_Conv2d_0a_1x1_Activation Block35_2_Branch_1_Conv2d_0b_3x3*Block35_2_Branch_1_Conv2d_0b_3x3_BatchNorm+Block35_2_Branch_1_Conv2d_0b_3x3_Activation Block35_2_Branch_2_Conv2d_0a_1x1*Block35_2_Branch_2_Conv2d_0a_1x1_BatchNorm+Block35_2_Branch_2_Conv2d_0a_1x1_Activation Block35_2_Branch_2_Conv2d_0b_3x3*Block35_2_Branch_2_Conv2d_0b_3x3_BatchNorm+Block35_2_Branch_2_Conv2d_0b_3x3_Activation Block35_2_Branch_2_Conv2d_0c_3x3*Block35_2_Branch_2_Conv2d_0c_3x3_BatchNorm+Block35_2_Branch_2_Conv2d_0c_3x3_ActivationBlock35_2_ConcatenateBlock35_2_Conv2d_1x1Block35_2_ActivationBlock35_3_Branch_0_Conv2d_1x1'Block35_3_Branch_0_Conv2d_1x1_BatchNorm(Block35_3_Branch_0_Conv2d_1x1_Activation Block35_3_Branch_1_Conv2d_0a_1x1*Block35_3_Branch_1_Conv2d_0a_1x1_BatchNorm+Block35_3_Branch_1_Conv2d_0a_1x1_Activation Block35_3_Branch_1_Conv2d_0b_3x3*Block35_3_Branch_1_Conv2d_0b_3x3_BatchNorm+Block35_3_Branch_1_Conv2d_0b_3x3_Activation Block35_3_Branch_2_Conv2d_0a_1x1*Block35_3_Branch_2_Conv2d_0a_1x1_BatchNorm+Block35_3_Branch_2_Conv2d_0a_1x1_Activation Block35_3_Branch_2_Conv2d_0b_3x3*Block35_3_Branch_2_Conv2d_0b_3x3_BatchNorm+Block35_3_Branch_2_Conv2d_0b_3x3_Activation Block35_3_Branch_2_Conv2d_0c_3x3*Block35_3_Branch_2_Conv2d_0c_3x3_BatchNorm+Block35_3_Branch_2_Conv2d_0c_3x3_ActivationBlock35_3_ConcatenateBlock35_3_Conv2d_1x1Block35_3_ActivationBlock35_4_Branch_0_Conv2d_1x1'Block35_4_Branch_0_Conv2d_1x1_BatchNorm(Block35_4_Branch_0_Conv2d_1x1_Activation Block35_4_Branch_1_Conv2d_0a_1x1*Block35_4_Branch_1_Conv2d_0a_1x1_BatchNorm+Block35_4_Branch_1_Conv2d_0a_1x1_Activation Block35_4_Branch_1_Conv2d_0b_3x3*Block35_4_Branch_1_Conv2d_0b_3x3_BatchNorm+Block35_4_Branch_1_Conv2d_0b_3x3_Activation Block35_4_Branch_2_Conv2d_0a_1x1*Block35_4_Branch_2_Conv2d_0a_1x1_BatchNorm+Block35_4_Branch_2_Conv2d_0a_1x1_Activation Block35_4_Branch_2_Conv2d_0b_3x3*Block35_4_Branch_2_Conv2d_0b_3x3_BatchNorm+Block35_4_Branch_2_Conv2d_0b_3x3_Activation Block35_4_Branch_2_Conv2d_0c_3x3*Block35_4_Branch_2_Conv2d_0c_3x3_BatchNorm+Block35_4_Branch_2_Conv2d_0c_3x3_ActivationBlock35_4_ConcatenateBlock35_4_Conv2d_1x1Block35_4_ActivationBlock35_5_Branch_0_Conv2d_1x1'Block35_5_Branch_0_Conv2d_1x1_BatchNorm(Block35_5_Branch_0_Conv2d_1x1_Activation Block35_5_Branch_1_Conv2d_0a_1x1*Block35_5_Branch_1_Conv2d_0a_1x1_BatchNorm+Block35_5_Branch_1_Conv2d_0a_1x1_Activation Block35_5_Branch_1_Conv2d_0b_3x3*Block35_5_Branch_1_Conv2d_0b_3x3_BatchNorm+Block35_5_Branch_1_Conv2d_0b_3x3_Activation Block35_5_Branch_2_Conv2d_0a_1x1*Block35_5_Branch_2_Conv2d_0a_1x1_BatchNorm+Block35_5_Branch_2_Conv2d_0a_1x1_Activation Block35_5_Branch_2_Conv2d_0b_3x3*Block35_5_Branch_2_Conv2d_0b_3x3_BatchNorm+Block35_5_Branch_2_Conv2d_0b_3x3_Activation Block35_5_Branch_2_Conv2d_0c_3x3*Block35_5_Branch_2_Conv2d_0c_3x3_BatchNorm+Block35_5_Branch_2_Conv2d_0c_3x3_ActivationBlock35_5_ConcatenateBlock35_5_Conv2d_1x1Block35_5_Activationi  Mixed_6a_Branch_0_Conv2d_1a_3x3)Mixed_6a_Branch_0_Conv2d_1a_3x3_BatchNorm*Mixed_6a_Branch_0_Conv2d_1a_3x3_ActivationMixed_6a_Branch_1_Conv2d_0a_1x1)Mixed_6a_Branch_1_Conv2d_0a_1x1_BatchNorm*Mixed_6a_Branch_1_Conv2d_0a_1x1_ActivationMixed_6a_Branch_1_Conv2d_0b_3x3)Mixed_6a_Branch_1_Conv2d_0b_3x3_BatchNorm*Mixed_6a_Branch_1_Conv2d_0b_3x3_ActivationMixed_6a_Branch_1_Conv2d_1a_3x3)Mixed_6a_Branch_1_Conv2d_1a_3x3_BatchNorm*Mixed_6a_Branch_1_Conv2d_1a_3x3_Activation Mixed_6a_Branch_2_MaxPool_1a_3x3)rO   rP   rR   Mixed_6ar   Block17_1_Branch_0_Conv2d_1x1'Block17_1_Branch_0_Conv2d_1x1_BatchNorm(Block17_1_Branch_0_Conv2d_1x1_Activation Block17_1_Branch_1_Conv2d_0a_1x1*Block17_1_Branch_1_Conv2d_0a_1x1_BatchNorm+Block17_1_Branch_1_Conv2d_0a_1x1_Activation    Block17_1_Branch_1_Conv2d_0b_1x7*Block17_1_Branch_1_Conv2d_0b_1x7_BatchNorm+Block17_1_Branch_1_Conv2d_0b_1x7_Activation Block17_1_Branch_1_Conv2d_0c_7x1*Block17_1_Branch_1_Conv2d_0c_7x1_BatchNorm+Block17_1_Branch_1_Conv2d_0c_7x1_ActivationBlock17_1_Concatenatei  Block17_1_Conv2d_1x1g?Block17_1_ActivationBlock17_2_Branch_0_Conv2d_1x1'Block17_2_Branch_0_Conv2d_1x1_BatchNorm(Block17_2_Branch_0_Conv2d_1x1_Activation Block17_2_Branch_2_Conv2d_0a_1x1*Block17_2_Branch_2_Conv2d_0a_1x1_BatchNorm+Block17_2_Branch_2_Conv2d_0a_1x1_Activation Block17_2_Branch_2_Conv2d_0b_1x7*Block17_2_Branch_2_Conv2d_0b_1x7_BatchNorm+Block17_2_Branch_2_Conv2d_0b_1x7_Activation Block17_2_Branch_2_Conv2d_0c_7x1*Block17_2_Branch_2_Conv2d_0c_7x1_BatchNorm+Block17_2_Branch_2_Conv2d_0c_7x1_ActivationBlock17_2_ConcatenateBlock17_2_Conv2d_1x1Block17_2_ActivationBlock17_3_Branch_0_Conv2d_1x1'Block17_3_Branch_0_Conv2d_1x1_BatchNorm(Block17_3_Branch_0_Conv2d_1x1_Activation Block17_3_Branch_3_Conv2d_0a_1x1*Block17_3_Branch_3_Conv2d_0a_1x1_BatchNorm+Block17_3_Branch_3_Conv2d_0a_1x1_Activation Block17_3_Branch_3_Conv2d_0b_1x7*Block17_3_Branch_3_Conv2d_0b_1x7_BatchNorm+Block17_3_Branch_3_Conv2d_0b_1x7_Activation Block17_3_Branch_3_Conv2d_0c_7x1*Block17_3_Branch_3_Conv2d_0c_7x1_BatchNorm+Block17_3_Branch_3_Conv2d_0c_7x1_ActivationBlock17_3_ConcatenateBlock17_3_Conv2d_1x1Block17_3_ActivationBlock17_4_Branch_0_Conv2d_1x1'Block17_4_Branch_0_Conv2d_1x1_BatchNorm(Block17_4_Branch_0_Conv2d_1x1_Activation Block17_4_Branch_4_Conv2d_0a_1x1*Block17_4_Branch_4_Conv2d_0a_1x1_BatchNorm+Block17_4_Branch_4_Conv2d_0a_1x1_Activation Block17_4_Branch_4_Conv2d_0b_1x7*Block17_4_Branch_4_Conv2d_0b_1x7_BatchNorm+Block17_4_Branch_4_Conv2d_0b_1x7_Activation Block17_4_Branch_4_Conv2d_0c_7x1*Block17_4_Branch_4_Conv2d_0c_7x1_BatchNorm+Block17_4_Branch_4_Conv2d_0c_7x1_ActivationBlock17_4_ConcatenateBlock17_4_Conv2d_1x1Block17_4_ActivationBlock17_5_Branch_0_Conv2d_1x1'Block17_5_Branch_0_Conv2d_1x1_BatchNorm(Block17_5_Branch_0_Conv2d_1x1_Activation Block17_5_Branch_5_Conv2d_0a_1x1*Block17_5_Branch_5_Conv2d_0a_1x1_BatchNorm+Block17_5_Branch_5_Conv2d_0a_1x1_Activation Block17_5_Branch_5_Conv2d_0b_1x7*Block17_5_Branch_5_Conv2d_0b_1x7_BatchNorm+Block17_5_Branch_5_Conv2d_0b_1x7_Activation Block17_5_Branch_5_Conv2d_0c_7x1*Block17_5_Branch_5_Conv2d_0c_7x1_BatchNorm+Block17_5_Branch_5_Conv2d_0c_7x1_ActivationBlock17_5_ConcatenateBlock17_5_Conv2d_1x1Block17_5_ActivationBlock17_6_Branch_0_Conv2d_1x1'Block17_6_Branch_0_Conv2d_1x1_BatchNorm(Block17_6_Branch_0_Conv2d_1x1_Activation Block17_6_Branch_6_Conv2d_0a_1x1*Block17_6_Branch_6_Conv2d_0a_1x1_BatchNorm+Block17_6_Branch_6_Conv2d_0a_1x1_Activation Block17_6_Branch_6_Conv2d_0b_1x7*Block17_6_Branch_6_Conv2d_0b_1x7_BatchNorm+Block17_6_Branch_6_Conv2d_0b_1x7_Activation Block17_6_Branch_6_Conv2d_0c_7x1*Block17_6_Branch_6_Conv2d_0c_7x1_BatchNorm+Block17_6_Branch_6_Conv2d_0c_7x1_ActivationBlock17_6_ConcatenateBlock17_6_Conv2d_1x1Block17_6_ActivationBlock17_7_Branch_0_Conv2d_1x1'Block17_7_Branch_0_Conv2d_1x1_BatchNorm(Block17_7_Branch_0_Conv2d_1x1_Activation Block17_7_Branch_7_Conv2d_0a_1x1*Block17_7_Branch_7_Conv2d_0a_1x1_BatchNorm+Block17_7_Branch_7_Conv2d_0a_1x1_Activation Block17_7_Branch_7_Conv2d_0b_1x7*Block17_7_Branch_7_Conv2d_0b_1x7_BatchNorm+Block17_7_Branch_7_Conv2d_0b_1x7_Activation Block17_7_Branch_7_Conv2d_0c_7x1*Block17_7_Branch_7_Conv2d_0c_7x1_BatchNorm+Block17_7_Branch_7_Conv2d_0c_7x1_ActivationBlock17_7_ConcatenateBlock17_7_Conv2d_1x1Block17_7_ActivationBlock17_8_Branch_0_Conv2d_1x1'Block17_8_Branch_0_Conv2d_1x1_BatchNorm(Block17_8_Branch_0_Conv2d_1x1_Activation Block17_8_Branch_8_Conv2d_0a_1x1*Block17_8_Branch_8_Conv2d_0a_1x1_BatchNorm+Block17_8_Branch_8_Conv2d_0a_1x1_Activation Block17_8_Branch_8_Conv2d_0b_1x7*Block17_8_Branch_8_Conv2d_0b_1x7_BatchNorm+Block17_8_Branch_8_Conv2d_0b_1x7_Activation Block17_8_Branch_8_Conv2d_0c_7x1*Block17_8_Branch_8_Conv2d_0c_7x1_BatchNorm+Block17_8_Branch_8_Conv2d_0c_7x1_ActivationBlock17_8_ConcatenateBlock17_8_Conv2d_1x1Block17_8_ActivationBlock17_9_Branch_0_Conv2d_1x1'Block17_9_Branch_0_Conv2d_1x1_BatchNorm(Block17_9_Branch_0_Conv2d_1x1_Activation Block17_9_Branch_9_Conv2d_0a_1x1*Block17_9_Branch_9_Conv2d_0a_1x1_BatchNorm+Block17_9_Branch_9_Conv2d_0a_1x1_Activation Block17_9_Branch_9_Conv2d_0b_1x7*Block17_9_Branch_9_Conv2d_0b_1x7_BatchNorm+Block17_9_Branch_9_Conv2d_0b_1x7_Activation Block17_9_Branch_9_Conv2d_0c_7x1*Block17_9_Branch_9_Conv2d_0c_7x1_BatchNorm+Block17_9_Branch_9_Conv2d_0c_7x1_ActivationBlock17_9_ConcatenateBlock17_9_Conv2d_1x1Block17_9_ActivationBlock17_10_Branch_0_Conv2d_1x1(Block17_10_Branch_0_Conv2d_1x1_BatchNorm)Block17_10_Branch_0_Conv2d_1x1_Activation"Block17_10_Branch_10_Conv2d_0a_1x1,Block17_10_Branch_10_Conv2d_0a_1x1_BatchNorm-Block17_10_Branch_10_Conv2d_0a_1x1_Activation"Block17_10_Branch_10_Conv2d_0b_1x7,Block17_10_Branch_10_Conv2d_0b_1x7_BatchNorm-Block17_10_Branch_10_Conv2d_0b_1x7_Activation"Block17_10_Branch_10_Conv2d_0c_7x1,Block17_10_Branch_10_Conv2d_0c_7x1_BatchNorm-Block17_10_Branch_10_Conv2d_0c_7x1_ActivationBlock17_10_ConcatenateBlock17_10_Conv2d_1x1Block17_10_ActivationMixed_7a_Branch_0_Conv2d_0a_1x1)Mixed_7a_Branch_0_Conv2d_0a_1x1_BatchNorm*Mixed_7a_Branch_0_Conv2d_0a_1x1_ActivationMixed_7a_Branch_0_Conv2d_1a_3x3)Mixed_7a_Branch_0_Conv2d_1a_3x3_BatchNorm*Mixed_7a_Branch_0_Conv2d_1a_3x3_ActivationMixed_7a_Branch_1_Conv2d_0a_1x1)Mixed_7a_Branch_1_Conv2d_0a_1x1_BatchNorm*Mixed_7a_Branch_1_Conv2d_0a_1x1_ActivationMixed_7a_Branch_1_Conv2d_1a_3x3)Mixed_7a_Branch_1_Conv2d_1a_3x3_BatchNorm*Mixed_7a_Branch_1_Conv2d_1a_3x3_ActivationMixed_7a_Branch_2_Conv2d_0a_1x1)Mixed_7a_Branch_2_Conv2d_0a_1x1_BatchNorm*Mixed_7a_Branch_2_Conv2d_0a_1x1_ActivationMixed_7a_Branch_2_Conv2d_0b_3x3)Mixed_7a_Branch_2_Conv2d_0b_3x3_BatchNorm*Mixed_7a_Branch_2_Conv2d_0b_3x3_ActivationMixed_7a_Branch_2_Conv2d_1a_3x3)Mixed_7a_Branch_2_Conv2d_1a_3x3_BatchNorm*Mixed_7a_Branch_2_Conv2d_1a_3x3_Activation Mixed_7a_Branch_3_MaxPool_1a_3x3Mixed_7aBlock8_1_Branch_0_Conv2d_1x1&Block8_1_Branch_0_Conv2d_1x1_BatchNorm'Block8_1_Branch_0_Conv2d_1x1_ActivationBlock8_1_Branch_1_Conv2d_0a_1x1)Block8_1_Branch_1_Conv2d_0a_1x1_BatchNorm*Block8_1_Branch_1_Conv2d_0a_1x1_ActivationBlock8_1_Branch_1_Conv2d_0b_1x3)Block8_1_Branch_1_Conv2d_0b_1x3_BatchNorm*Block8_1_Branch_1_Conv2d_0b_1x3_ActivationBlock8_1_Branch_1_Conv2d_0c_3x1)Block8_1_Branch_1_Conv2d_0c_3x1_BatchNorm*Block8_1_Branch_1_Conv2d_0c_3x1_ActivationBlock8_1_Concatenatei   Block8_1_Conv2d_1x1g?Block8_1_ActivationBlock8_2_Branch_0_Conv2d_1x1&Block8_2_Branch_0_Conv2d_1x1_BatchNorm'Block8_2_Branch_0_Conv2d_1x1_ActivationBlock8_2_Branch_2_Conv2d_0a_1x1)Block8_2_Branch_2_Conv2d_0a_1x1_BatchNorm*Block8_2_Branch_2_Conv2d_0a_1x1_ActivationBlock8_2_Branch_2_Conv2d_0b_1x3)Block8_2_Branch_2_Conv2d_0b_1x3_BatchNorm*Block8_2_Branch_2_Conv2d_0b_1x3_ActivationBlock8_2_Branch_2_Conv2d_0c_3x1)Block8_2_Branch_2_Conv2d_0c_3x1_BatchNorm*Block8_2_Branch_2_Conv2d_0c_3x1_ActivationBlock8_2_ConcatenateBlock8_2_Conv2d_1x1Block8_2_ActivationBlock8_3_Branch_0_Conv2d_1x1&Block8_3_Branch_0_Conv2d_1x1_BatchNorm'Block8_3_Branch_0_Conv2d_1x1_ActivationBlock8_3_Branch_3_Conv2d_0a_1x1)Block8_3_Branch_3_Conv2d_0a_1x1_BatchNorm*Block8_3_Branch_3_Conv2d_0a_1x1_ActivationBlock8_3_Branch_3_Conv2d_0b_1x3)Block8_3_Branch_3_Conv2d_0b_1x3_BatchNorm*Block8_3_Branch_3_Conv2d_0b_1x3_ActivationBlock8_3_Branch_3_Conv2d_0c_3x1)Block8_3_Branch_3_Conv2d_0c_3x1_BatchNorm*Block8_3_Branch_3_Conv2d_0c_3x1_ActivationBlock8_3_ConcatenateBlock8_3_Conv2d_1x1Block8_3_ActivationBlock8_4_Branch_0_Conv2d_1x1&Block8_4_Branch_0_Conv2d_1x1_BatchNorm'Block8_4_Branch_0_Conv2d_1x1_ActivationBlock8_4_Branch_4_Conv2d_0a_1x1)Block8_4_Branch_4_Conv2d_0a_1x1_BatchNorm*Block8_4_Branch_4_Conv2d_0a_1x1_ActivationBlock8_4_Branch_4_Conv2d_0b_1x3)Block8_4_Branch_4_Conv2d_0b_1x3_BatchNorm*Block8_4_Branch_4_Conv2d_0b_1x3_ActivationBlock8_4_Branch_4_Conv2d_0c_3x1)Block8_4_Branch_4_Conv2d_0c_3x1_BatchNorm*Block8_4_Branch_4_Conv2d_0c_3x1_ActivationBlock8_4_ConcatenateBlock8_4_Conv2d_1x1Block8_4_ActivationBlock8_5_Branch_0_Conv2d_1x1&Block8_5_Branch_0_Conv2d_1x1_BatchNorm'Block8_5_Branch_0_Conv2d_1x1_ActivationBlock8_5_Branch_5_Conv2d_0a_1x1)Block8_5_Branch_5_Conv2d_0a_1x1_BatchNorm*Block8_5_Branch_5_Conv2d_0a_1x1_ActivationBlock8_5_Branch_5_Conv2d_0b_1x3)Block8_5_Branch_5_Conv2d_0b_1x3_BatchNorm*Block8_5_Branch_5_Conv2d_0b_1x3_ActivationBlock8_5_Branch_5_Conv2d_0c_3x1)Block8_5_Branch_5_Conv2d_0c_3x1_BatchNorm*Block8_5_Branch_5_Conv2d_0c_3x1_ActivationBlock8_5_ConcatenateBlock8_5_Conv2d_1x1Block8_5_ActivationBlock8_6_Branch_0_Conv2d_1x1&Block8_6_Branch_0_Conv2d_1x1_BatchNorm'Block8_6_Branch_0_Conv2d_1x1_ActivationBlock8_6_Branch_1_Conv2d_0a_1x1)Block8_6_Branch_1_Conv2d_0a_1x1_BatchNorm*Block8_6_Branch_1_Conv2d_0a_1x1_ActivationBlock8_6_Branch_1_Conv2d_0b_1x3)Block8_6_Branch_1_Conv2d_0b_1x3_BatchNorm*Block8_6_Branch_1_Conv2d_0b_1x3_ActivationBlock8_6_Branch_1_Conv2d_0c_3x1)Block8_6_Branch_1_Conv2d_0c_3x1_BatchNorm*Block8_6_Branch_1_Conv2d_0c_3x1_ActivationBlock8_6_ConcatenateBlock8_6_Conv2d_1x1AvgPoolg?r   
Bottleneck)rQ   rR   Bottleneck_BatchNorm)rU   rV   rE   rR   inception_resnet_v1)r   r   r   r   r   r   r   rF   K	int_shaper   r   r   r   r
   )rG   inputsrD   branch_0branch_1branch_2branchesmixedupbranch_poolr   s              r$   InceptionResNetV2r  d   s8    'FWr1a5WX^_A	UAZ			A 	<
6 :;A>AWr1a5WXYZA	UAZ			A 	<
6 :;A>AVr1a%oVWXYA	UAZ			A 	<
6 :;A>A9Q(89!<AWr1a5WXYZA	UAZ			A 	<
6 :;A>AXsAq'EXYZ[A	UAZ			A 	<
6 :;A>AXsAq'EXYZ[A	UAZ			A 	<
6 :;A>Av
Aq&5?^	H!6 H Sz&'QRS[\Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_H(H-H=KQ%<=hGE	^Q6DG]	^
B 
Vakk"oab&9gt_	UVX	YBQGA7
6 67:Av
Aq&5?^	H!6 H Sz&'QRS[\Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_H(H-H=KQ%<=hGE	^Q6DG]	^
B 
Vakk"oab&9gt_	UVX	YBQGA7
6 67:Av
Aq&5?^	H!6 H Sz&'QRS[\Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_H(H-H=KQ%<=hGE	^Q6DG]	^
B 
Vakk"oab&9gt_	UVX	YBQGA7
6 67:Av
Aq&5?^	H!6 H Sz&'QRS[\Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_H(H-H=KQ%<=hGE	^Q6DG]	^
B 
Vakk"oab&9gt_	UVX	YBQGA7
6 67:Av
Aq&5?^	H!6 H Sz&'QRS[\Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?a	H!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_Hv
Aq&5?aH!9 H Vz&'TUV^_H(H-H=KQ%<=hGE	^Q6DG]	^
B 
Vakk"oab&9gt_	UVX	YBQGA7
6 67:AvQ7UAb	H!8 H Uz&'STU]^HvQ6E@a	H!8 H Uz&'STU]^HvQ6E@aH!8 H Uz&'STU]^HvQ7UAbH!8 H Uz&'STU]^H,	1g,N	K (K0H,,X6AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@_	H!6 H Sz&'QRS[\HvQ6E@b	H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_Hv	
A/ H!9 H Vz&'TUV^_H(#H=KQ%<=hGE	^Q6DG]	^
B 
Uakk"oab&9gs^	TUW	XBQGA7
6 67:AvQ6E@`	H!7 H Tz&'RST\]HvQ6E@d	H!; H Xz&'VWX`aHv	
A1 H!; H Xz&'VWX`aHv	
A1 H!; H Xz&'VWX`aH(#H>KQ%=>xHE	_Q6DG^	_
B 
Uakk"oab&9gs^	TUW	XBQGA8
6 78;AvQ6E@a	H!8 H Uz&'STU]^HvQ7UAbH!8 H Uz&'STU]^HvQ6E@a	H!8 H Uz&'STU]^HvQ7UAbH!8 H Uz&'STU]^HvQ6E@a	H!8 H Uz&'STU]^HvQ6E@aH!8 H Uz&'STU]^HvQ7UAbH!8 H Uz&'STU]^H,	1g,N	K (Hk:H,,X6AvQ6E@^	H!5 H Rz&'PQRZ[HvQ6E@a	H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^H(#H<KQ%;<XFE	^aFTH]	^
B 
Uakk"oab&9gs^	TUW	XBQGA6
6 56q9AvQ6E@^	H!5 H Rz&'PQRZ[HvQ6E@a	H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^H(#H<KQ%;<XFE	^aFTH]	^
B 
Uakk"oab&9gs^	TUW	XBQGA6
6 56q9AvQ6E@^	H!5 H Rz&'PQRZ[HvQ6E@a	H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^H(#H<KQ%;<XFE	^aFTH]	^
B 
Uakk"oab&9gs^	TUW	XBQGA6
6 56q9AvQ6E@^	H!5 H Rz&'PQRZ[HvQ6E@a	H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^H(#H<KQ%;<XFE	^aFTH]	^
B 
Uakk"oab&9gs^	TUW	XBQGA6
6 56q9AvQ6E@^	H!5 H Rz&'PQRZ[HvQ6E@a	H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^H(#H<KQ%;<XFE	^aFTH]	^
B 
Uakk"oab&9gs^	TUW	XBQGA6
6 56q9AvQ6E@^	H!5 H Rz&'PQRZ[HvQ6E@a	H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^Hv	
A. H!8 H Uz&'STU]^H(#H<KQ%;<XFE	^aFTH]	^
B 
Sakk"oab&9gq\	RSU	VBQGA 	/I.q1A*		*1-A;i%l;A>AcE5Lbc		A
 &!"78ELr'   c                    t               }t        j                         }t        j                  j                  |dz         dk7  r2t        j                  d       |dz   }t        j                  | |d       |j                  |dz          |S )z
    Construct FaceNet-128d model, download weights and then load weights
    Args:
        dimension (int): construct FaceNet-128d or FaceNet-512d models
    Returns:
        model (Model)
    z%/.deepface/weights/facenet_weights.h5Tz(facenet_weights.h5 will be downloaded...Fquietr  r   get_deepface_homeospathisfileloggerinfogdowndownloadload_weightsurlr   homeoutputs       r$   r   r     s|     E ))+D	ww~~dDDEM>???sF%0 
tEEF Lr'   c                    t        d      }t        j                         }t        j                  j                  |dz         dk7  r2t        j                  d       |dz   }t        j                  | |d       |j                  |dz          |S )zh
    Construct FaceNet-512d model, download its weights and load
    Returns:
        model (Model)
    r@   )rG   z(/.deepface/weights/facenet512_weights.h5Tz+facenet512_weights.h5 will be downloaded...Fr  r  r	  s       r$   rA   rA     s~     ,E ))+D	ww~~dGGHDPABBBsF%0 
tHHI Lr'   )r   )zUhttps://github.com/serengil/deepface_models/releases/download/v1.0/facenet_weights.h5)zXhttps://github.com/serengil/deepface_models/releases/download/v1.0/facenet512_weights.h5)+typingr   r  r  r.   r8   deepface.commonsr   r   deepface.commons.loggerr   !deepface.models.FacialRecognitionr   r  get_tf_major_version
tf_versionkeras.modelsr
   keras.layersr   r   r   r   r   r   r   r   r   r   r   kerasr   r  tensorflow.keras.modelstensorflow.keras.layerstensorflow.kerasr   r>   rF   intr  r   rA   r;   r'   r$   <module>r     s     	   8 * ?	+	,
 0]//1
?"'/(#"$3"#) "-2:3.-/>-.4+-
C) C0C) C0g gu gV1 	`
@ 	c
r'   