
    ^jb5                     ,   d Z ddlmZ ddlmZ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j0                        Z G d dej0                        Z G d dej0                        Z G d dej0                        Z G d dej0                        Z G d dej0                        Z G d dej0                        Zd)dZ  edddddde
ed d!d"d#dddddde
ed 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)
    )partial)TypeOptionalN)IMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)create_classifierConvNormAct   )build_model_with_cfg)flatten_modules)register_modelgenerate_default_cfgsregister_model_deprecationsInceptionResnetV2c                   R     e Zd Z	 	 	 ddeeej                        f fdZd Z xZ	S )Mixed_5b
conv_blockc                    ||d}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devicedtyper
   kernel_sizestride      r   r   padding   F)r   r   count_include_pad)   `   )r!   0   r#   @   )r!   r%   )r%   r"   )r"   r"   )
super__init__r	   branch0nn
Sequentialbranch1branch2	AvgPool2dbranch3selfr   r   r   dd	__class__s        j/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/inception_resnet_v2.pyr'   zMixed_5b.__init__   s     /.;
!IqIbI}}>Aa>2>H1QHRH

 }}>Aa>2>H1QHRHH1QHRH
 }}LL1a5I>Aa>2>
    c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  ||||fd      }|S Nr
   r(   r+   r,   r.   torchcatr0   xx0x1x2x3outs          r3   forwardzMixed_5b.forward0   T    \\!_\\!_\\!_\\!_iiRR(!,
r4   NNN
__name__
__module____qualname__r   r   r)   Moduler'   rA   __classcell__r2   s   @r3   r   r      s-     59	
 bii1
8r4   r   c                   X     e Zd Z	 	 	 	 ddedeeej                        f fdZd Z	 xZ
S )Block35scaler   c                    ||d}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 )Nr   r
   r   r   r   )@      rP   rP   )rP   r#   r$   )   rO   )r&   r'   rM   r	   r(   r)   r*   r+   r,   Conv2dconv2dReLUactr0   rM   r   r   r   r1   r2   s         r3   r'   zBlock35.__init__:   s     /
.;
!IqIbI}}>Aa>2>H1QHRH

 }}>Aa>2>H1QHRHH1QHRH
 iiHaHRH779r4   c                    | j                  |      }| j                  |      }| j                  |      }t        j                  |||fd      }| j                  |      }|| j                  z  |z   }| j                  |      }|S r6   )r(   r+   r,   r8   r9   rT   rM   rV   r0   r;   r<   r=   r>   r@   s         r3   rA   zBlock35.forwardV   sr    \\!_\\!_\\!_iiRa(kk#DJJ"hhsm
r4         ?NNNrE   rF   rG   floatr   r   r)   rH   r'   rA   rI   rJ   s   @r3   rL   rL   9   s:     48 !bii18r4   rL   c                   R     e Zd Z	 	 	 ddeeej                        f fdZd Z xZ	S )Mixed_6ar   c           
         ||d}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 )Nr   r   r   r   r
   r   r   )rO     )rO      )rc   rc   rc   rb   )	r&   r'   r	   r(   r)   r*   r+   	MaxPool2dr,   r/   s        r3   r'   zMixed_6a.__init__b   s     /.;
!J!JrJ}}?Qq?B?JQq!JrJ?Qq?B?
 ||Aa0r4   c                     | j                  |      }| j                  |      }| j                  |      }t        j                  |||fd      }|S r6   )r(   r+   r,   r8   r9   rY   s         r3   rA   zMixed_6a.forwardv   sD    \\!_\\!_\\!_iiRa(
r4   rC   rD   rJ   s   @r3   r_   r_   a   s-     59	1 bii11(r4   r_   c                   X     e Zd Z	 	 	 	 ddedeeej                        f fdZd Z	 xZ
S )Block17rM   r   c                 L   ||d}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 )Nr   r
   r   )r
      )r   r   r   )rj   r
   )r   r   )@  r!   )rk   rR   )rR      )rl   r!   )rb   rk   )r&   r'   rM   r	   r(   r)   r*   r+   rS   rT   rU   rV   rW   s         r3   r'   zBlock17.__init__   s     /
.;
!K1KK}}@a@R@TVAvTQSTTVAvTQST
 iiIqIbI779r4   c                     | j                  |      }| j                  |      }t        j                  ||fd      }| j	                  |      }|| j
                  z  |z   }| j                  |      }|S r6   )r(   r+   r8   r9   rT   rM   rV   r0   r;   r<   r=   r@   s        r3   rA   zBlock17.forward   sc    \\!_\\!_iiR!$kk#DJJ"hhsm
r4   rZ   r\   rJ   s   @r3   rh   rh   ~   s:     48 !bii1.r4   rh   c                   R     e Zd Z	 	 	 ddeeej                        f fdZd Z xZ	S )Mixed_7ar   c           
         ||d}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   r
   r   r   r   r   ra   )rk   rc   rd   )rc      )rr   rO   )
r&   r'   r	   r)   r*   r(   r+   r,   re   r.   r/   s        r3   r'   zMixed_7a.__init__   s     /.;
}}@a@R@?Qq?B?

 }}@a@R@?Qq?B?

 }}@a@R@JQq!JrJ?Qq?B?
 ||Aa0r4   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  ||||fd      }|S r6   r7   r:   s          r3   rA   zMixed_7a.forward   rB   r4   rC   rD   rJ   s   @r3   rp   rp      s-     59	1 bii118r4   rp   c            	       ^     e Zd Z	 	 	 	 	 ddededeeej                        f fdZ	d Z
 xZS )Block8rM   no_relur   c                 `   ||d}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 )Nr   r
   r   )r
   r   )r   r
   r   )r   r
   )r
   r   )   r!   )r!      )ry   rc   )i  rx   )r&   r'   rM   r	   r(   r)   r*   r+   rS   rT   rU   relu)r0   rM   rv   r   r   r   r1   r2   s          r3   r'   zBlock8.__init__   s     /
