
    Ng^/                     "   d Z ddlmZ ddlZddlmZ ddlmc 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           dS ))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_5bNc                    t          t          |                                            |p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                    | _
        d S )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/html/ai-engine/env/lib/python3.11/site-packages/timm/models/inception_resnet_v2.pyr    zMixed_5b.__init__   s$   h&&(((.;
!z#rqCCC}JsBAa888Jr21QBBB
 

 }JsBAa888Jr21QBBBJr21QBBB
 
 }L1a5IIIJsBAa888
 
    c                     |                      |          }|                     |          }|                     |          }|                     |          }t	          j        ||||fd          }|S Nr   r!   r$   r%   r'   torchcatr)   xx0x1x2x3outs          r,   forwardzMixed_5b.forward*   ]    \\!__\\!__\\!__\\!__iRR(!,,
r-   N__name__
__module____qualname__r    r:   __classcell__r+   s   @r,   r   r      sL        
 
 
 
 
 
,      r-   r   c                   &     e Zd Zd fd	Zd Z xZS )Block35      ?Nc                    t          t          |                                            || _        |p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                    | _        d S )
N@      r   r   r   r   r   r      )r   rD   r    scaler   r!   r"   r#   r$   r%   Conv2dconv2dReLUactr)   rJ   r*   r+   s      r,   r    zBlock35.__init__4   s   gt%%'''
.;
!z#rqCCC}JsBAa888Jr21QBBB
 

 }JsBAa888Jr21QBBBJr21QBBB
 
 iSaBBB799r-   c                 "   |                      |          }|                     |          }|                     |          }t          j        |||fd          }|                     |          }|| j        z  |z   }|                     |          }|S r/   )r!   r$   r%   r1   r2   rL   rJ   rN   r)   r4   r5   r6   r7   r9   s         r,   r:   zBlock35.forwardI   s|    \\!__\\!__\\!__iRa((kk#DJ"hhsmm
r-   rE   Nr=   rB   s   @r,   rD   rD   3   sL             *      r-   rD   c                   &     e Zd Zd fd	Zd Z xZS )Mixed_6aNc           
      L   t          t          |                                            |pt          } |dddd          | _        t          j         |dddd           |ddddd           |dddd                    | _        t          j        dd	          | _	        d S )
