
    kh>/                        d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ dd	lmZmZmZ d
gZ G d dej*                        Z G d dej*                        Z G d dej*                        Z G d dej*                        Z G d dej*                        Z G d dej*                        Z G d d
ej*                        Zd'dZ eddddddeedd d!
ddddddeedd d!
d"      Zed'd#efd$       Z ee d%d&i       y)(z Pytorch Inception-Resnet-V2 implementation
Sourced from https://github.com/Cadene/tensorflow-model-zoo.torch (MIT License) which is
based upon Google's Tensorflow implementation and pretrained weights (Apache 2.0 License)
    )partialN)IMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)create_classifierConvNormAct   )build_model_with_cfg)flatten_modules)register_modelgenerate_default_cfgsregister_model_deprecationsInceptionResnetV2c                   &     e Zd Zd fd	Zd Z xZS )Mixed_5bc                    t         t        |           |xs t        } |dddd      | _        t        j                   |dddd       |ddddd	            | _        t        j                   |dddd       |ddd
dd	       |ddd
dd	            | _        t        j                  t        j                  d
ddd       |dddd            | _
        y )N   `   r   kernel_sizestride0   @         r   r   padding   F)r   r   count_include_pad)superr   __init__r   branch0nn
Sequentialbranch1branch2	AvgPool2dbranch3self
conv_block	__class__s     [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/inception_resnet_v2.pyr    zMixed_5b.__init__   s    h&(.;
!#rqC}}sBAa8r21QB

 }}sBAa8r21QBr21QB
 }}LL1a5IsBAa8
    c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  ||||fd      }|S Nr   r!   r$   r%   r'   torchcatr)   xx0x1x2x3outs          r,   forwardzMixed_5b.forward)   T    \\!_\\!_\\!_\\!_iiRR(!,
r-   N__name__
__module____qualname__r    r:   __classcell__r+   s   @r,   r   r      s    
,r-   r   c                   &     e Zd Zd fd	Zd Z xZS )Block35c                    t         t        |           || _        |xs t        } |dddd      | _        t        j                   |dddd       |ddddd            | _        t        j                   |dddd       |ddddd       |ddddd            | _	        t        j                  d	ddd      | _        t        j                         | _        y )
N@      r   r   r   r   r   r      )r   rD   r    scaler   r!   r"   r#   r$   r%   Conv2dconv2dReLUactr)   rI   r*   r+   s      r,   r    zBlock35.__init__3   s    gt%'
.;
!#rqC}}sBAa8r21QB

 }}sBAa8r21QBr21QB
 iiSaB779r-   c                    | j                  |      }| j                  |      }| j                  |      }t        j                  |||fd      }| j                  |      }|| j                  z  |z   }| j                  |      }|S r/   )r!   r$   r%   r1   r2   rK   rI   rM   r)   r4   r5   r6   r7   r9   s         r,   r:   zBlock35.forwardH   sr    \\!_\\!_\\!_iiRa(kk#DJJ"hhsm
r-         ?Nr=   rB   s   @r,   rD   rD   2   s    *r-   rD   c                   &     e Zd Zd fd	Zd Z xZS )Mixed_6ac           
         t         t        |           |xs t        } |dddd      | _        t        j                   |dddd       |ddddd       |dddd            | _        t        j                  dd	      | _	        y )
NrF     r   r   r      r   r   r   )
r   rT   r    r   r!   r"   r#   r$   	MaxPool2dr%   r(   s     r,   r    zMixed_6a.__init__T   s|    h&(.;
!#s!D}}sCQq9sCQq!DsCQq9
 ||Aa0r-   c                     | j                  |      }| j                  |      }| j                  |      }t        j                  |||fd      }|S r/   )r!   r$   r%   r1   r2   rP   s         r,   r:   zMixed_6a.forwardb   sD    \\!_\\!_\\!_iiRa(
r-   r<   r=   rB   s   @r,   rT   rT   S   s    1r-   rT   c                   &     e Zd Zd fd	Zd Z xZS )Block17c                 T   t         t        |           || _        |xs t        } |dddd      | _        t        j                   |dddd       |ddddd	       |ddd
dd	            | _        t        j                  dddd      | _
        t        j                         | _        y )N@  r   r   r   rH      )r      )r   r   r   )r`   r   )r   r   rV   )r   r\   r    rI   r   r!   r"   r#   r$   rJ   rK   rL   rM   rN   s      r,   r    zBlock17.__init__k   s    gt%'