.;
!K1KK}}@a@R@TVAvTQSTTVAvTQST
 iiIqIbI#D		r4   c                     | j                  |      }| j                  |      }t        j                  ||fd      }| j	                  |      }|| j
                  z  |z   }| j                  | j                  |      }|S r6   )r(   r+   r8   r9   rT   rM   rz   rn   s        r3   rA   zBlock8.forward   sm    \\!_\\!_iiR!$kk#DJJ"99 ))C.C
r4   )r[   FNNN)rE   rF   rG   r]   boolr   r   r)   rH   r'   rA   rI   rJ   s   @r3   ru   ru      sG     !4833 3 !bii1	30r4   ru   c                   L    e Zd Z	 	 	 	 	 	 	 	 	 	 ddededededededed	ed
df 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   Nnum_classesin_chans	drop_rateoutput_strideglobal_pool
norm_layernorm_eps	act_layerreturnc                    t         |           |	|
d}|| _        || _        dx| _        | _        |dk(  sJ t        t        d||t        |      t        d            } ||df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'        d+d|i|| _        t        j*                  t-        d      D cg c]  }t/        d+d|d| c} | _        | xj                  t        ddd      gz  c_        t3        d+d|i|| _        t        j*                  t-        d      D cg c]  }t7        d+d|d| c} | _        | xj                  t        ddd       gz  c_        t;        d+d|i|| _        t        j*                  t-        d!      D cg c]  }t?        d+d"|d| c} | _         t?        d+d|d#|| _!         |d$| j                  fddd|| _"        | xj                  t        | j                  dd%      gz  c_        tG        | j                  | j                  f||d&|\  | _$        | _%        | _&        y c c}w c c}w c c}w ),Nr   i   rP   r   )epsT)inplace)r   r   r   norm_kwargs
act_kwargsr   r   r   r
   r%   r   	conv2d_2b)num_chs	reductionmodulera   r!      	conv2d_4ar   
   g(\?)rM   r   rO      repeat   g?rk      repeat_1	   g?)rv   r   rx   	conv2d_7b)	pool_typer   rQ   )rP   r%   )r%   P   )r   r!    )'r&   r'   r~   r   num_featureshead_hidden_sizer   r	   dict	conv2d_1a	conv2d_2ar   feature_infor)   re   
