
    RЦiI                     Z   S r SSKJr  SSKJrJrJrJrJr  SSK	r	SSK
Jr  SSKJrJr  SSKJrJrJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJrJr  S/r " S S\R@                  5      r! " S S\R@                  5      r" " S S\R@                  5      r# " S S\R@                  5      r$ " S S\R@                  5      r% " S S\R@                  5      r&S'S jr'\" \'" SS9\'" SS9\'" SS9\'" SSS9\'" SSSSS 9S!.5      r(S(S" jr)\S(S# j5       r*\S(S$ j5       r+\S(S% j5       r,\S(S& j5       r-g))z
InceptionNeXt paper: https://arxiv.org/abs/2303.16900
Original implementation & weights from: https://github.com/sail-sg/inceptionnext
    )partial)ListOptionalTupleUnionTypeNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)trunc_normal_DropPathcalculate_drop_path_rates	to_2tupleget_paddingSelectAdaptivePool2d   )build_model_with_cfg)feature_take_indices)checkpoint_seq)register_modelgenerate_default_cfgsMetaNeXtc                   Z   ^  \ rS rSrSr      SS\S\S\S\S\4
U 4S jjjrS	 rS
r	U =r
$ )InceptionDWConv2d   z$Inception depthwise convolution
    in_chssquare_kernel_sizeband_kernel_sizebranch_ratiodilationc                 d  > XgS.n[         TU ]  5         [        X-  5      n	[        X%S9n
[        X5S9n[        R
                  " XU4XU	S.UD6U l        [        R
                  " XSU44SU4SU4U	S.UD6U l        [        R
                  " XUS44US4US4U	S.UD6U l        USU	-  -
  XU	4U l	        g )Ndevicedtype)r    )paddingr    groupsr   r      )
super__init__intr   nnConv2d	dwconv_hwdwconv_wdwconv_hsplit_indexes)selfr   r   r   r   r    r#   r$   ddgcsquare_paddingband_padding	__class__s               Y/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/inception_next.pyr)   InceptionDWConv2d.__init__   s     /&'$%7K"#3G&H"bHDFH 		Q()P%HbPLNP 		%q)P!1%1bPLNP %q2vorr:    c                     [         R                  " XR                  SS9u  p#pE[         R                  " UU R	                  U5      U R                  U5      U R                  U5      4SS9$ )Nr   )dim)torchsplitr0   catr-   r.   r/   )r1   xx_idx_hwx_wx_hs         r7   forwardInceptionDWConv2d.forward4   s_    ${{1.@.@aHCyyNN4 MM#MM#	
 
 	
r9   )r/   r-   r.   r0   )r'      g      ?r   NN)__name__
__module____qualname____firstlineno____doc__r*   floatr)   rD   __static_attributes____classcell__r6   s   @r7   r   r      s`     '($&"';; !$; "	;
  ; ; ;4
 
r9   r   c                      ^  \ rS rSrSrSS\R                  SSSSS4S\S\\   S\\   S	\	\R                     S
\\	\R                        S\S\4U 4S jjjrS rSrU =r$ )ConvMlp?   zMLP using 1x1 convs that keeps spatial dims
copied from timm: https://github.com/huggingface/pytorch-image-models/blob/v0.6.11/timm/models/layers/mlp.py
NT        in_featureshidden_featuresout_features	act_layer
norm_layerbiasdropc
                   > XS.n
[         TU ]  5         U=(       d    UnU=(       d    Un[        U5      n[        R                  " X4SUS   S.U
D6U l        U(       a	  U" U40 U
D6O[        R                  " 5       U l        U" 5       U l        [        R                  " U5      U l
        [        R                  " X#4SUS   S.U
D6U l        g )Nr"   r   r   )kernel_sizerY   )r(   r)   r   r+   r,   fc1IdentitynormactDropoutrZ   fc2)r1   rT   rU   rV   rW   rX   rY   rZ   r#   r$   r2   r6   s              r7   r)   ConvMlp.__init__D   s     /#2{)8[99[]qtTUw]Z\]9CJ5"5	;JJt$	99_^PTUVPW^[]^r9   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU$ N)r]   r_   r`   rZ   rb   r1   r?   s     r7   rD   ConvMlp.forward\   sH    HHQKIIaLHHQKIIaLHHQKr9   )r`   rZ   r]   rb   r_   )rG   rH   rI   rJ   rK   r+   ReLUr*   r   r   ModuleboolrL   r)   rD   rM   rN   rO   s   @r7   rQ   rQ   ?   s     .2*.)+48__ &c]_ #3-	_
 BII_ !bii1_ _ _ _0 r9   rQ   c                      ^  \ rS rSrSrSSS\R                  \" \R                  SS9SS	S
S
4	S\	S\	S\
S\S\\R                     S\\R                     S\S\4U 4S jjjrSS\	S\\
   4S jjrSS\4S jjrSrU =r$ )MlpClassifierHeade   zMLP classification head
      avgr'   ư>)epsrS   TNrT   num_classes	pool_type	mlp_ratiorW   rX   rZ   rY   c                   > XS.n[         TU ]  5         SU l        Xl        [	        XA-  5      =U l        nU(       d   S5       e[        USS9U l        [        R                  " XR                  R                  5       -  U4SU0UD6U l        U" 5       U l        U" U40 UD6U l        [        R                  " X4SU0UD6U l        [        R                  " U5      U l        g )Nr"   FCannot disable poolingTrs   flattenrY   )r(   r)   use_convrT   r*   num_featuresr   global_poolr+   Linear	feat_multr]   r`   r_   rb   ra   rZ   )r1   rT   rr   rs   rt   rW   rX   rZ   rY   r#   r$   r2   rU   r6   s                r7   r)   MlpClassifierHead.__init__i   s     /&.1)2I.JJO222y/)TR99[+;+;+E+E+GGj_cjgij;5"5	99_KKKJJt$	r9   c                     Ub  U(       d   S5       e[        USS9U l        US:  a'  [        R                  " U R                  U5      U l        g [        R
                  " 5       U l        g )Nrv   Trw   r   )r   r{   r+   r|   rz   r^   rb   )r1   rr   rs   s      r7   resetMlpClassifierHead.reset   sT     66693iQUVD@Ka299T..<UWU`U`Ubr9   