NrG     r   r   r      r   r   r   )
r   rT   r    r   r!   r"   r#   r$   	MaxPool2dr%   r(   s     r,   r    zMixed_6a.__init__U   s    h&&(((.;
!z#s!DDD}JsCQq999JsCQq!DDDJsCQq999
 
 |Aa000r-   c                     |                      |          }|                     |          }|                     |          }t          j        |||fd          }|S r/   )r!   r$   r%   r1   r2   rQ   s         r,   r:   zMixed_6a.forwardc   sK    \\!__\\!__\\!__iRa((
r-   r<   r=   rB   s   @r,   rT   rT   T   sL        1 1 1 1 1 1      r-   rT   c                   &     e Zd Zd fd	Zd Z xZS )Block17rE   Nc                    t          t          |                                            || _        |p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                    | _        d S )N@  r   r   r   rI      )r      )r   r   r   )r`   r   )r   r   rV   )r   r\   r    rJ   r   r!   r"   r#   r$   rK   rL   rM   rN   rO   s      r,   r    zBlock17.__init__l   s    gt%%'''
.;
!z$1EEE}JtSa:::JsCVAvNNNJsCVAvNNN
 
 iTqCCC799r-   c                     |                      |          }|                     |          }t          j        ||fd          }|                     |          }|| j        z  |z   }|                     |          }|S r/   )r!   r$   r1   r2   rL   rJ   rN   r)   r4   r5   r6   r9   s        r,   r:   zBlock17.forward|   sk    \\!__\\!__iR!$$kk#DJ"hhsmm
r-   rR   r=   rB   s   @r,   r\   r\   k   sL                    r-   r\   c                   &     e Zd Zd fd	Zd Z xZS )Mixed_7aNc           
         t          t          |                                            |p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          | _
        d S )Nr^   rW   r   r   rV   r   r   i   r   rG   rX   )r   rd   r    r   r"   r#   r!   r$   r%   rY   r'   r(   s     r,   r    zMixed_7a.__init__   s   h&&(((.;
}JtSa:::JsCQq999
 

 }JtSa:::JsCQq999
 

 }JtSa:::JsCQq!DDDJsCQq999
 
 |Aa000r-   c                     |                      |          }|                     |          }|                     |          }|                     |          }t	          j        ||||fd          }|S r/   r0   r3   s          r,   r:   zMixed_7a.forward   r;   r-   r<   r=   rB   s   @r,   rd   rd      sL        1 1 1 1 1 1,      r-   rd   c                   &     e Zd Zd fd	Zd Z xZS )Block8rE   FNc                    t          t          |                                            || _        |p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 nt          j                    | _        d S )N   r   r   r      )r   r   )r   r   r   rW   )r   r   )r   r   i  )r   rh   r    rJ   r   r!   r"   r#   r$   rK   rL   rM   relu)r)   rJ   no_relur*   r+   s       r,   r    zBlock8.__init__   s    fd$$&&&
.;
!z$1EEE}JtSa:::JsCVAvNNNJsCVAvNNN
 
 iTqCCC#2DD			r-   c                    |                      |          }|                     |          }t          j        ||fd          }|                     |          }|| j        z  |z   }| j        |                     |          }|S r/   )r!   r$   r1   r2   rL   rJ   rl   rb   s        r,   r:   zBlock8.forward   ss    \\!__\\!__iR!$$kk#DJ"9 ))C..C
r-   )rE   FNr=   rB   s   @r,   rh   rh      sL        3 3 3 3 3 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     r           rH   avgbatchnorm2dMbP?rl   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        	fdt-          d          D              | _        | xj        t          ddd          gz  c_        t1          	          | _        t          j        	fdt-          d          D              | _        | xj        t          ddd          gz  c_        t7          	          | _        t          j        	fd t-          d!          D              | _        t=          d	"          | _         	d#| j        dd
          | _         | xj        t          | j        dd$          gz  c_        tC          | j        | j        ||%          \  | _"        | _#        | _$        d S )&Ni   rH   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*   c                 2    g | ]}t          d           S )g(\?rJ   r*   )rD   .0_r*   s     r,   
<listcomp>z.InceptionResnetV2.__init__.<locals>.<listcomp>   s'    %d%d%dUVgDZ&P&P&P%d%d%dr-   
   rG      repeatc                 2    g | ]}t          d           S )g?r   )r\   r   s     r,   r   z.InceptionResnetV2.__init__.<locals>.<listcomp>   s'    'f'f'fWXdz(R(R(R'f'f'fr-      r^      repeat_1c                 2    g | ]}t          d           S )g?r   )rh   r   s     r,   r   z.InceptionResnetV2.__init__.<locals>.<listcomp>   s'    'd'd'dVWTj(Q(Q(Q'd'd'dr-   	   )rm   r*   rj   	conv2d_7b)	pool_type	drop_rate)%r   r   r    num_classesnum_featureshead_hidden_sizer   r   dict	conv2d_1a	conv2d_2ar|   feature_infor"   rY   
maxpool_3a	conv2d_3br   
maxpool_5ar   mixed_5br#   ranger   rT   mixed_6ar   rd   mixed_7arepeat_2rh   block8r   r   global_pool	head_dropclassif)r)   r   in_chansr   output_strider   rx   norm_epsry   r*   r+   s            @r,   r    zInceptionResnetV2.__init__   s    	&&//111&488D1""""!***D)))
 
 

 $HbaJJJ#B!DDD#B!QOOO!"+NNNO,q333#B!DDD#B1EEEd3!KPPPQQ,q333 J777m%d%d%d%dZ_`bZcZc%d%d%ded3!HMMMNN J777'f'f'f'f\abd\e\e'f'f'fgd42jQQQRR J777'd'd'd'd[`ab[c[c'd'd'deTjAAA#D$*;STUUUd4+<S^___``9Jt/;R[:] :] :]6$.$,,,r-   Fc                     d t          t          |                                 d                    D                                 d           fd}|S )Nc                      i | ]\  }\  }}||S  r   )r   ikr   s       r,   