.;
!$1E}}tSa:sCVAvNsCVAvN
 iiTqC779r-   c                     | j                  |      }| j                  |      }t        j                  ||fd      }| j	                  |      }|| j
                  z  |z   }| j                  |      }|S r/   )r!   r$   r1   r2   rK   rI   rM   r)   r4   r5   r6   r9   s        r,   r:   zBlock17.forward{   sc    \\!_\\!_iiR!$kk#DJJ"hhsm
r-   rQ   r=   rB   s   @r,   r\   r\   j   s     r-   r\   c                   &     e Zd Zd fd	Zd Z xZS )Mixed_7ac           
         t         t        |           |xs t        }t	        j
                   |dddd       |dddd            | _        t	        j
                   |dddd       |dddd            | _        t	        j
                   |dddd       |ddddd	       |dd
dd            | _        t	        j                  dd      | _
        y )Nr^   rW   r   r   rV   r   r   i   r   rF   rX   )r   rd   r    r   r"   r#   r!   r$   r%   rY   r'   r(   s     r,   r    zMixed_7a.__init__   s    h&(.;
}}tSa:sCQq9

 }}tSa:sCQq9

 }}tSa:sCQq!DsCQq9
 ||Aa0r-   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  ||||fd      }|S r/   r0   r3   s          r,   r:   zMixed_7a.forward   r;   r-   r<   r=   rB   s   @r,   rd   rd      s    1,r-   rd   c                   &     e Zd Zd fd	Zd Z xZS )Block8c                 h   t         t        |           || _        |xs t        } |dddd      | _        t        j                   |dddd       |ddddd       |dd	d
dd            | _        t        j                  dddd      | _
        |rd | _        y t        j                         | _        y )N   r   r   r      )r   r   )r   r   r   rW   )r   r   )r   r   i  )r   rh   r    rI   r   r!   r"   r#   r$   rJ   rK   rL   relu)r)   rI   no_relur*   r+   s       r,   r    zBlock8.__init__   s    fd$&
.;
!$1E}}tSa:sCVAvNsCVAvN
 iiTqC#D		r-   c                     | j                  |      }| j                  |      }t        j                  ||fd      }| j	                  |      }|| j
                  z  |z   }| j                  | j                  |      }|S r/   )r!   r$   r1   r2   rK   rI   rl   rb   s        r,   r:   zBlock8.forward   sm    \\!_\\!_iiR!$kk#DJJ"99 ))C.C
r-   )rR   FNr=   rB   s   @r,   rh   rh      s    3 r-   rh   c                   "    e Zd Z	 	 	 	 	 	 	 	 d fd	Zej
                  j                  dd       Zej
                  j                  dd       Zej
                  j                  de	j                  fd       ZddedefdZd	 Zdd
efdZd Z xZS )r   c	           
         t         t        |           || _        dx| _        | _        |dk(  sJ t        t        d||t        |      t        d            }	 |	|ddd	
      | _	         |	dddd
      | _
         |	ddddd      | _        t        dd	d      g| _        t        j                  dd	      | _         |	dddd
      | _         |	dddd
      | _        | xj                  t        ddd      gz  c_        t        j                  dd	      | _        t'        |	      | _        t        j*                  t-        d      D 
cg c]  }
t/        d|	       c}
 | _        | xj                  t        ddd      gz  c_        t3        |	      | _        t        j*                  t-        d      D 
cg c]  }
t7        d|	       c}
 | _        | xj                  t        ddd       gz  c_        t;        |	      | _        t        j*                  t-        d!      D 
cg c]  }
t?        d"|	       c}
 | _         t?        d|	#      | _!         |	d$| j                  dd
      | _"        | xj                  t        | j                  dd%      gz  c_        tG        | j                  | j                  ||&      \  | _$        | _%        | _&        y c c}
w c c}
w c c}
w )'Ni   rG   r   )epsT)inplace)r   
norm_layer	act_layernorm_kwargs
act_kwargsr   r   r   r   r   r   	conv2d_2b)num_chs	reductionmodulerX   P   r      	conv2d_4a)r*   
   g(\?)rI   r*   rF      repeat   g?r^      repeat_1	   g?)rm   r*   rj   	conv2d_7b)	pool_type	drop_rate)'r   r   r    num_classesnum_featureshead_hidden_sizer   r   dict	conv2d_1a	conv2d_2arw   feature_infor"   rY   