pre_logitsc                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU(       a  U$ U R                  U5      $ re   )r{   r]   r`   r_   rZ   rb   r1   r?   r   s      r7   rD   MlpClassifierHead.forward   s[    QHHQKHHQKIIaLIIaLq/DHHQK/r9   )	r`   rZ   r]   rb   r{   rT   r_   rz   ry   re   F)rG   rH   rI   rJ   rK   r+   GELUr   	LayerNormr*   strrL   r   ri   rj   r)   r   r   rD   rM   rN   rO   s   @r7   rl   rl   e   s      $" )+*1",,D*I%% % 	%
 % BII% RYY% % % %8c c# c0T 0 0r9   rl   c                     ^  \ rS rSrSrS\\R                  \S\R                  SSSS4
S\
S	\
S
\\R                     S\\R                     S\\R                     S\S\\R                     S\S\4U 4S jjjrS rSrU =r$ )MetaNeXtBlock   zMetaNeXtBlock Block
Args:
    dim (int): Number of input channels.
    drop_path (float): Stochastic depth rate. Default: 0.0
    ls_init_value (float): Init value for Layer Scale. Default: 1e-6.
r      rp   rS   Nr;   r    token_mixerrX   	mlp_layerrt   rW   ls_init_value	drop_pathc                 x  > XS.n[         TU ]  5         U" U4SU0UD6U l        U" U40 UD6U l        U" U[	        Xa-  5      4SU0UD6U l        U(       a.  [        R                  " U[        R                  " U40 UD6-  5      OS U l
        U	S:  a  [        U	5      U l        g [        R                  " 5       U l        g )Nr"   r    rW   rS   )r(   r)   r   r_   r*   mlpr+   	Parameterr<   onesgammar   r^   r   )r1   r;   r    r   rX   r   rt   rW   r   r   r#   r$   r2   r6   s                r7   r)   MetaNeXtBlock.__init__   s     /&sDXDDs)b)	S#io"6R)RrRLYR\\-%**S2GB2G"GH_c
09B),BKKMr9   c                    UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  b-  UR	                  U R                  R                  SSSS5      5      nU R                  U5      U-   nU$ )Nr   )r   r_   r   r   mulreshaper   )r1   r?   shortcuts      r7   rD   MetaNeXtBlock.forward   sv    QIIaLHHQK::!djj((B156ANN1(r9   )r   r   r   r_   r   )rG   rH   rI   rJ   rK   r   r+   BatchNorm2drQ   r   r*   r   ri   rL   r)   rD   rM   rN   rO   s   @r7   r   r      s     +<*,..)0 )+#'!RR R bii	R
 RYYR BIIR R BIIR !R R R, r9   r   c                      ^  \ rS rSrSSSSS\\R                  SSSS4S\S\S	\S