maxpool_3a	conv2d_3br   
maxpool_5ar   mixed_5br*   rangerL   r   r_   mixed_6arh   r   rp   mixed_7aru   repeat_2block8r   r   r   	head_dropclassif)r0   r~   r   r   r   r   r   r   r   r   r   r1   r   _r2   s                 r3   r'   zInceptionResnetV2.__init__   s    	/& 488D1"""!*D)

 $HbPaPRP#J!JrJ#U!QURTU!"+NO,,q3#J!JrJ#K1KKd3!KPQQ,,q3 =J="=mm`efh`i%j[\g&VDZ&VSU&V%jkd3!HMNN =J="=bghjbk'l]^(Xdz(XUW(X'lmd42jQRR =J="=afghai'j\](WTj(WTV(W'jkGTjGBG#D$*;*;[ST[XZ[d4+<+<S^_``9J:
 "	:

 :
6$.$, &k (m (ks   K>K",K'c                     t        t        | j                         d            D ci c]  \  }\  }}|| c}}}j                  d       fd}|S c c}}}w )Nr   )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splitr]   )namenk
module_maps      r3   _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)r0   coarseir   r   r   r   s         @r3   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   )r0   enables     r3   set_grad_checkpointingz(InceptionResnetV2.set_grad_checkpointing=  s    888z6r4   c                     | j                   S Nr   )r0   s    r3   get_classifierz InceptionResnetV2.get_classifierA  s    ||r4   c                 p    || _         t        | j                  | j                   |      \  | _        | _        y )N)r   )r~   r   r   r   r   )r0   r~   r   s      r3   reset_classifierz"InceptionResnetV2.reset_classifierE  s/    &):4;L;LdN^N^ju)v&$,r4   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }|S r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   r;   s     r3   forward_featuresz"InceptionResnetV2.forward_featuresI  s    NN1NN1NN1OOANN1NN1OOAMM!KKNMM!MM!MM!MM!KKNNN1r4   
pre_logitsc                 p    | j                  |      }| j                  |      }|r|S | j                  |      S r   )r   r   r   )r0   r;   r   s      r3   forward_headzInceptionResnetV2.forward_head[  s5    QNN1q3DLLO3r4   c                 J    | j                  |      }| j                  |      }|S r   )r   r   r   s     r3   rA   zInceptionResnetV2.forward`  s'    !!!$a r4   )
  r   g        rP   avgbatchnorm2dgMbP?rz   NNF)T)r   )rE   rF   rG   intr]   strr'   r8   jitignorer   r   r)   rH   r   r   r   r|   r   rA   rI   rJ   s   @r3   r   r      s     $!!#$+"#<
<
 <
 	<

 <
 <
 <
 <
 <
 
<
| YY $ YY9 9 YY		  wC wc w$4$ 4
r4   c                 &    t        t        | |fi |S r   )r   r   )variant
pretrainedkwargss      r3   _create_inception_resnet_v2r   f  s     17JQ&QQr4   ztimm/r   )r   +  r   )r   r   gQ?bicubiczconv2d_1a.convr   z
apache-2.0)	hf_hub_idr~   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicense)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     r3   r   r     s    &^^W]^^r4   ens_adv_inception_resnet_v2r   r   )$__doc__	functoolsr   typingr   r   r8   torch.nnr)   	timm.datar   r   timm.layersr   r	   _builderr   _manipulater   	_registryr   r   r   __all__rH   r   rL   r_   rh   rp   ru   r   r   default_cfgsr   rE   r   r4   r3   <module>r     s?    !   E 6 * ( Y Y
#ryy #L%bii %Pryy :bii D#ryy #L"RYY "Jx		 xvR % =vY'0F&i$ =vY'0F&i,& . _7H _ _ H!#H' r4   