maxpool_3a	conv2d_3br}   
maxpool_5ar   mixed_5br#   rangerD   r   rT   mixed_6ar\   r   rd   mixed_7arh   repeat_2block8r   r   global_pool	head_dropclassif)r)   r   in_chansr   output_strider   rs   norm_epsrt   r*   _r+   s              r,   r    zInceptionResnetV2.__init__   sz    	/1&488D1"""!*D)

 $HbaJ#B!D#B!QO!"+NO,,q3#B!D#B1Ed3!KPQQ,,q3 J7mmZ_`bZc%dUVgDZ&P%ded3!HMNN J7\abd\e'fWXdz(R'fgd42jQRR J7[`ab[c'dVWTj(Q'deTjA#D$*;*;STUd4+<+<S^_``9Jt//;R[:]6$.$, &e (g (es   
K6K"Kc                     t        t        | j                         d            D ci c]  \  }\  }}|| c}}}j                  d       fd}|S c c}}}w )N )prefixr   c           	         t        dD cg c]  }| j                  |       c}      ryt        dD cg c]  }| j                  |       c}      ryt        dD cg c]  }| j                  |       c}      rt              dz   S j                         D ]2  }|t	        | j                  d      d t        |             k(  s-|   c S  t        d      S c c}w c c}w c c}w )N)conv2d_1conv2d_2r   )conv2d_3conv2d_4r   )r   conv2d_7.inf)any
startswithlenkeystuplesplitfloat)namenk
module_maps      r,   _matcherz1InceptionResnetV2.group_matcher.<locals>._matcher   s    0HI1DOOA&IJ2JKQdooa(KL2HIQdooa(IJ:**#* -AE$**S/'3q6":;;)!},- U|# JKIs   CCC$)	enumerater
   named_childrenpop)r)   coarseir   r   r   r   s         @r,   group_matcherzInceptionResnetV2.group_matcher   sV    ,5odFYFYF[df6g,hiiyq&1aadi
|$	$  js   Ac                     |rJ d       y )Nzcheckpointing not supportedr   )r)   enables     r,   set_grad_checkpointingz(InceptionResnetV2.set_grad_checkpointing  s    888z6r-   returnc                     | j                   S r<   r   )r)   s    r,   get_classifierz InceptionResnetV2.get_classifier  s    ||r-   r   r   c                 p    || _         t        | j                  | j                   |      \  | _        | _        y )N)r   )r   r   r   r   r   )r)   r   r   s      r,   reset_classifierz"InceptionResnetV2.reset_classifier  s/    &):4;L;LdN^N^ju)v&$,r-   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }|S r<   )r   r   rw   r   r   r}   r   r   r   r   r   r   r   r   r   r)   r4   s     r,   forward_featuresz"InceptionResnetV2.forward_features  s    NN1NN1NN1OOANN1NN1OOAMM!KKNMM!MM!MM!MM!KKNNN1r-   
pre_logitsc                 p    | j                  |      }| j                  |      }|r|S | j                  |      S r<   )r   r   r   )r)   r4   r   s      r,   forward_headzInceptionResnetV2.forward_head)  s5    QNN1q3DLLO3r-   c                 J    | j                  |      }| j                  |      }|S r<   )r   r   r   s     r,   r:   zInceptionResnetV2.forward.  s'    !!!$a r-   )  r   g        rG   avgbatchnorm2dgMbP?rl   F)T)r   )r>   r?   r@   r    r1   jitignorer   r   r"   Moduler   intstrr   r   boolr   r:   rA   rB   s   @r,   r   r      s     $3]j YY $ YY9 9 YY		  wC wc w$4$ 4
r-   c                 &    t        t        | |fi |S r<   )r	   r   )variant
pretrainedkwargss      r,   _create_inception_resnet_v2r   4  s     17JQ&QQr-   ztimm/r   )r   +  r   )r   r   gQ?bicubiczconv2d_1a.convr   )
	hf_hub_idr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifier)zinception_resnet_v2.tf_in1k#inception_resnet_v2.tf_ens_adv_in1kr   c                     t        dd| i|S )Nr   )inception_resnet_v2)r   )r   r   s     r,   r   r   M  s    &^^W]^^r-   ens_adv_inception_resnet_v2r   r   )!__doc__	functoolsr   r1   torch.nnr"   	timm.datar   r   timm.layersr   r   _builderr	   _manipulater
   	_registryr   r   r   __all__r   r   rD   rT   r\   rd   rh   r   r   default_cfgsr   r>   r   r-   r,   <module>r      s4      E 6 * ( Y Y
ryy @bii Bryy .bii 6ryy @RYY :o		 odR % =vY'0F&i$ =vY'0F&i,& * _7H _ _ H!#H' r-   