\S\\\4   S\	\
\      S\S\\R                     S\\R                     S\	\\R                        S\4U 4S jjjrS rSrU =r$ )MetaNeXtStage      )r   r   N      ?r   r   out_chsstridedepthr    drop_path_ratesr   r   rW   rX   rt   c                   > XS.n[         TU ]  5         SU l        US:  d  US   US   :w  aA  [        R                  " U
" U40 UD6[        R
                  " UU4SUUS   S.UD65      U l        O[        R                  " 5       U l        U=(       d    S/U-  n/ n[        U5       H,  nUR                  [        S	UUS   UU   UUU	U
US.UD65        M.     [        R                  " U6 U l        g )
Nr"   Fr   r   r   )r\   r   r    rS   )r;   r    r   r   r   rW   rX   rt    )r(   r)   grad_checkpointingr+   
Sequentialr,   
downsampler^   rangeappendr   blocks)r1   r   r   r   r   r    r   r   r   rW   rX   rt   r#   r$   r2   stage_blocksir6   s                    r7   r)   MetaNeXtStage.__init__   s     /"'A:!3 mm6(R(		 !"!%a[ 
DO !kkmDO)9bTE\uA 
!!!)!,+'#%#
! 
! 
  mm\2r9   c                     U R                  U5      nU R                  (       a;  [        R                  R	                  5       (       d  [        U R                  U5      nU$ U R                  U5      nU$ re   )r   r   r<   jitis_scriptingr   r   rf   s     r7   rD   MetaNeXtStage.forward   sV    OOA""599+A+A+C+Ct{{A.A  AAr9   )r   r   r   )rG   rH   rI   rJ   r   r+   r   r*   r   r   r   rL   r   ri   r)   rD   rM   rN   rO   s   @r7   r   r      s    
 (.59#&+<)+48 0303 03 	03
 03 CHo03 &d5k203 !03 bii03 BII03 !bii103 03 03d r9   r   c                   |  ^  \ rS rSrSrSSSSSS\\R                  \R                  S	S
S
SSS4S\	S\	S\
S\	S\\	S4   S\\	S4   S\\\R                     \\\R                        4   S\\R                     S\\R                     S\\	\\	S4   4   S\S\S\4U 4S jjjrS r\R(                  R*                  S2S j5       r\R(                  R*                  S\R                  4S j5       rS3S\	S\\
   4S  jjr\R(                  R*                  S4S! j5       r\R(                  R*                  S" 5       r     S5S#\R8                  S$\\\	\\	   4      S%\S&\S'\
S(\S\\\R8                     \\R8                  \\R8                     4   4   4S) jjr   S6S$\\	\\	   4   S*\S+\4S, jjrS- r S2S.\4S/ jjr!S0 r"S1r#U =r$$ )7r      aX  MetaNeXt
    A PyTorch impl of : `InceptionNeXt: When Inception Meets ConvNeXt` - https://arxiv.org/abs/2303.16900

Args:
    in_chans (int): Number of input image channels. Default: 3
    num_classes (int): Number of classes for classification head. Default: 1000
    depths (tuple(int)): Number of blocks at each stage. Default: (3, 3, 9, 3)
    dims (tuple(int)): Feature dimension at each stage. Default: (96, 192, 384, 768)
    token_mixers: Token mixer function. Default: nn.Identity
    norm_layer: Normalization layer. Default: nn.BatchNorm2d
    act_layer: Activation function for MLP. Default: nn.GELU
    mlp_ratios (int or tuple(int)): MLP ratios. Default: (4, 4, 4, 3)
    drop_rate (float): Head dropout rate
    drop_path_rate (float): Stochastic depth rate. Default: 0.
    ls_init_value (float): Init value for Layer Scale. Default: 1e-6.
r'   rn   ro       r'   r'   	   r'   `        i   )r   r   r   r'   rS   rp   Nin_chansrr   r{   output_stridedepths.dimstoken_mixersrX   rW   
mlp_ratios	drop_ratedrop_path_rater   c                   > [         TU ]  5         XS.n[        U5      n[        U[        [
        45      (       d  U/U-  n[        U
[        [
        45      (       d  U
/U-  n
X l        Xl        X0l        Xl	        / U l
        [        R                  " [        R                  " XS   4SSS.UD6U" US   40 UD65      U l        [        XSS9nUS   nSnSn[        R                  " 5       U l        [#        U5       H  nUS:X  d  US:  a  SOSnUU:  a  US:  a  UU-  nSnUU-  nUS	;   a  SOSnUU   nU R                   R%                  ['        UU4US:  a  UOSUU4UU   UU   UU	UU   UU
U   S
.	UD65        UnU =R                  [)        UUSU 3S9/-  sl
        M     UU l        [-        U R*                  U4U R                  US.UD6U l        U R.                  R*                  U l        U R3                  U R4                  5        g )Nr"   r   r   )r\   r   T)	stagewiser   r   )r   r   )	r   r    r   r   r   rW   r   rX   rt   zstages.)num_chs	reductionmodule)rs   rZ   )r(   r)   len
isinstancelisttuplerr   r   r{   r   feature_infor+   r   r,   stemr   stagesr   r   r   dictrz   rl   headhead_hidden_sizeapply_init_weights)r1   r   rr   r{   r   r   r   r   rX   rW   r   r   r   r   r#   r$   r2   	num_stagedp_ratesprev_chscurr_strider    r   r   first_dilationr   r6   s                             r7   r)   MetaNeXt.__init__  s2   $ 	/K	,u66(>I5L*tUm44$	1J& &"MMIIhQGQqGBGtAw%"%
	
 -^tT7mmoy!A%*a!eQFm+
F"6!K"*f"4Q!N1gGKK}  "#QvA((3Qi (+#(O%$Q-     H$x;Y`ab`cWd"e!ff/ "0 %%d&7&7wPTP`P`gpwtvw	 $		 6 6

4%%&r9   c                     [        U[        R                  [        R                  45      (       aM  [	        UR
                  SS9  UR                  b+  [        R                  R                  UR                  S5        g g g )Ng{Gz?)stdr   )	r   r+   r,   r|   r   weightrY   init	constant_)r1   ms     r7   r   MetaNeXt._init_weightsS  sV    a"))RYY/00!((,vv!!!!&&!, " 1r9   c                 0    [        SU(       a  SS9$ SS/S9$ )Nz^stemz^stages\.(\d+))z^stages\.(\d+)\.downsample)r   )z^stages\.(\d+)\.blocks\.(\d+)N)r   r   )r   )r1   coarses     r7   group_matcherMetaNeXt.group_matcherY  s/    (.$
 	
 685
 	
r9   returnc                 .    U R                   R                  $ re   )r   rb   r1   s    r7   get_classifierMetaNeXt.get_classifierc  s    yy}}r9   c                 F    Xl         U R                  R                  X5        g re   )rr   r   r   )r1   rr   r{   s      r7   reset_classifierMetaNeXt.reset_classifierg  s    &		1r9   c                 6    U R                    H	  nXl        M     g re   )r   r   )r1   enabless      r7   set_grad_checkpointingMetaNeXt.set_grad_checkpointingk  s    A#)  r9   c                     [        5       $ re   )setr   s    r7   no_weight_decayMetaNeXt.no_weight_decayp  s	    ur9   r?   indicesr_   
stop_early
output_fmtintermediates_onlyc                    US;   d   S5       e/ n[        [        U R                  5      U5      u  pU R                  U5      n[        R
                  R                  5       (       d  U(       d  U R                  n
OU R                  SU	S-    n
[        U
5       H%  u  pU" U5      nX;   d  M  UR                  U5        M'     U(       a  U$ X4$ )a  Forward features that returns intermediates.

Args:
    x: Input image tensor
    indices: Take last n blocks if int, all if None, select matching indices if sequence
    norm: Apply norm layer to compatible intermediates
    stop_early: Stop iterating over blocks when last desired intermediate hit
    output_fmt: Shape of intermediate feature outputs
    intermediates_only: Only return intermediate features
Returns:

)NCHWzOutput shape must be NCHW.Nr   )	r   r   r   r   r<   r   r   	enumerater   )r1   r?   r   r_   r   r   r   intermediatestake_indices	max_indexr   feat_idxstages                r7   forward_intermediatesMetaNeXt.forward_intermediatest  s    * Y&D(DD&"6s4;;7G"Q IIaL99!!##:[[F[[)a-0F(0OHaA'$$Q'  1
   r9   
prune_norm
prune_headc                     [        [        U R                  5      U5      u  pEU R                  SUS-    U l        U(       a  U R                  SS5        U$ )z?Prune layers not required for specified intermediates.
        Nr   r   ro   )r   r   r   r   )r1   r   r	  r
  r  r  s         r7   prune_intermediate_layers"MetaNeXt.prune_intermediate_layers  sK     #7s4;;7G"Qkk.9q=1!!!U+r9   c                 J    U R                  U5      nU R                  U5      nU$ re   )r   r   rf   s     r7   forward_featuresMetaNeXt.forward_features  s!    IIaLKKNr9   r   c                 P    U(       a  U R                  XS9$ U R                  U5      $ )N)r   )r   r   s      r7   forward_headMetaNeXt.forward_head  s#    6@tyyy2RdiiPQlRr9   c                 J    U R                  U5      nU R                  U5      nU$ re   )r  r  rf   s     r7   rD   MetaNeXt.forward  s'    !!!$a r9   )
r   r   r{   r   r   r   rr   rz   r   r   r   re   )T)NFFr   F)r   FT)%rG   rH   rI   rJ   rK   r   r+   r   r   r*   r   r   r   r   ri   r   rL   r)   r   r<   r   ignorer   r   r   r   r   r   Tensorrj   r  r  r  r  rD   rM   rN   rO   s   @r7   r   r      s   & #$!#&2$7J[*,..)+6B!$&#'!E'E' E' 	E'
 E' #s(OE' S/E'  RYYd299o1F FGE' RYYE' BIIE' c5c?23E' E' "E' !E' E'N- YY
 
 YY		  2C 2hsm 2 YY* * YY  8<$$',( ||(  eCcN34(  	( 
 (  (  !%(  
tELL!5tELL7I)I#JJ	K( X ./$#	3S	>*  	
S$ S r9   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nrn   )r'      r  )   r  g      ?bicubiczstem.0zhead.fc2z
apache-2.0)urlrr   
input_size	pool_sizecrop_pctinterpolationmeanr   
first_conv
classifierlicenser	   )r  kwargss     r7   _cfgr&    s3    =vI%.Bj  r9   ztimm/)	hf_hub_idgffffff?)r'  r  )r'   r   r   )   r(  r   )r'  r  r  r  )zinception_next_atto.sail_in1kzinception_next_tiny.sail_in1kzinception_next_small.sail_in1kzinception_next_base.sail_in1kz!inception_next_base.sail_in1k_384c           	      <    [        [        X4S[        SSS90UD6nU$ )Nfeature_cfg)r   r   r   r'   T)out_indicesflatten_sequential)r   r   r   )variant
pretrainedr%  models       r7   _create_inception_nextr0    s1     '\dK E
 Lr9   c           
      `    [        SS[        [        SSS9S9n[        SSU 0[        U40 UD6D6$ )	N)r   r      r   )(   P      i@  r   g      ?)r   r   r   r   r   r.  )inception_next_atto)r   r   r   r0  r.  r%  
model_argss      r7   r7  r7    sB    "4.QUVJ "mJmRVWaRlekRlmmr9   c           	      N    [        SS[        S9n[        SSU 0[        U40 UD6D6$ )Nr   r   r6  r.  )inception_next_tinyr   r   r0  r8  s      r7   r;  r;    s7    "5&J "mJmRVWaRlekRlmmr9   c           	      N    [        SS[        S9n[        SSU 0[        U40 UD6D6$ )Nr'   r'      r'   r   r6  r.  )inception_next_smallr<  r8  s      r7   r@  r@    s7    #6&J "nZnSWXbSmflSmnnr9   c           	      N    [        SS[        S9n[        SSU 0[        U40 UD6D6$ )Nr>  )      i   i   r6  r.  )inception_next_baser<  r8  s      r7   rD  rD    s7    #8&J "mJmRVWaRlekRlmmr9   ) r   ).rK   	functoolsr   typingr   r   r   r   r   r<   torch.nnr+   	timm.datar
   r   timm.layersr   r   r   r   r   r   _builderr   	_featuresr   _manipulater   	_registryr   r   __all__ri   r   rQ   rl   r   r   r   r&  default_cfgsr0  r7  r;  r@  rD  r   r9   r7   <module>rQ     s[  
  5 5   A x x * + ' <,&
		 &
R#bii #L-0		 -0`&BII &R9BII 9x}ryy }@	 %%)& &*& '+' &*&
 *. Hs*%& 4 n n n n o o n nr9   