<dictcomp>z3InceptionResnetV2.group_matcher.<locals>.<dictcomp>   s"    iiiyq&1aaiiir-   r   )prefixr   c           	          t           fddD                       rdS t           fddD                       rdS t           fddD                       rt                    dz   S                                 D ]G}|t                               d	          d t          |                             k    r
|         c S Ht          d
          S )Nc                 :    g | ]}                     |          S r   
startswithr   nnames     r,   r   zEInceptionResnetV2.group_matcher.<locals>._matcher.<locals>.<listcomp>   s%    III1DOOA&&IIIr-   )conv2d_1conv2d_2r   c                 :    g | ]}                     |          S r   r   r   s     r,   r   zEInceptionResnetV2.group_matcher.<locals>._matcher.<locals>.<listcomp>  s%    KKKQdooa((KKKr-   )conv2d_3conv2d_4r   c                 :    g | ]}                     |          S r   r   r   s     r,   r   zEInceptionResnetV2.group_matcher.<locals>._matcher.<locals>.<listcomp>  s%    IIIQdooa((IIIr-   )r   conv2d_7.inf)anylenkeystuplesplitfloat)r   r   
module_maps   ` r,   _matcherz1InceptionResnetV2.group_matcher.<locals>._matcher   s    IIII0HIIIJJ 
$qKKKK2JKKKLL $qIIII2HIIIJJ $:**#** - -AE$**S//'3q66'":;;;;)!},,, <U||#r-   )	enumerater
   named_childrenpop)r)   coarser   r   s      @r,   group_matcherzInceptionResnetV2.group_matcher   sj    iiIodFYFYF[F[df6g6g6g,h,hiii
|$$$	$ 	$ 	$ 	$ 	$ r-   Tc                     |r
J d            d S )Nzcheckpointing not supportedr   )r)   enables     r,   set_grad_checkpointingz(InceptionResnetV2.set_grad_checkpointing  s    88888888r-   returnc                     | j         S r<   r   )r)   s    r,   get_classifierz InceptionResnetV2.get_classifier  s
    |r-   r   r   c                 f    || _         t          | j        | j         |          \  | _        | _        d S )N)r   )r   r   r   r   r   )r)   r   r   s      r,   reset_classifierz"InceptionResnetV2.reset_classifier  s3    &):4;LdN^ju)v)v)v&$,,,r-   c                 |   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }| 	                    |          }| 
                    |          }|                     |          }|                     |          }|                     |          }|                     |          }|S r<   )r   r   r|   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NNMM!MM!MM!MM!KKNNNN1r-   
pre_logitsc                     |                      |          }|                     |          }|r|n|                     |          S r<   )r   r   r   )r)   r4   r   s      r,   forward_headzInceptionResnetV2.forward_head*  s?    QNN13qqDLLOO3r-   c                 Z    |                      |          }|                     |          }|S r<   )r   r   r   s     r,   r:   zInceptionResnetV2.forward/  s-    !!!$$a  r-   )rp   r   rq   rH   rr   rs   rt   rl   F)T)rr   )r>   r?   r@   r    r1   jitignorer   r   r"   Moduler   intstrr   r   boolr   r:   rA   rB   s   @r,   r   r      sE        $3] 3] 3] 3] 3] 3]j Y   $ Y9 9 9 9 Y	    w wC wc w w w w  $4 4$ 4 4 4 4
      r-   Fc                 *    t          t          | |fi |S r<   )r	   r   )variant
pretrainedkwargss      r,   _create_inception_resnet_v2r   5  s     17JQQ&QQQr-   ztimm/rp   )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 )Ninception_resnet_v2r   )r   )r   )r   r   s     r,   r   r   N  s    &^^^W]^^^r-   ens_adv_inception_resnet_v2r   r   )$__doc__	functoolsr   r1   torch.nnr"   torch.nn.functional
functionalF	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     s                          E E E E E E E E 6 6 6 6 6 6 6 6 * * * * * * ( ( ( ( ( ( Y Y Y Y Y Y Y Y Y Y
    ry   @    bi   B    ry   .    bi   6    ry   @    RY   :o o o o o	 o o odR R R R %$ =vY'0F&i$ $ =vY'0F&i, ,& &  * _ _7H _ _ _ _  H!#H'     r-   