o
    7?e                     @   s  d dl Z d dlZd dlZd dlmZ eejjdddd  Z	e	dkrqd 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 dd ZdddZ	dddZ dS )    N)	functions.   )maxsplit)Model)
Activation)BatchNormalization)Concatenate)Conv2D)Dense)Dropout)GlobalAveragePooling2D)Input)Lambda)MaxPooling2D)add)backendc                 C   s   | | S )N )xscaler   r   \/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/deepface/basemodels/Facenet.pyscaling+   s   r      c                 C   s&  t dd}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tdddd|}tddddddd	|}tdd
dddd|}tddd|}td ddddd!d	|}tdd
ddd"d|}tdd#d|}td$ddddd%d	|}tdd
ddd&d|}tdd'd|}tdddddd(d	|}tdd
ddd)d|}tdd*d|}tdddddd+d	|}tdd
ddd,d|}tdd-d|}tdddddd.d	|}tdd
ddd/d|}tdd0d|}tdddddd1d	|}tdd
ddd2d|}tdd3d|}tdddddd4d	|}tdd
ddd5d|}tdd6d|}tdddddd7d	|}tdd
ddd8d|}tdd9d|}|||g}tdd:d;|}td$dddd<d=d	|}ttt	|dd  d>d?id@|}t
||g}tddAd|}tddddddBd	|}tdd
dddCd|}tddDd|}tddddddEd	|}tdd
dddFd|}tddGd|}tddddddHd	|}tdd
dddId|}tddJd|}tddddddKd	|}tdd
dddLd|}tddMd|}tddddddNd	|}tdd
dddOd|}tddPd|}tddddddQd	|}tdd
dddRd|}tddSd|}|||g}tddTd;|}td$dddd<dUd	|}ttt	|dd  d>d?id@|}t
||g}tddVd|}tddddddWd	|}tdd
dddXd|}tddYd|}tddddddZd	|}tdd
ddd[d|}tdd\d|}tdddddd]d	|}tdd
ddd^d|}tdd_d|}tdddddd`d	|}tdd
dddad|}tddbd|}tddddddcd	|}tdd
ddddd|}tdded|}tddddddfd	|}tdd
dddgd|}tddhd|}|||g}tddid;|}td$dddd<djd	|}ttt	|dd  d>d?id@|}t
||g}tddkd|}tddddddld	|}tdd
dddmd|}tddnd|}tddddddod	|}tdd
dddpd|}tddqd|}tddddddrd	|}tdd
dddsd|}tddtd|}tddddddud	|}tdd
dddvd|}tddwd|}tddddddxd	|}tdd
dddyd|}tddzd|}tdddddd{d	|}tdd
ddd|d|}tdd}d|}|||g}tdd~d;|}td$dddd<dd	|}ttt	|dd  d>d?id@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}|||g}tddd;|}td$dddd<dd	|}ttt	|dd  d>d?id@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}td dddddd	|}tdd
dddd|}tddd|}td dddddd	|}tdd
dddd|}tddd|}td$dddddd	|}tdd
dddd|}tddd|}tddddd|}	|||	g}tddd;|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tddddd<dd	|}ttt	|dd  d>did@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tddddd<dd	|}ttt	|dd  d>did@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tddddd<dd	|}ttt	|dd  d>did@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tddddd<dd	|}ttt	|dd  d>did@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tddddd<dd	|}ttt	|dd  d>did@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tdd d|}||g}tddd;|}tddddd<dd	|}ttt	|dd  d>did@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tdd	d|}tdddgdddd
d	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tddddd<dd	|}ttt	|dd  d>did@|}t
||g}tddd|}tddddddd	|}tdd
dddd|}tddd|}tddddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}tdddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tddddd<d d	|}ttt	|dd  d>did@|}t
||g}tdd!d|}tdddddd"d	|}tdd
ddd#d|}tdd$d|}tdddddd%d	|}tdd
ddd&d|}tdd'd|}tdddgdddd(d	|}tdd
ddd)d|}tdd*d|}tdddgdddd+d	|}tdd
ddd,d|}tdd-d|}||g}tdd.d;|}tddddd<d/d	|}ttt	|dd  d>did@|}t
||g}tdd0d|}tdddddd1d	|}tdd
ddd2d|}tdd3d|}tdddddd4d	|}tdd
ddd5d|}tdd6d|}tdddgdddd7d	|}tdd
ddd8d|}tdd9d|}tdddgdddd:d	|}tdd
ddd;d|}tdd<d|}||g}tdd=d;|}tddddd<d>d	|}ttt	|dd  d>did@|}t
||g}tdd?d|}td$ddddd@d	|}tdd
dddAd|}tddBd|}tddddddCd	|}tdd
dddDd|}tddEd|}td$dddddFd	|}tdd
dddGd|}tddHd|}td$dddddId	|}tdd
dddJd|}tddKd|}td$dddddLd	|}tdd
dddMd|}tddNd|}td$dddddOd	|}tdd
dddPd|}tddQd|}td$dddddRd	|}tdd
dddSd|}tddTd|}tddddUd|}	||||	g}tddVd;|}td dddddWd	|}tdd
dddXd|}tddYd|}td dddddZd	|}tdd
ddd[d|}tdd\d|}td ddgdddd]d	|}tdd
ddd^d|}tdd_d|}td ddgdddd`d	|}tdd
dddad|}tddbd|}||g}tddcd;|}tdddddd<ded	|}ttt	|dd  d>dfid@|}t
||g}tddgd|}td dddddhd	|}tdd
dddid|}tddjd|}td dddddkd	|}tdd
dddld|}tddmd|}td ddgddddnd	|}tdd
dddod|}tddpd|}td ddgddddqd	|}tdd
dddrd|}tddsd|}||g}tddtd;|}tdddddd<dud	|}ttt	|dd  d>dfid@|}t
||g}tddvd|}td dddddwd	|}tdd
dddxd|}tddyd|}td dddddzd	|}tdd
ddd{d|}tdd|d|}td ddgdddd}d	|}tdd
ddd~d|}tddd|}td ddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tdddddd<dd	|}ttt	|dd  d>dfid@|}t
||g}tddd|}td dddddd	|}tdd
dddd|}tddd|}td dddddd	|}tdd
dddd|}tddd|}td ddgddddd	|}tdd
dddd|}tddd|}td ddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tdddddd<dd	|}ttt	|dd  d>dfid@|}t
||g}tddd|}td dddddd	|}tdd
dddd|}tddd|}td dddddd	|}tdd
dddd|}tddd|}td ddgddddd	|}tdd
dddd|}tddd|}td ddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tdddddd<dd	|}ttt	|dd  d>dfid@|}t
||g}tddd|}td dddddd	|}tdd
dddd|}tddd|}td dddddd	|}tdd
dddd|}tddd|}td ddgddddd	|}tdd
dddd|}tddd|}td ddgddddd	|}tdd
dddd|}tddd|}||g}tddd;|}tdddddd<dd	|}ttt	|dd  d>did@|}t
||g}tdd|}tddd|}t| ddd|}td
dddd|}t||dd}
|
S (  N)   r      )shape    r      ZvalidFZConv2d_1a_3x3)stridespaddinguse_biasnamegףp=
?gMbP?ZConv2d_1a_3x3_BatchNorm)axismomentumepsilonr   r!   ZreluZConv2d_1a_3x3_Activation)r!   r   ZConv2d_2a_3x3ZConv2d_2a_3x3_BatchNormZConv2d_2a_3x3_Activation@   ZsameZConv2d_2b_3x3ZConv2d_2b_3x3_BatchNormZConv2d_2b_3x3_ActivationZMaxPool_3a_3x3)r   r!   P   ZConv2d_3b_1x1ZConv2d_3b_1x1_BatchNormZConv2d_3b_1x1_Activation   ZConv2d_4a_3x3ZConv2d_4a_3x3_BatchNormZConv2d_4a_3x3_Activation   ZConv2d_4b_3x3ZConv2d_4b_3x3_BatchNormZConv2d_4b_3x3_ActivationZBlock35_1_Branch_0_Conv2d_1x1Z'Block35_1_Branch_0_Conv2d_1x1_BatchNormZ(Block35_1_Branch_0_Conv2d_1x1_ActivationZ Block35_1_Branch_1_Conv2d_0a_1x1Z*Block35_1_Branch_1_Conv2d_0a_1x1_BatchNormZ+Block35_1_Branch_1_Conv2d_0a_1x1_ActivationZ Block35_1_Branch_1_Conv2d_0b_3x3Z*Block35_1_Branch_1_Conv2d_0b_3x3_BatchNormZ+Block35_1_Branch_1_Conv2d_0b_3x3_ActivationZ Block35_1_Branch_2_Conv2d_0a_1x1Z*Block35_1_Branch_2_Conv2d_0a_1x1_BatchNormZ+Block35_1_Branch_2_Conv2d_0a_1x1_ActivationZ Block35_1_Branch_2_Conv2d_0b_3x3Z*Block35_1_Branch_2_Conv2d_0b_3x3_BatchNormZ+Block35_1_Branch_2_Conv2d_0b_3x3_ActivationZ Block35_1_Branch_2_Conv2d_0c_3x3Z*Block35_1_Branch_2_Conv2d_0c_3x3_BatchNormZ+Block35_1_Branch_2_Conv2d_0c_3x3_ActivationZBlock35_1_Concatenate)r"   r!   TZBlock35_1_Conv2d_1x1r   g(\?)Zoutput_shape	argumentsZBlock35_1_ActivationZBlock35_2_Branch_0_Conv2d_1x1Z'Block35_2_Branch_0_Conv2d_1x1_BatchNormZ(Block35_2_Branch_0_Conv2d_1x1_ActivationZ Block35_2_Branch_1_Conv2d_0a_1x1Z*Block35_2_Branch_1_Conv2d_0a_1x1_BatchNormZ+Block35_2_Branch_1_Conv2d_0a_1x1_ActivationZ Block35_2_Branch_1_Conv2d_0b_3x3Z*Block35_2_Branch_1_Conv2d_0b_3x3_BatchNormZ+Block35_2_Branch_1_Conv2d_0b_3x3_ActivationZ Block35_2_Branch_2_Conv2d_0a_1x1Z*Block35_2_Branch_2_Conv2d_0a_1x1_BatchNormZ+Block35_2_Branch_2_Conv2d_0a_1x1_ActivationZ Block35_2_Branch_2_Conv2d_0b_3x3Z*Block35_2_Branch_2_Conv2d_0b_3x3_BatchNormZ+Block35_2_Branch_2_Conv2d_0b_3x3_ActivationZ Block35_2_Branch_2_Conv2d_0c_3x3Z*Block35_2_Branch_2_Conv2d_0c_3x3_BatchNormZ+Block35_2_Branch_2_Conv2d_0c_3x3_ActivationZBlock35_2_ConcatenateZBlock35_2_Conv2d_1x1ZBlock35_2_ActivationZBlock35_3_Branch_0_Conv2d_1x1Z'Block35_3_Branch_0_Conv2d_1x1_BatchNormZ(Block35_3_Branch_0_Conv2d_1x1_ActivationZ Block35_3_Branch_1_Conv2d_0a_1x1Z*Block35_3_Branch_1_Conv2d_0a_1x1_BatchNormZ+Block35_3_Branch_1_Conv2d_0a_1x1_ActivationZ Block35_3_Branch_1_Conv2d_0b_3x3Z*Block35_3_Branch_1_Conv2d_0b_3x3_BatchNormZ+Block35_3_Branch_1_Conv2d_0b_3x3_ActivationZ Block35_3_Branch_2_Conv2d_0a_1x1Z*Block35_3_Branch_2_Conv2d_0a_1x1_BatchNormZ+Block35_3_Branch_2_Conv2d_0a_1x1_ActivationZ Block35_3_Branch_2_Conv2d_0b_3x3Z*Block35_3_Branch_2_Conv2d_0b_3x3_BatchNormZ+Block35_3_Branch_2_Conv2d_0b_3x3_ActivationZ Block35_3_Branch_2_Conv2d_0c_3x3Z*Block35_3_Branch_2_Conv2d_0c_3x3_BatchNormZ+Block35_3_Branch_2_Conv2d_0c_3x3_ActivationZBlock35_3_ConcatenateZBlock35_3_Conv2d_1x1ZBlock35_3_ActivationZBlock35_4_Branch_0_Conv2d_1x1Z'Block35_4_Branch_0_Conv2d_1x1_BatchNormZ(Block35_4_Branch_0_Conv2d_1x1_ActivationZ Block35_4_Branch_1_Conv2d_0a_1x1Z*Block35_4_Branch_1_Conv2d_0a_1x1_BatchNormZ+Block35_4_Branch_1_Conv2d_0a_1x1_ActivationZ Block35_4_Branch_1_Conv2d_0b_3x3Z*Block35_4_Branch_1_Conv2d_0b_3x3_BatchNormZ+Block35_4_Branch_1_Conv2d_0b_3x3_ActivationZ Block35_4_Branch_2_Conv2d_0a_1x1Z*Block35_4_Branch_2_Conv2d_0a_1x1_BatchNormZ+Block35_4_Branch_2_Conv2d_0a_1x1_ActivationZ Block35_4_Branch_2_Conv2d_0b_3x3Z*Block35_4_Branch_2_Conv2d_0b_3x3_BatchNormZ+Block35_4_Branch_2_Conv2d_0b_3x3_ActivationZ Block35_4_Branch_2_Conv2d_0c_3x3Z*Block35_4_Branch_2_Conv2d_0c_3x3_BatchNormZ+Block35_4_Branch_2_Conv2d_0c_3x3_ActivationZBlock35_4_ConcatenateZBlock35_4_Conv2d_1x1ZBlock35_4_ActivationZBlock35_5_Branch_0_Conv2d_1x1Z'Block35_5_Branch_0_Conv2d_1x1_BatchNormZ(Block35_5_Branch_0_Conv2d_1x1_ActivationZ Block35_5_Branch_1_Conv2d_0a_1x1Z*Block35_5_Branch_1_Conv2d_0a_1x1_BatchNormZ+Block35_5_Branch_1_Conv2d_0a_1x1_ActivationZ Block35_5_Branch_1_Conv2d_0b_3x3Z*Block35_5_Branch_1_Conv2d_0b_3x3_BatchNormZ+Block35_5_Branch_1_Conv2d_0b_3x3_ActivationZ Block35_5_Branch_2_Conv2d_0a_1x1Z*Block35_5_Branch_2_Conv2d_0a_1x1_BatchNormZ+Block35_5_Branch_2_Conv2d_0a_1x1_ActivationZ Block35_5_Branch_2_Conv2d_0b_3x3Z*Block35_5_Branch_2_Conv2d_0b_3x3_BatchNormZ+Block35_5_Branch_2_Conv2d_0b_3x3_ActivationZ Block35_5_Branch_2_Conv2d_0c_3x3Z*Block35_5_Branch_2_Conv2d_0c_3x3_BatchNormZ+Block35_5_Branch_2_Conv2d_0c_3x3_ActivationZBlock35_5_ConcatenateZBlock35_5_Conv2d_1x1ZBlock35_5_Activationi  ZMixed_6a_Branch_0_Conv2d_1a_3x3Z)Mixed_6a_Branch_0_Conv2d_1a_3x3_BatchNormZ*Mixed_6a_Branch_0_Conv2d_1a_3x3_ActivationZMixed_6a_Branch_1_Conv2d_0a_1x1Z)Mixed_6a_Branch_1_Conv2d_0a_1x1_BatchNormZ*Mixed_6a_Branch_1_Conv2d_0a_1x1_ActivationZMixed_6a_Branch_1_Conv2d_0b_3x3Z)Mixed_6a_Branch_1_Conv2d_0b_3x3_BatchNormZ*Mixed_6a_Branch_1_Conv2d_0b_3x3_ActivationZMixed_6a_Branch_1_Conv2d_1a_3x3Z)Mixed_6a_Branch_1_Conv2d_1a_3x3_BatchNormZ*Mixed_6a_Branch_1_Conv2d_1a_3x3_ActivationZ Mixed_6a_Branch_2_MaxPool_1a_3x3)r   r   r!   ZMixed_6ar   ZBlock17_1_Branch_0_Conv2d_1x1Z'Block17_1_Branch_0_Conv2d_1x1_BatchNormZ(Block17_1_Branch_0_Conv2d_1x1_ActivationZ Block17_1_Branch_1_Conv2d_0a_1x1Z*Block17_1_Branch_1_Conv2d_0a_1x1_BatchNormZ+Block17_1_Branch_1_Conv2d_0a_1x1_Activation   Z Block17_1_Branch_1_Conv2d_0b_1x7Z*Block17_1_Branch_1_Conv2d_0b_1x7_BatchNormZ+Block17_1_Branch_1_Conv2d_0b_1x7_ActivationZ Block17_1_Branch_1_Conv2d_0c_7x1Z*Block17_1_Branch_1_Conv2d_0c_7x1_BatchNormZ+Block17_1_Branch_1_Conv2d_0c_7x1_ActivationZBlock17_1_Concatenatei  ZBlock17_1_Conv2d_1x1g?ZBlock17_1_ActivationZBlock17_2_Branch_0_Conv2d_1x1Z'Block17_2_Branch_0_Conv2d_1x1_BatchNormZ(Block17_2_Branch_0_Conv2d_1x1_ActivationZ Block17_2_Branch_2_Conv2d_0a_1x1Z*Block17_2_Branch_2_Conv2d_0a_1x1_BatchNormZ+Block17_2_Branch_2_Conv2d_0a_1x1_ActivationZ Block17_2_Branch_2_Conv2d_0b_1x7Z*Block17_2_Branch_2_Conv2d_0b_1x7_BatchNormZ+Block17_2_Branch_2_Conv2d_0b_1x7_ActivationZ Block17_2_Branch_2_Conv2d_0c_7x1Z*Block17_2_Branch_2_Conv2d_0c_7x1_BatchNormZ+Block17_2_Branch_2_Conv2d_0c_7x1_ActivationZBlock17_2_ConcatenateZBlock17_2_Conv2d_1x1ZBlock17_2_ActivationZBlock17_3_Branch_0_Conv2d_1x1Z'Block17_3_Branch_0_Conv2d_1x1_BatchNormZ(Block17_3_Branch_0_Conv2d_1x1_ActivationZ Block17_3_Branch_3_Conv2d_0a_1x1Z*Block17_3_Branch_3_Conv2d_0a_1x1_BatchNormZ+Block17_3_Branch_3_Conv2d_0a_1x1_ActivationZ Block17_3_Branch_3_Conv2d_0b_1x7Z*Block17_3_Branch_3_Conv2d_0b_1x7_BatchNormZ+Block17_3_Branch_3_Conv2d_0b_1x7_ActivationZ Block17_3_Branch_3_Conv2d_0c_7x1Z*Block17_3_Branch_3_Conv2d_0c_7x1_BatchNormZ+Block17_3_Branch_3_Conv2d_0c_7x1_ActivationZBlock17_3_ConcatenateZBlock17_3_Conv2d_1x1ZBlock17_3_ActivationZBlock17_4_Branch_0_Conv2d_1x1Z'Block17_4_Branch_0_Conv2d_1x1_BatchNormZ(Block17_4_Branch_0_Conv2d_1x1_ActivationZ Block17_4_Branch_4_Conv2d_0a_1x1Z*Block17_4_Branch_4_Conv2d_0a_1x1_BatchNormZ+Block17_4_Branch_4_Conv2d_0a_1x1_ActivationZ Block17_4_Branch_4_Conv2d_0b_1x7Z*Block17_4_Branch_4_Conv2d_0b_1x7_BatchNormZ+Block17_4_Branch_4_Conv2d_0b_1x7_ActivationZ Block17_4_Branch_4_Conv2d_0c_7x1Z*Block17_4_Branch_4_Conv2d_0c_7x1_BatchNormZ+Block17_4_Branch_4_Conv2d_0c_7x1_ActivationZBlock17_4_ConcatenateZBlock17_4_Conv2d_1x1ZBlock17_4_ActivationZBlock17_5_Branch_0_Conv2d_1x1Z'Block17_5_Branch_0_Conv2d_1x1_BatchNormZ(Block17_5_Branch_0_Conv2d_1x1_ActivationZ Block17_5_Branch_5_Conv2d_0a_1x1Z*Block17_5_Branch_5_Conv2d_0a_1x1_BatchNormZ+Block17_5_Branch_5_Conv2d_0a_1x1_ActivationZ Block17_5_Branch_5_Conv2d_0b_1x7Z*Block17_5_Branch_5_Conv2d_0b_1x7_BatchNormZ+Block17_5_Branch_5_Conv2d_0b_1x7_ActivationZ Block17_5_Branch_5_Conv2d_0c_7x1Z*Block17_5_Branch_5_Conv2d_0c_7x1_BatchNormZ+Block17_5_Branch_5_Conv2d_0c_7x1_ActivationZBlock17_5_ConcatenateZBlock17_5_Conv2d_1x1ZBlock17_5_ActivationZBlock17_6_Branch_0_Conv2d_1x1Z'Block17_6_Branch_0_Conv2d_1x1_BatchNormZ(Block17_6_Branch_0_Conv2d_1x1_ActivationZ Block17_6_Branch_6_Conv2d_0a_1x1Z*Block17_6_Branch_6_Conv2d_0a_1x1_BatchNormZ+Block17_6_Branch_6_Conv2d_0a_1x1_ActivationZ Block17_6_Branch_6_Conv2d_0b_1x7Z*Block17_6_Branch_6_Conv2d_0b_1x7_BatchNormZ+Block17_6_Branch_6_Conv2d_0b_1x7_ActivationZ Block17_6_Branch_6_Conv2d_0c_7x1Z*Block17_6_Branch_6_Conv2d_0c_7x1_BatchNormZ+Block17_6_Branch_6_Conv2d_0c_7x1_ActivationZBlock17_6_ConcatenateZBlock17_6_Conv2d_1x1ZBlock17_6_ActivationZBlock17_7_Branch_0_Conv2d_1x1Z'Block17_7_Branch_0_Conv2d_1x1_BatchNormZ(Block17_7_Branch_0_Conv2d_1x1_ActivationZ Block17_7_Branch_7_Conv2d_0a_1x1Z*Block17_7_Branch_7_Conv2d_0a_1x1_BatchNormZ+Block17_7_Branch_7_Conv2d_0a_1x1_ActivationZ Block17_7_Branch_7_Conv2d_0b_1x7Z*Block17_7_Branch_7_Conv2d_0b_1x7_BatchNormZ+Block17_7_Branch_7_Conv2d_0b_1x7_ActivationZ Block17_7_Branch_7_Conv2d_0c_7x1Z*Block17_7_Branch_7_Conv2d_0c_7x1_BatchNormZ+Block17_7_Branch_7_Conv2d_0c_7x1_ActivationZBlock17_7_ConcatenateZBlock17_7_Conv2d_1x1ZBlock17_7_ActivationZBlock17_8_Branch_0_Conv2d_1x1Z'Block17_8_Branch_0_Conv2d_1x1_BatchNormZ(Block17_8_Branch_0_Conv2d_1x1_ActivationZ Block17_8_Branch_8_Conv2d_0a_1x1Z*Block17_8_Branch_8_Conv2d_0a_1x1_BatchNormZ+Block17_8_Branch_8_Conv2d_0a_1x1_ActivationZ Block17_8_Branch_8_Conv2d_0b_1x7Z*Block17_8_Branch_8_Conv2d_0b_1x7_BatchNormZ+Block17_8_Branch_8_Conv2d_0b_1x7_ActivationZ Block17_8_Branch_8_Conv2d_0c_7x1Z*Block17_8_Branch_8_Conv2d_0c_7x1_BatchNormZ+Block17_8_Branch_8_Conv2d_0c_7x1_ActivationZBlock17_8_ConcatenateZBlock17_8_Conv2d_1x1ZBlock17_8_ActivationZBlock17_9_Branch_0_Conv2d_1x1Z'Block17_9_Branch_0_Conv2d_1x1_BatchNormZ(Block17_9_Branch_0_Conv2d_1x1_ActivationZ Block17_9_Branch_9_Conv2d_0a_1x1Z*Block17_9_Branch_9_Conv2d_0a_1x1_BatchNormZ+Block17_9_Branch_9_Conv2d_0a_1x1_ActivationZ Block17_9_Branch_9_Conv2d_0b_1x7Z*Block17_9_Branch_9_Conv2d_0b_1x7_BatchNormZ+Block17_9_Branch_9_Conv2d_0b_1x7_ActivationZ Block17_9_Branch_9_Conv2d_0c_7x1Z*Block17_9_Branch_9_Conv2d_0c_7x1_BatchNormZ+Block17_9_Branch_9_Conv2d_0c_7x1_ActivationZBlock17_9_ConcatenateZBlock17_9_Conv2d_1x1ZBlock17_9_ActivationZBlock17_10_Branch_0_Conv2d_1x1Z(Block17_10_Branch_0_Conv2d_1x1_BatchNormZ)Block17_10_Branch_0_Conv2d_1x1_ActivationZ"Block17_10_Branch_10_Conv2d_0a_1x1Z,Block17_10_Branch_10_Conv2d_0a_1x1_BatchNormZ-Block17_10_Branch_10_Conv2d_0a_1x1_ActivationZ"Block17_10_Branch_10_Conv2d_0b_1x7Z,Block17_10_Branch_10_Conv2d_0b_1x7_BatchNormZ-Block17_10_Branch_10_Conv2d_0b_1x7_ActivationZ"Block17_10_Branch_10_Conv2d_0c_7x1Z,Block17_10_Branch_10_Conv2d_0c_7x1_BatchNormZ-Block17_10_Branch_10_Conv2d_0c_7x1_ActivationZBlock17_10_ConcatenateZBlock17_10_Conv2d_1x1ZBlock17_10_ActivationZMixed_7a_Branch_0_Conv2d_0a_1x1Z)Mixed_7a_Branch_0_Conv2d_0a_1x1_BatchNormZ*Mixed_7a_Branch_0_Conv2d_0a_1x1_ActivationZMixed_7a_Branch_0_Conv2d_1a_3x3Z)Mixed_7a_Branch_0_Conv2d_1a_3x3_BatchNormZ*Mixed_7a_Branch_0_Conv2d_1a_3x3_ActivationZMixed_7a_Branch_1_Conv2d_0a_1x1Z)Mixed_7a_Branch_1_Conv2d_0a_1x1_BatchNormZ*Mixed_7a_Branch_1_Conv2d_0a_1x1_ActivationZMixed_7a_Branch_1_Conv2d_1a_3x3Z)Mixed_7a_Branch_1_Conv2d_1a_3x3_BatchNormZ*Mixed_7a_Branch_1_Conv2d_1a_3x3_ActivationZMixed_7a_Branch_2_Conv2d_0a_1x1Z)Mixed_7a_Branch_2_Conv2d_0a_1x1_BatchNormZ*Mixed_7a_Branch_2_Conv2d_0a_1x1_ActivationZMixed_7a_Branch_2_Conv2d_0b_3x3Z)Mixed_7a_Branch_2_Conv2d_0b_3x3_BatchNormZ*Mixed_7a_Branch_2_Conv2d_0b_3x3_ActivationZMixed_7a_Branch_2_Conv2d_1a_3x3Z)Mixed_7a_Branch_2_Conv2d_1a_3x3_BatchNormZ*Mixed_7a_Branch_2_Conv2d_1a_3x3_ActivationZ Mixed_7a_Branch_3_MaxPool_1a_3x3ZMixed_7aZBlock8_1_Branch_0_Conv2d_1x1Z&Block8_1_Branch_0_Conv2d_1x1_BatchNormZ'Block8_1_Branch_0_Conv2d_1x1_ActivationZBlock8_1_Branch_1_Conv2d_0a_1x1Z)Block8_1_Branch_1_Conv2d_0a_1x1_BatchNormZ*Block8_1_Branch_1_Conv2d_0a_1x1_ActivationZBlock8_1_Branch_1_Conv2d_0b_1x3Z)Block8_1_Branch_1_Conv2d_0b_1x3_BatchNormZ*Block8_1_Branch_1_Conv2d_0b_1x3_ActivationZBlock8_1_Branch_1_Conv2d_0c_3x1Z)Block8_1_Branch_1_Conv2d_0c_3x1_BatchNormZ*Block8_1_Branch_1_Conv2d_0c_3x1_ActivationZBlock8_1_Concatenatei   ZBlock8_1_Conv2d_1x1g?ZBlock8_1_ActivationZBlock8_2_Branch_0_Conv2d_1x1Z&Block8_2_Branch_0_Conv2d_1x1_BatchNormZ'Block8_2_Branch_0_Conv2d_1x1_ActivationZBlock8_2_Branch_2_Conv2d_0a_1x1Z)Block8_2_Branch_2_Conv2d_0a_1x1_BatchNormZ*Block8_2_Branch_2_Conv2d_0a_1x1_ActivationZBlock8_2_Branch_2_Conv2d_0b_1x3Z)Block8_2_Branch_2_Conv2d_0b_1x3_BatchNormZ*Block8_2_Branch_2_Conv2d_0b_1x3_ActivationZBlock8_2_Branch_2_Conv2d_0c_3x1Z)Block8_2_Branch_2_Conv2d_0c_3x1_BatchNormZ*Block8_2_Branch_2_Conv2d_0c_3x1_ActivationZBlock8_2_ConcatenateZBlock8_2_Conv2d_1x1ZBlock8_2_ActivationZBlock8_3_Branch_0_Conv2d_1x1Z&Block8_3_Branch_0_Conv2d_1x1_BatchNormZ'Block8_3_Branch_0_Conv2d_1x1_ActivationZBlock8_3_Branch_3_Conv2d_0a_1x1Z)Block8_3_Branch_3_Conv2d_0a_1x1_BatchNormZ*Block8_3_Branch_3_Conv2d_0a_1x1_ActivationZBlock8_3_Branch_3_Conv2d_0b_1x3Z)Block8_3_Branch_3_Conv2d_0b_1x3_BatchNormZ*Block8_3_Branch_3_Conv2d_0b_1x3_ActivationZBlock8_3_Branch_3_Conv2d_0c_3x1Z)Block8_3_Branch_3_Conv2d_0c_3x1_BatchNormZ*Block8_3_Branch_3_Conv2d_0c_3x1_ActivationZBlock8_3_ConcatenateZBlock8_3_Conv2d_1x1ZBlock8_3_ActivationZBlock8_4_Branch_0_Conv2d_1x1Z&Block8_4_Branch_0_Conv2d_1x1_BatchNormZ'Block8_4_Branch_0_Conv2d_1x1_ActivationZBlock8_4_Branch_4_Conv2d_0a_1x1Z)Block8_4_Branch_4_Conv2d_0a_1x1_BatchNormZ*Block8_4_Branch_4_Conv2d_0a_1x1_ActivationZBlock8_4_Branch_4_Conv2d_0b_1x3Z)Block8_4_Branch_4_Conv2d_0b_1x3_BatchNormZ*Block8_4_Branch_4_Conv2d_0b_1x3_ActivationZBlock8_4_Branch_4_Conv2d_0c_3x1Z)Block8_4_Branch_4_Conv2d_0c_3x1_BatchNormZ*Block8_4_Branch_4_Conv2d_0c_3x1_ActivationZBlock8_4_ConcatenateZBlock8_4_Conv2d_1x1ZBlock8_4_ActivationZBlock8_5_Branch_0_Conv2d_1x1Z&Block8_5_Branch_0_Conv2d_1x1_BatchNormZ'Block8_5_Branch_0_Conv2d_1x1_ActivationZBlock8_5_Branch_5_Conv2d_0a_1x1Z)Block8_5_Branch_5_Conv2d_0a_1x1_BatchNormZ*Block8_5_Branch_5_Conv2d_0a_1x1_ActivationZBlock8_5_Branch_5_Conv2d_0b_1x3Z)Block8_5_Branch_5_Conv2d_0b_1x3_BatchNormZ*Block8_5_Branch_5_Conv2d_0b_1x3_ActivationZBlock8_5_Branch_5_Conv2d_0c_3x1Z)Block8_5_Branch_5_Conv2d_0c_3x1_BatchNormZ*Block8_5_Branch_5_Conv2d_0c_3x1_ActivationZBlock8_5_ConcatenateZBlock8_5_Conv2d_1x1ZBlock8_5_ActivationZBlock8_6_Branch_0_Conv2d_1x1Z&Block8_6_Branch_0_Conv2d_1x1_BatchNormZ'Block8_6_Branch_0_Conv2d_1x1_ActivationZBlock8_6_Branch_1_Conv2d_0a_1x1Z)Block8_6_Branch_1_Conv2d_0a_1x1_BatchNormZ*Block8_6_Branch_1_Conv2d_0a_1x1_ActivationZBlock8_6_Branch_1_Conv2d_0b_1x3Z)Block8_6_Branch_1_Conv2d_0b_1x3_BatchNormZ*Block8_6_Branch_1_Conv2d_0b_1x3_ActivationZBlock8_6_Branch_1_Conv2d_0c_3x1Z)Block8_6_Branch_1_Conv2d_0c_3x1_BatchNormZ*Block8_6_Branch_1_Conv2d_0c_3x1_ActivationZBlock8_6_ConcatenateZBlock8_6_Conv2d_1x1ZAvgPoolg?r   Z
Bottleneck)r    r!   ZBottleneck_BatchNorm)r#   r$   r   r!   Zinception_resnet_v1)r   r
   r   r   r   r	   r   r   KZ	int_shaper   r   r   r   r   )	dimensionZinputsr   Zbranch_0Zbranch_1Zbranch_2ZbranchesmixedupZbranch_poolmodelr   r   r   InceptionResNetV2/   s`  







$
$
$
$
$
$$$$$$$$$$
&&&&&$r0   Uhttps://github.com/serengil/deepface_models/releases/download/v1.0/facenet_weights.h5c                 C   sT   t  }t }tj|d dkr!td |d }tj| |dd |	|d  |S )Nz%/.deepface/weights/facenet_weights.h5Tz(facenet_weights.h5 will be downloaded...F)quiet)
r0   r   Zget_deepface_homeospathisfileprintgdowndownloadZload_weights)urlr/   homeoutputr   r   r   	loadModelU  s   r<   )r   )r1   )!r3   r7   Z
tensorflowtfZdeepface.commonsr   int__version__splitZ
tf_versionZkeras.modelsr   Zkeras.layersr   r   r	   r
   r   r   r   r   r   r   r   Zkerasr   r+   Ztensorflow.keras.modelsZtensorflow.keras.layersZtensorflow.kerasr   r0   r<   r   r   r   r   <module>   s`    
            3